tonwei139 发表于 2015-11-20 03:02:24

Haproxy+keepalived TCP 层的负载均衡

  一、安装环境准备:
  l# yum install ipvsadm kernel-developenssl-devel popt-devel libnl-devel gcc make –y
  lMakebinding to non-local Virtual IPs on all nodes
  vi /etc/sysctl.conf在各haproxy的机器上,在/etc/sysctl.conf下添加如下设置
  net.ipv4.ip_nonlocal_bind = 1
   否则:会出现 scoket cannot connectxxxx.xxxx.xxxx.xxxx:port
  二、背景介绍
  
  Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性
  HAProxy介绍
  反向代理服务器,支持双机热备支持虚拟主机, ,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入,新的1.3引入了frontend,backend;frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend
  
  三、安装keepalived与haproxy
  在
  # yum -y install haproxy keepalived
  四、配置haproxy
  
  # cd /etc/haproxy/
  # cphaproxy.cfghaproxy.cfg.orig
   vihaproxy.cfg
  global   
  log         127.0.0.1 local2
  chroot      /var/lib/haproxy
  pidfile      /var/run/haproxy.pid
  maxconn    4000
  user      haproxy
  group       haproxy
  daemon
  #turn onstats unix socket
  stats socket/var/lib/haproxy/stats
  
  defaults
  mode                   tcp
  log                     global
  option                  dontlognull
  option                  http-server-close
  option                  redispatch
  optionabortonclose
  retries                  3
  timeout queue         1m
  timeoutconnect          10s
  timeoutclient            1m
  timeoutserver            1m
  timeoutcheck             10s
  maxconn               3000
  
  listen proxy_apalad
  bind192.168.211.200:8082
  mode tcp
  optionhttpchk
  balanceroundrobin
  server slave3192.168.211.185:21000 weight 1 maxconn 1000
  server slave4192.168.211.253:21000 weight 1 maxconn 1000
  listen admin_stats
  bind192.168.211.200:8081
  mode http
  optionhttplog
  maxconn 10
  stats refresh30s
  stats uri/stats
  
  备注:加日志支持
  1.       编辑/etc/rsyslog.conf在最下边增加
  local3.* /var/log/haproxy.log
  local0.* /var/log/haproxy.log
  local2.* /var/log/haproxy.log
  2.       编辑 /etc/sysconfig/rsyslog修改:
  SYSLOGD_OPTIONS="-r -m 0"
  3.       重启日志服务
  #service rsyslog restart
  五、配置keepalived
  
  ! Configuration File for keepalived
  vrrp_script chk_http_port {
  script"/etc/keepalived/check_haproxy.sh"
  interval2
  weight   2
  }
  #vrrp_script chk_haproxy{
  #    script"killall -0 haproxy"
  #    interval 2
  #    weight -2
  #}
  vrrp_instance VI_1 {
  state MASTER
  interfaceeth1
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.211.200
  }
  track_script{
  #chk_haproxy
  chk_http_port
  }
  #notify_master "/etc/keepalived/scripts/start_haproxy.sh"
  #notify_backup "/etc/keepalived/scripts/stop_keepalived.sh"
  #notify_fault"/etc/keepalived/scripts/stop_keepalived.sh"
  #notify_stop   "/etc/keepalived/scripts/stop_haproxy.sh"
  
  配置keepalived 备用节点,与主配节点的区别有两处
  Ø将stateMASTER 修改为stateBACKUP
  Ø将priority100   修改为priority99
  
  六、附加脚本
  
  #cd /etc/keepalived/
  #vi check_haproxy.sh
  #!/bin/bash
  if [ $(ps -C haproxy --no-header | wc-l) -eq 0 ]; then
      /etc/init.d/haproxystart
  fi
  sleep 2
  if [ $(ps -C haproxy --no-header | wc-l) -eq 0 ]; then
        /etc/init.d/keepalived stop
  fi
  
  修改脚本执行权限:
  # chmod +x /etc/keepalived/check_haproxy.sh
  # vi /etc/keepalived/script/start_haproxy.sh
  
  #!/bin/bash
  
  sleep 5
  get=`ip addr |grep 192.168.211.200 |wc -l`
  echo $get >>/etc/keepalived/scripts/start_ha.log
  
  if [ $get -eq 1 ]
  then
  echo"`date +%c` success to get vip" >> /etc/keepalived/scripts/start_ha.log
  /etc/init.d/haproxy start
  else
  echo"`date +%c` can not get vip" >>/etc/keepalived/scripts/start_ha.log
  fi
  
  # vi /etc/keepalived/script/stop_haproxy.sh
  /etc/init.d/haproxystop
  # vi /etc/keepalived/script/stop_keepalived.sh
  #!/bin/bash
  
  pid=`pidof keepalived`
  if [ "$pid"x == ""x ]
  then
  echo"`date +%c` no keepalived process id" >> /etc/keepalived/scripts/stop_keep.log
  else
  echo"`date +%c` will stop keepalived " >> /etc/keepalived/scripts/stop_keep.log
  /etc/init.d/keepalivedstop
  fi
  
  /etc/init.d/keepalived stop
  
  七、测试
  启动haproxy:   #/etc/init.d/haproxy start
  启动keepalived:# /etc/init.d/keepalived start
  
  
  
  八、参考文档
  http://blog.laimbock.com/2014/10/01/howto-setup-high-available-haproxy-with-keepalived/
  Howtosetup High-Available HAProxy with Keepalived
  http://blog.iyunv.com/zzhongcy/article/details/46443765
  haproxy做TCP层的负载均衡
  http://my.oschina.net/davehe/blog/162560
  keepalived+haproxy高可用负载均衡
  http://blog.liuts.com/post/223/
  基于Keepalived+Haproxy搭建四层负载均衡器[原创]
页: [1]
查看完整版本: Haproxy+keepalived TCP 层的负载均衡