HAProxy负载均衡

一、HAProxy简介

  HAProxy是免费、高效、可靠的高可用及负载均衡解决方案。该软件非常适合于处理高负载站点的七层数据请求。HAProxy的工作模式使其可以非常容易且安全地集成到我们现有的站点架构中。使用类似的代理软件还可以对外屏蔽内部的真实web服务器,防止内部服务器遭受外部攻击。HAProxy拓扑结构如图1所示,终端用户通过访问HAProxy代理服务器获得站点页面,而代理服务器在收到客户端请求后会根据自身规则将数据转发给后端真实服务器。为了让同一客户端访问服务器可以保持会话(同一客户端第二次访问网站时可以被转发至相同的后端真实服务器),HAProxy有三种解决方案:客户端IP、Cookie以及Session。第一种方式中,HAProxy将客户端IP进行Hash计算并保存,以此确保当相同的IP访问代理服务器时可以转发到固定的真实服务器上。第二种方式中,HAProxy依靠真实服务器发送给客户端的Cookie信息进行会话保持。第三种方式中,HAProxy将保存真实服务器的Session及服务器标识,实现会话保持功能。

图1:


  HAproxy软件包可以在官网下载。下面通过源码方式安装该软件,在使用make命令生成makefile文件时,TARGET=linux2628代表Linux操作系统使用的内核版本为2.6.28及以上的版本。

[root@haproxy ~]# yum -y install gcc

[root@haproxy ~]# wget http://haproxy.lwt.eu/1.4/src/haproxy-1.4.24.tar.gz

[root@haproxy ~]# tar -zxvf haproxy-1.4.24.tar.gz  -C  /usr/src/

[root@haproxy ~]# cd /usr/src/haproxy-1.4.24/

[root@haproxy ~]# make TARGET=linux2628

[root@haproxy ~]# make install

二、配置文件说明 

  HAProxy安装后没有默认的配置文件,需要手动创建。本例将创建/etc/haproxy.cfg 配置文件,当启动HAProxy服务时需要使用-f选项指定文件路径。HAProxy配置文件主要包含全局设置段与代理段,global代表全局段,defaults、listen、frontend、backend为代理段。frontend用来匹配客户端请求的域名或URL等,backend定义后端服务器集群,listen是frontend与backend的集合,有时仅使用listen即可替代frontend与backend。下面给出了一个监听80端口的HTTP代理案例,代理服务器将转发数据请求到单一后台服务器127.0.0.1:8000


表1列出了HAProxy主配置文件的具体语法格式及描述。

表1:



ACL访问控制列表案例如下:


三、HAProxy应用案例

  本节以生产环境为原型,简化网络拓扑后使用HAProxy实现图2所示的高性能代理服务架构,整个网络参数见表2 。本次案例将使用listen定义一个监控端口;使用frontend定义一个前端80端口;通过backend分别定义名为inside_servers 和 external_servers 的服务器组;使用default_backend定义默认服务器组为external_servers;定义ACL规则时,如果内网(192.168.0.0/24)访问web服务,则由inside_servers服务器组提供web页面。

  external_servers 服务器组中包含web1.example.com 和 web2.example.com 两台服务器,inside_servers 服务器组中仅包含 web3.example.com 一台服务器。

图2:


表2:



  三台web服务器基本采用相同的设置,为了演示HAProxy可以轮询访问后端服务器,我们将三台服务器的页面设置为不同的内容以示区别。

web1:

[root@web1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.0.1

PREFIX=24

GATEWAY=192.168.0.254

TYPE=Ethernet

[root@web1 ~]# service network restart

[root@web1 ~]# yum -y install httpd

[root@web1 ~]# echo "192.168.0.1" > /var/www/html/index.html

[root@web1 ~]# service iptables stop

web2:

[root@web2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.0.2

PREFIX=24

GATEWAY=192.168.0.254

TYPE=Ethernet

[root@web2 ~]# service network restart

[root@web2 ~]# yum -y install httpd

[root@web2 ~]# echo "192.168.0.2" > /var/www/html/index.html

[root@web2 ~]# service iptables stop

web3:

[root@web3 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.0.3

PREFIX=24

GATEWAY=192.168.0.254

TYPE=Ethernet

[root@web3 ~]# service network restart

[root@web3 ~]# yum -y install httpd

[root@web3 ~]# echo "192.168.0.3" > /var/www/html/index.html

[root@web3 ~]# service iptables stop

  HAProxy代理服务器设置如下:

[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

IPADDR=10.10.10.10

PREFIX=8

TYPE=Ethernet

[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.0.254

PREFIX=24

TYPE=Ethernet

[root@haproxy ~]# service network restart

[root@haproxy ~]# service iptables stop

[root@haproxy ~]# vim /etc/security/limits.conf   #内核调优,文件中插入如下两行

*                 soft        nofile           65535

*                 hard       nofile           65535

[root@haproxy ~]# yum -y install gcc

[root@haproxy ~]# wget http://haproxy.lwt.eu/1.4/src/haproxy-1.4.24.tar.gz

[root@haproxy ~]# tar -zxvf haproxy-1.4.24.tar.gz  -C  /usr/src/

[root@haproxy ~]# cd /usr/src/haproxy-1.4.24/

[root@haproxy ~]# make TARGET=linux2628

[root@haproxy ~]# make install

[root@haproxy ~]# mkdir /var/haproxy                 #chroot所需要的目录

[root@haproxy ~]# vim /etc/haproxy.cfg              #创建配置文件





[root@haproxy ~]# vim /etc/rsyslog.conf            #修改日志配置文件,插入以下三行

$ModLoad  imudp

$UDPServerRun  514

local3.*                                             /var/log/haproxy.log

[root@haproxy ~]# service rsyslog restart             #重启系统日志服务

[root@haproxy ~]# haproxy -f /etc/haproxy.cfg  #指定配置文件启动HAProxy服务

[root@haproxy ~]# echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local  

客户端验证:

  首先为客户端主机配置正确的网络环境,确保客户端与HAProxy代理服务器可以直接连通。使用浏览器访问http://10.10.10.10:6553/admin?stats 查看代理服务器状态统计信息。

  配置客户端主机IP地址为10.10.10.100,通过浏览器访问http://10.10.10.10,刷新将分别得到web1.example.com 以及 web2.example.com两台主机返回的页面信息。如果客户端主机IP地址设置为192.168.0.0/24网络内的IP,则访问http://192.168.0.254,服务器返回的页面将永远都是web3.example.com主机的页面信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值