设为首页 收藏本站
查看: 1662|回复: 0

[经验分享] HAProxy负载均衡原理及企业级实例部署haproxy集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-8 13:18:38 | 显示全部楼层 |阅读模式
一 HAProxy简介


HAProxy是一种高效、可靠、免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求。客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。

同一客户端访问服务器,HAProxy保持回话的三种方案:
1 HAProxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。
2 HAProxy依靠真实服务器发送给客户端的cookie信息进行回话保持。
3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。

haproxy拓扑结构图

QQ截图20170208131724.png


二 配置文件解析

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包括web1.test.com和web2.test.com 两台服务器
inside_servers包含web3.test.com 一台服务器

服务器名称网络配置
haproxy.test.cometh0:10.10.10.10
eth1:192.168.1.2
web1.test.cometh0:192.168.1.3
web2.test.cometh0:192.168.1.4
web3.test.cometh0: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 测试验证
浏览器访问监控页面
在一个ip为10.10.10.100的机器上访问http://10.10.10.10:6553/admin?stats
多次刷新访问将得到web1和web2 不同页面信息
如果配置文件中开启使用inside_servers,则在192.168.1.0/24网段机器上访问http://192.168.1.2,服务器返回的会一直是web3的页面信息。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339392-1-1.html 上篇帖子: HAproxy基础服务实现及相关参数讲解 下篇帖子: HAproxy简单入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表