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

[经验分享] HAProxy负载均衡实验

[复制链接]

尚未签到

发表于 2019-1-1 08:42:52 | 显示全部楼层 |阅读模式
  1.环境描述:
HAProxy  IP:192.168.239.128 Centos6.0-64bit
Web1     IP:192.168.239.129 Centos6.0-64bit
Web2     IP:192.168.239.133 Centos6.0-64bit
  2.环境准备:
  

  这里仅作测试性的实验,不用于正式线上业务,因此所有软件均采用yum的方式安装。
  HAProxy:
[root@haproxy1_test ~]# yum -y install haproxy.x86_64  Web1:
[root@web1 ~]# yum -y install httpd  Web2:
[root@web2 ~]# yum -y install httpd  

  修改web1,web2节点的index.html文件:
  

[root@web1 ~]# cat /var/www/html/index.html
I am web1
[root@web2 ~]# cat /var/www/html/index.html
I am web2  这样判定我们实际访问的后端web服务器到底是web1还是web2。
  

  3.修改HAprxoy配置:
  

[root@haproxy1_test ~]# cat /etc/haproxy/haproxy.cfg
global
log         127.0.0.1 local0
chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon
nbproc      1
stats socket /var/lib/haproxy/stats
defaults
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option                  forwardfor
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
stats   uri             /admin?stats
timeout check           10s
#balance                 source
maxconn                 3000
listen web_proxy 192.168.239.128:81
server web1 192.168.239.129:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2 192.168.239.133:80 cookie app1inst2 check inter 2000 rise 2 fall 5  

  以下是部分参数的解释:
     maxconn 4000#最大连接数

   user        haproxy#用户

   group       haproxy#用户组

  daemon     #使HAProxy进程进入后台运行。这是推荐的运行模式
  nbproc 1   #创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
     defaults   #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
     mode http  #http模式

     option httplog#采用http日志

     retries 3#尝试三次失败则认为服务器不可用
  
     option redispatch#当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
  stats   uri             /admin?stats #Haproxy的管理页面
   #balance      source  #Haproxy算法,source表示根据请求源IP,即同一IP请求均会被指向同一台后端服务器,这里暂不启用
  
listen web_proxy 192.168.239.128:81  #定义了监听的IP、端口,如果有vip也可以换成vip

server web1 192.168.239.129:80 cookie app1inst1 check inter 2000 rise 2 fall 5
  server web2 192.168.239.133:80 cookie app1inst2 check inter 2000 rise 2 fall 5
  #定义了web1,web2两台后端服务器


  


  

  4.测试:
  启动相关软件:
  

[root@haproxy1_test ~]# /etc/init.d/haproxy start
Starting haproxy:                          [  OK  ]
[root@web1 ~]# /etc/init.d/httpd start
Starting httpd:                            [  OK  ]
[root@web2 ~]# /etc/init.d/httpd start
Starting httpd:                            [  OK  ]  

  使用浏览器访问:   

  监控页面效果图:

  

  页面内容:


  

  根据此时的页面内容我们可以判定此时访问的是web1这台服务器,再次刷新:

  发现此时的页面内容有变化,访问的是web2这台服务器!
  可以默认情况下,HAproxy的负载平衡策略会导致一些问题,例如回话保持,无法在用户登录期间
  记录用户的一些状态、信息等。
  

  5.修改负载平衡策略再次测试:
  默认的负载平衡策略无法保证用户每次访问的都是同一后端服务器,会带来一些回话保持方面的问题,因此我们使用balance参数修改负载平衡策略。
  将#balance source     行注释删掉,即指定HAproxy使用source负载平衡策略。source表示根据请求源IP,即同一IP请求均会被指向同一台后端服务器。
     重启HAproxy,然后多次刷新页面,此时应该显示的是同一web页面,即每次访问的都是同一后端服务器,当然如果换IP访问,就会出现不同的web页面,但每个IP显示的页面应该是相同的。
  

  6.隐藏版本号:
  默认的配置是显示Haproxy的版本号的,从前面管理页面的图中也是可以看到的:当前的版本号是1.4.22。暴漏版本号是有一定风险的,因此我们要想办法将其隐藏起来。通过查询官方的配置文档(
  链接 http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#stats%20hide-version):
  

  

  可以看出stats hide-version 即可以实现从报告中隐藏版本号的需求。
  修改配置文件、重启Haproxy再次测试:
  配置修改如下:

  

defaults
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option                  forwardfor
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
stats   uri             /admin?stats
stats hide-version  注意添加的位置必须和stats uri在同一标签下(这里为default),否则加入stats hide-version会导致管理页面不可用,暂不清楚是什么原因。重载配置、打开管理页面:

  


  可以看到Haproxy的版本信息已经被隐藏了。

  7.分离Haproxy的日志:
   Haproxy的日志默认是写在/var/log/messages里面的,这样的导致一个问题就是Haproxy的日志混杂在系统日志里,不方面故障排查、日志分析等。因此我们需要从messages里面分离Haproxy的日志。
           而Haproxy中使用log 参数来控制日志的写入的:

            global
              log         127.0.0.1 local0
           因此我们需要修改这里,将其改为local2(也可以是其他的,0-7均可以)。同时我们在rsyslog.conf中加入如下一行:
  
[root@haproxy1_test ~]# vi /etc/rsyslog.conf
# Save boot messages also to boot.log
local7.*                      /var/log/boot.log
#for   the Haproxy                                    
local2.*                     /var/log/haproxy.log          注意由于我采用的是Centos6.0,6.X与之前的5.X采用的日志系统不同,5.X用的是syslogd,而6.X中普遍使用的是rsyslogd,因此配置文件路径以及配置上有少许的不同。接着还需要打开syslogd或者rsyslogd的UDP端口(514),而网上流行的配置都是针对syslogd的,如修改  SYSLOGD=”-r”,加入-r参数。但在rsyslog中-r参数已经不被兼容了,所以修改SYSLOGD的方法无效。
  google一番,找个一个靠谱的方法,感谢国外的大神贡献~,方法如下:
  

[root@haproxy1_test ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp.so                                                                                                                  
$UDPServerRun 514  在rsyslog.conf中将其UDP的541端口监听打开。
[root@haproxy1_test ~]# netstat -lnutp | grep 514
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               4460/rsyslogd      
udp        0      0 :::514                      :::*                                    4460/rsyslogd   
  

  之后重启rsyslogd,haproxy就可以了。查看相关日志:
  

[root@haproxy1_test ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [  OK  ]
Starting system logger: [  OK  ]
[root@haproxy1_test ~]# /etc/init.d/haproxy restart
Stopping haproxy: [  OK  ]
Starting haproxy: [  OK  ]
[root@haproxy1_test ~]# tailf /var/log/haproxy.log
Jun 21 01:21:51 localhost haproxy[4548]: Proxy web_proxy started.
Jun 21 01:21:53 localhost haproxy[4549]: Server web_proxy/web1 is DOWN, reason: Layer4 timeout, check duration: 2004ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.  


           可以看出来,haproxy的日志已经被写在/var/log/haproxy.log中了。当然也可以指定haproxy的日志的不同等级,从而写入不同的日志文件中。
          附rsyslogd记录Haproxy解决办法的原链接:
            http://kvz.io/blog/2010/08/11/haproxy-logging/





运维网声明 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-658122-1-1.html 上篇帖子: HAproxy简单入门 下篇帖子: 编译安装haproxy
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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