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

[经验分享] Haproxy + keepalived 高可用负载均衡解决方案

[复制链接]

尚未签到

发表于 2018-12-31 13:21:51 | 显示全部楼层 |阅读模式
文档作者:amunlinux
文档版本:Version 1.1
修改记录:2017-04-22
系统环境:CentOS 6.8 64 bit
  

  IP 信息列表:
  

  名称 IP
  -----------------------------------
  VIP  192.168.200.254
  Haproxy-1 192.168.200.202
  Haproxy-2 192.168.200.204
  Nginx1  192.168.200.202
  Nginx2 192.168.200.203
  

  

  1、在Nginx1/2上编译安装nginx服务
  1.1首先安装Nginx1
  [root@Nginx-1 ~]# yum -y install pcre-devel zlib-devel
  [root@Nginx-1 ~]# useradd -M -s /sbin/nologin  nginx
  [root@Nginx-1 ~]# tar xf nginx-1.6.2.tar.gz -C /usr/src
  [root@Nginx-1 ~]# cd /usr/src/nginx-1.6.2
  [root@Nginx-1 nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
  [root@Nginx-1 nginx-1.6.2]# cd /usr/local/nginx/html/
  [root@Nginx-1 html]# echo "server 192.168.200.202" > index.html
  [root@Nginx-1 html]# /usr/local/nginx/sbin/nginx
  [root@Nginx-1 html]# netstat -anpt |grep nginx
  tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      4503/nginx
  

  

  

  1.2安装Nginx2, 同Nginx1搭建方式是一样的。
  与Nginx1唯一不同的是:
  [root@Nginx-2 html]# echo "server 192.168.200.203" > index.html
  

  

  

  

  2.安装Haproxy-1与Haproxy-2 两台机器配置一致:
  [root@Haproxy-1 ~]# yum -y install pcre-devel bzip2-devel
  [root@Haproxy-1 ~]# tar xf haproxy-1.4.24.tar.gz -C /usr/src/
  [root@Haproxy-1 ~]# cd /usr/src/haproxy-1.4.24/
  [root@Haproxy-1 haproxy-1.4.24]# make TARGET=linux26 && make install
  

  2.1Haproxy服务器配置
  建立haproxy的配置目录及文件
  [root@Haproxy-1 haproxy-1.4.24]# mkdir /etc/haproxy
  [root@Haproxy-1 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
  

  2.2 haproxy配置项的介绍
  haproxy的配置文件通常分为三部分: global(全局配置部分) defaults(默认配置部分) listen(应用组件部分)
  

  

  [root@Haproxy-1 ~]# vim /etc/haproxy/haproxy.cfg
  # this config needs haproxy-1.1.28 or haproxy-1.2.1
  

  global
  log 127.0.0.1local0
  log 127.0.0.1local1 notice
  #log loghostlocal0 info
  maxconn 4096
  #chroot /usr/share/haproxy
  uid 99
  gid 99
  daemon
  #debug
  #quiet
  

  defaults
  logglobal
  modehttp
  optionhttplog
  optiondontlognull
  retries3
  #redispatch
  maxconn2000
  contimeout5000
  clitimeout50000
  srvtimeout50000
  

  listenweb-cluster 0.0.0.0:80
  option httpchk GET /index.html
  balanceroundrobin
  serverinst1 192.168.200.202:80 check inter 2000 fall 3
  serverinst2 192.168.200.203:80 check inter 2000 fall 3
  

  

  2.3 创建自启动脚本
  [root@Haproxy-1 ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
  [root@Haproxy-1 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
  [root@Haproxy-1 ~]# chmod +x /etc/init.d/haproxy
  [root@Haproxy-1 ~]# /etc/init.d/haproxy start
  Starting haproxy:                                          [确定]
  

  

  2.4 测试:
  用浏览器打开 http://192.168.200.204
  再次打开一个新的浏览器再次访问 http://192.168.200.204
  

  用浏览器打开 http://192.168.200.202
  再次打开一个新的浏览器再次访问 http://192.168.200.202
  

  可以验证两次访问到的结果分别为:
  server 192.168.200.202
  server 192.168.200.203
  

  

  

  

  3、编译安装keepalived服务
  [root@Haproxy-1 ~]# yum -y install kernel-devel openssl-devel popt-devel
  [root@Haproxy-1 ~]# tar xf keepalived-1.2.13.tar.gz
  [root@Haproxy-1 ~]# cd keepalived-1.2.13
  [root@Haproxy-1 keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686 && make && make install
  

  3.1 配置keepalibed 开机启动脚本
  [root@Haproxy-1 ~]# chkconfig --add keepalived
  [root@Haproxy-1 ~]# chkconfig keepalived on
  [root@Haproxy-1 ~]# chkconfig --list keepalived
  [root@Haproxy-1 ~]# service keepalived start|stop
  

  3.2.1 配置keepalibed 主配置文件
  [root@Haproxy-1 ~]# vim /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  

  vrrp_script chk_http_port {
  script "/etc/keepalived/check_haproxy.sh"
  interval 2
  weight 2
  

  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  

  track_script {
  chk_http_port
  }
  

  virtual_ipaddress {
  192.168.200.254
  }
  }
  }
  

  

  3.2.2 第二台Haproxy配置keepalibed 主配置文件
  [root@Haproxy-2 ~]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  

  vrrp_script chk_http_port {
  script "/etc/keepalived/check_haproxy.sh"
  interval 2
  weight 2
  

  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 50
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  

  track_script {
  chk_http_port
  }
  

  virtual_ipaddress {
  192.168.200.254
  }
  }
  }
  

  4、两台机器上都配置haproxy检测脚本
  [root@Haproxy-1 ~]# cat /etc/keepalived/check_haproxy.sh
  #!/bin/bash
  A=`ps -C haproxy --no-header |wc -l`
  if [ $A -eq 0 ]
  then
  /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
  sleep 3
  if [ `ps -C haproxy --no-header |wc -l` -eq 0 ]
  then
  /etc/init.d/keepalived stop
  fi
  fi
  

  [root@Haproxy-1 ~]# chmod +x /etc/keepalived/check_haproxy.sh
  

  [root@Haproxy-1 ~]# service keepalived start
  [root@Haproxy-2 ~]# service keepalived start
  

  5.1、测试VIP地址
  [root@Haproxy-1 ~]# ip addr show dev eth0
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:cc:18:a2 brd ff:ff:ff:ff:ff:ff
  inet 192.168.200.201/24 brd 192.168.200.255 scope global eth0
  inet 192.168.200.254/32 scope global eth0
  inet6 fe80::20c:29ff:fecc:18a2/64 scope link
  valid_lft forever preferred_lft forever
  

  [root@Haproxy-1 ~]# /etc/init.d/keepalived stop
  停止 keepalived:                                          [确定]
  

  [root@Haproxy-2 ~]# ip addr show dev eth0
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:fd:8a:4e brd ff:ff:ff:ff:ff:ff
  inet 192.168.200.204/24 brd 192.168.200.255 scope global eth0
  inet 192.168.200.254/32 scope global eth0
  inet6 fe80::20c:29ff:fefd:8a4e/64 scope link
  valid_lft forever preferred_lft forever
  
  5.2、测试Haproxy健康检查
  [root@Haproxy-1 ~]# service haproxy stop
  Shutting down haproxy:                                     [确定]
  [root@Haproxy-1 ~]# service haproxy status
  haproxy (pid 59717) 正在运行...
  
  
  5.3 网页测试:
  用浏览器打开 http://192.168.200.254
  再次打开一个新的浏览器再次访问 http://192.168.200.254
  

  

  可以验证两次访问到的结果分别为:
  server 192.168.200.202
  server 192.168.200.203
  

  

  

  

  

  

  END




运维网声明 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-657984-1-1.html 上篇帖子: 测试keepalived备备模式的主从切换过程 下篇帖子: Nginx+keepalived负载均衡高可用篇第③版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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