HAProxy负载均衡原理及企业级实例部署haproxy集群

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HAProxy负载均衡原理及企业级实例部署haproxy集群
⼀ HAProxy简介
HAProxy是⼀种⾼效、可靠、免费的⾼可⽤及负载均衡解决⽅案,⾮常适合于⾼负载站点的七层数据请求。

客户端通过HAProxy代理服务器获得站点页⾯,⽽代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。

同⼀客户端访问服务器,HAProxy保持回话的三种⽅案:
1 HAProxy将客户端ip进⾏Hash计算并保存,由此确保相同IP访问时被转发到同⼀真实服务器上。

2 HAProxy依靠真实服务器发送给客户端的cookie信息进⾏回话保持。

3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。

haproxy拓扑结构图
⼆配置⽂件解析
Haproxy安装后默认没有配置⽂件,需要⼿动创建/etc/haproxy.cfg。

启动haproxy时⽤-f指定配置⽂件路径。

haproxy的配置⽂件包含全局设置段与代理段,global是全局段,defaults、listen、frontend、backend为代理段。

frontend⽤来匹配客户端请求的域名或者URL;backend 定义后端服务器集群
haproxy配置⽂件参数详细解析
配置项描述
global chroot<jail dir>将⼯作⽬录切换到<jail dir>并执⾏chroot
daemon后台⼯作模式
uid进程账户id,建议设置为haproxy专⽤账户
gid进程组id,建议设置为haproxy专⽤组
log<address><facility>配置全局syslog,可以设置两台⽇志服务器
nbproc<number>指定后台进程数量
pidfile<file>指定pid⽂件
ulimit-n<number>设置每个进程最⼤⽂件描述符数量
maxconn<number>每个进程⽀持的最⼤并发数
tune.bufsize<number>设置buffer⼤⼩,默认16384B
mode可选tcp、http、health
timeout check<timeout>设置检查超时时间
contimeout<timeout>设置连接超时时间
balance roundrobin设置轮询负载
bind<address>:port定义⼀个或者多个监听地址和端⼝
stats auth admin:admin设置监控界⾯的⽤户名和密码
stats refresh<number>统计页⾯刷新间隔时间
option httplog使⽤http⽇志
cookie<name>启⽤cookie的保持连接功能
option forwardfor允许插⼊这种数据包头,可以让后端服务器获取客户端ip option abortonclose负载⾼时,⾃动关闭处理时间长的请求
option allbackups后端服务器宕机,是否激活全部备机,默认启动第⼀个备机option dontlognull不记录空连接⽇志,主要⽤于不记录健康检查⽇志
代理设置option redispatch后端某个机器宕机,强制把请求转发给健康机器monitor-uri<URi>检查uri⽂件是否存在,依次判断主机的健康状态monitor-fail if site_dead服务器宕机时,返回503代码
option httpchk<uri>使⽤http协议检查服务器健康状态
retries<value>服务器连接失败后的重试次数
timeout client客户端最⼤超时时间,单位毫秒
timeout server服务器最⼤超时时间,单位毫秒
timeout connect最⼤连接超时时间,单位毫秒
default_backend默认后端服务器组
use_backend当条件满⾜时,指定后端服务器组
acl<name><criterion>定义访问控制列表
三 Haproxy实例部署
本例使⽤listen定义⼀个监控端⼝;
使⽤frontend定义⼀个前端80端⼝;
通过backend定义名为inside_servers 和 external_servers的服务器组;使⽤default_backend定义默认服务器组external_servers;
external_servers包括和 两台服务器inside_servers包含 ⼀台服务器
服务器名称⽹络配置 eth0:10.10.10.10
eth1:192.168.1.2 eth0:192.168.1.3 eth0:192.168.1.4 eth0:192.168.1.5
1 ⾸先配置web服务器
在web1 web2 web3上安装httpd并配置⽹卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
ONBOOT=yes
TYPE=Ethernet
service network restart
yum install -y httpd
iptables -F
iptables -X
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
echo "web1 192.168.1.3" > /var/www/html/index.html service httpd restart
chkconfig httpd on
web2 web3机器上执⾏与web1相同步骤,注意修改部分参数
2 接着haproxy服务器配置
设置两块⽹卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONBOOT=yes
TYPE=Ethernet
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
service network restart
service iptables stop
内核调优,修改系统⽂件
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
配置⽇志⽂件,添加三⾏
vim /etc/rsyslog.conf
$ModLoad imudp $UDPServerRun 514
local3.* /var/log/haproxy.log
yum -y install gcc
tar zxf haproxy-1.6.11.tar.gz -C /usr/src/ cd /usr/src/haproxy-1.6.11/
make TARGET=linux2628
make install
mkdir /var/haproxy
3 创建配置⽂件
vim /etc/haproxy.cfg
global
maxconn 4096
log 127.0.0.1 local3 info
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /var/run/haproxy.pid
ulimit-n 65535
stats socket /var/tmp/stats
defaults
log global
mode http
maxconn 20480
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
stats refresh 30
retries 3
balance roundrobin
cookie SRV
timeout check 2000ms
timeout connect 5000ms
timeout server 50000ms
timeout client 50000ms
listen admin_status #定义haproxy的监控界⾯
bind 0.0.0.0:6553
mode http
log 127.0.0.1 local3 info
stats enable
stats refresh 5s #监控页⾯⾃动刷新时间5s
stats realm Haproxy\ Statistics #登录监控页⾯提⽰符
stats uri /admin?stats #监控页⾯URL路径
stats auth admin:123456 #监控页⾯的账户密码
stats hide-version #隐藏haproxy版本
frontend web_service #定义前端服务器
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
option forwardfor
#acl inside_src src 192.168.1.0/24 #定义acl
#use_backend inside_servers if inside_src #判断acl的源地址,把请求转发到inside_servers组
default_backend external_servers #默认服务器组
backend external_servers
mode http
balance roundrobin #轮询真实服务器
option httpchk GET /index.html #检查index⽂件,判断服务器是否健康
##定义后端真实服务器,向cookie中插⼊web1信息,check进⾏健康检查,检查时间间隔为2000ms,##连续两次健康则认为是正常开启的,连续三次检查失败则认为宕机,服务器权重1
server web1 192.168.1.3:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1
server web2 192.168.1.4:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1
#backend inside_servers
#mode http
#balance roundrobin #轮询真实服务器
#option httpchk GET /index.html #检查index⽂件,判断服务器是否健康#server web3 192.168.1.5:80 cookie web3 check inter 2000 rise 2 fall 3 weight 1
4 启动haproxy服务
service rsyslog restart #重启系统⽇志服务
haproxy -f /etc/haproxy.cfg #启动haproxy服务
echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local
5 测试验证
浏览器访问监控页⾯
多次刷新访问将得到web1和web2 不同页⾯信息。

相关文档
最新文档