HAProxy详细配置过程

HAProxy详细配置过程

一、HAProxy安装
http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz
# tar xvzf haproxy-1.4.22.tar.gz
# cd haproxy-1.4.22
# make TARGET=linux26 PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy


# mkdir /usr/local/haproxy/etc
# mkdir -p /data/logs/haproxy


=========================================================================================
二、HAProxy配置
# vim /usr/local/haproxy/etc/haproxy.conf


[python]  view plain  copy
  1. global  
  2.     log 127.0.0.1 local0  
  3.     maxconn 32768  
  4.     chroot /usr/local/haproxy  
  5.     uid haproxy  
  6.     gid haproxy  
  7.     daemon  
  8.     nbproc 8  
  9.     pidfile /var/run/haproxy.pid  
  10.     spread-checks 4  
  11.                                                                     
  12. defaults  
  13.     log global  
  14.     mode http  
  15.     retries 3  
  16.     option httplog  
  17.     option httpclose  
  18.     option dontlognull  
  19.     option forwardfor  
  20.     option redispatch  
  21.     option abortonclose  
  22.     log 127.0.0.1 local3  
  23.     balance roundrobin  
  24.     maxconn 20480  
  25.     contimeout 5000  
  26.     clitimeout 50000  
  27.     srvtimeout 50000  
  28.     timeout check 2000  
  29.                                                                     
  30.     stats enable  
  31.     stats admin if TRUE  
  32.     stats refresh 30s  
  33.     stats uri /server_health_status  
  34.     stats realm Haproxy\ statistics  
  35.     stats hide-version  
  36.     stats auth admin:admin2590159HAHA  
  37.                                                                     
  38. frontend MY_PROXY_SERVER  
  39.     bind 0.0.0.0:80  
  40.     appsession JSESSIONID len 52 timeout 3h  
  41.     cookie SRV insert indirect nocache  
  42.     mode http  
  43.     log global  
  44.                                                                     
  45.     capture request header Host len 40  
  46.     capture request header Content-Length len 10  
  47.     capture request header Referer len 200  
  48.     capture response header Server len 40  
  49.     capture response header Content-Length len 10  
  50.     capture response header Cache-Control len 8  
  51.                                                                     
  52.     acl WEB_SERVER_POLICY1 hdr_dom(host) -i mytest.qq.com  
  53.     use_backend BEHIND_APACHE_SERVER1 if WEB_SERVER_POLICY1  
  54.                                                                     
  55.     acl SITE_DEAD nbsrv(BEHIND_APACHE_SERVER1) lt 1  
  56.     acl SITE_DEAD nbsrv(BEHIND_APACHE_SERVER2) lt 1  
  57.     monitor fail if SITE_DEAD  
  58.                                                                     
  59.     default_backend BEHIND_APACHE_SERVER1  
  60.                                                                     
  61. backend BEHIND_APACHE_SERVER1  
  62.     mode http  
  63.     balance roundrobin  
  64.     cookie SERVERID  
  65.     option httpchk HEAD /index.html HTTP/1.0  
  66.     server WEBSRV1 192.168.1.101:80 maxconn 1500 cookie SRV1 check inter 2000 rise 2 fall 3 weight 1  
  67.     server WEBSRV2 192.168.1.102:80 maxconn 1500 cookie SRV2 check inter 2000 rise 2 fall 3 weight 1  
  68.                                                                     
  69. backend BEHIND_APACHE_SERVER2  
  70.     mode http  
  71.     balance roundrobin  
  72.     cookie SERVERID  
  73.     option httpchk HEAD /index.html HTTP/1.0  
  74.     server WEBSRV1 192.168.1.201:80 maxconn 1500 cookie SRV1 check inter 2000 rise 2 fall 3 weight 1  
  75.     server WEBSRV2 192.168.1.202:80 maxconn 1500 cookie SRV2 check inter 2000 rise 2 fall 3 weight 1  
  76.     server WEBSRV3 192.168.1.203:80 maxconn 1500 cookie SRV3 check inter 2000 rise 2 fall 3 weight 1  


=========================================================================================
三、HAProxy日志记录配置
# vim /etc/syslog-ng/syslog-ng.conf


[python]  view plain  copy
  1. source src_haproxy {  
  2.     udp(ip("0.0.0.0") port(514));  
  3. };  
  4.                                                            
  5. filter f_local03 {  
  6.     facility(local0,local3);  
  7. };  
  8.                                                            
  9. filter custom {  
  10.     program("haproxy");  
  11. };  
  12.                                                            
  13. destination dst_haproxy {  
  14.     file("/data/logs/haproxy/haproxy.log");  
  15. };  
  16.                                                            
  17. log {  
  18.     source(src_haproxy);  
  19.     filter(f_local03);  
  20.     destination(dst_haproxy);  
  21. };  
  22.                                                            
  23. log {  
  24.     source(src_haproxy);  
  25.     filter(custom);  
  26.     destination(dst_haproxy);  
  27. };  


# vim /etc/syslog.conf
[python]  view plain  copy
  1. local3.*        /data/logs/haproxy/haproxy.log  
  2. local0.*        /data/logs/haproxy/haproxy.log  
  3. # vim /etc/sysconfig/syslog  
  4. SYSLOGD_OPTIONS="-r -m 0"  


最后执行命令:
# service syslog restart


=========================================================================================
四、HAProxy命令启动及启动脚本
1、启动命令
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.conf


2、启动脚本
# vim /etc/init.d/haproxy


[python]  view plain  copy
  1. #!/bin/sh  
  2. #  
  3. # haproxy - this script start and stop the haproxy daemon  
  4. #  
  5. # chkconfig 35 on  
  6. # description: HAProxy is a TCP/HTTP reverse proxy.  
  7. # processname: haproxy  
  8. # config: /usr/local/haproxy/etc/haproxy.conf  
  9. # pidfile: /var/run/haproxy.pid  
  10. #  
  11. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  
  12.                                                  
  13. BINFILE="/usr/local/haproxy/sbin/haproxy"  
  14. CFGFILE="/usr/local/haproxy/etc/haproxy.conf"  
  15. PIDFILE="/var/run/haproxy.pid"  
  16. LOCKFILE="/var/lock/haproxy.lock"  
  17.                                                  
  18. RETVAL=0  
  19.                                                  
  20. start() {  
  21.     [[ -x $BINFILE ]] || exit 5  
  22.     [[ -f $CFGFILE ]] || exit 6  
  23.                                                     
  24.     $BINFILE -c -q -f $CFGFILE  
  25.     [[ $? -ne 0 ]] && echo "The HAProxy configure has error." && return 1  
  26.                                                     
  27.     echo -n "Starting HAProxy......"  
  28.     $BINFILE -f $CFGFILE -p $PIDFILE  
  29.                                                     
  30.     RETVAL=$?  
  31.     echo  
  32.     [[ $RETVAL -eq 0 ]] && touch $LOCKFILE  
  33.                                                     
  34.     return $RETVAL  
  35. }  
  36.                                                  
  37. stop() {  
  38.     echo -n "Shutting down HAProxy......"  
  39.                                                     
  40.     while true  
  41.     do  
  42.         /sbin/killproc -TERM $BINFILE  
  43.         [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && break  
  44.     done  
  45.                                                     
  46.     RETVAL=$?  
  47.     echo  
  48.     [[ $RETVAL -eq 0 ]] && rm -f $LOCKFILE $PIDFILE  
  49.                                                     
  50.     return $RETVAL  
  51. }  
  52.                                                  
  53. restart() {  
  54.     stop  
  55.     sleep 1  
  56.     start  
  57. }  
  58.                                                  
  59. reload() {  
  60.     [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && echo "The HAProxy is not running." && return 1  
  61.     echo -n $"Reloading HAProxy......"  
  62.                                                     
  63.     if [[ -f $PIDFILE ]]; then  
  64.         $BINFILE -f $CFGFILE -st `cat $PIDFILE`  
  65.     else  
  66.         $BINFILE -f $CFGFILE -st `ps aux | grep sbin/haproxy | grep -v grep | awk '{print $2}'`  
  67.     fi  
  68.                                                     
  69.     RETVAL=$?  
  70.     echo  
  71.                                                     
  72.     return $RETVAL  
  73. }  
  74.                                                  
  75. case "$1" in  
  76. start)  
  77.     start  
  78.     ;;  
  79.                                                     
  80. stop)  
  81.     stop  
  82.     ;;  
  83.                                                     
  84. restart)  
  85.     restart  
  86.     ;;  
  87.                                                     
  88. reload)  
  89.     reload  
  90.     ;;  
  91.                                                     
  92. condrestart)  
  93.     [[ -e $LOCKFILE ]] && restart || :  
  94.     ;;  
  95.                                                     
  96. check)  
  97.     $BINFILE -c -q -V -f $CFGFILE  
  98.     ;;  
  99.                                                     
  100. *)  
  101.     echo "Usage: service haproxy {start|stop|restart|reload|condrestart|check}"  
  102.     RETVAL=1  
  103. esac  
  104.                                                  
  105. exit $RETVAL  
  106. # chmod +x /etc/init.d/haproxy  
  107. # chkconfig --add haproxy  
  108. # service haproxy start  




=========================================================================================
五、日志切割脚本
# vim /usr/local/haproxy/sbin/cut_haproxy_log.sh


[python]  view plain  copy
  1. #!/bin/bash  
  2. # This script run at 00:00  
  3.                                            
  4. # The haproxy log path  
  5. LOGPATH="/data/logs/haproxy"  
  6.                                            
  7. [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && exit 1  
  8. mv ${LOGPATH}/haproxy.log ${LOGPATH}/haproxy_$(date -d "yesterday" +"%Y-%m-%d").log  
  9. /sbin/service syslog restart  
  10. # chmod +x /usr/local/haproxy/sbin/cut_haproxy_log.sh  




# crontab -e
00 00 * * * /usr/local/haproxy/sbin/cut_haproxy_log.sh >/dev/null 2>&1


=========================================================================================
六、日志清理脚本
# vim /usr/local/haproxy/sbin/clean_haproxy_log.sh


[python]  view plain  copy
  1. #!/bin/bash  
  2. # This script run at 00:30  
  3.                                       
  4. # The haproxy log path  
  5. LOGPATH="/data/logs/haproxy"  
  6.                                       
  7. [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && exit 1  
  8. rm -f ${LOGPATH}/haproxy_$(date -d "10 days ago" +"%Y-%m-%d").log  
  9. # chmod +x /usr/local/haproxy/sbin/clean_haproxy_log.sh  




# crontab -e
30 00 * * * /usr/local/haproxy/sbin/clean_haproxy_log.sh >/dev/null 2>&1


=========================================================================================
七、网络优化部分
# vim /etc/sysctl.conf


[python]  view plain  copy
  1. net.ipv4.tcp_syncookies = 1  
  2. net.ipv4.tcp_tw_reuse = 1  
  3. net.ipv4.tcp_tw_recycle = 1  
  4. net.ipv4.tcp_fin_timeout = 30  
  5. net.ipv4.tcp_keepalive_time = 1200  
  6.                                    
  7. net.ipv4.ip_local_port_range = 1024 65000  
  8. net.ipv4.tcp_max_syn_backlog = 8192  
  9. net.ipv4.tcp_max_tw_buckets = 80000  
  10.                                    
  11. net.core.somaxconn = 32768  
  12.                                    
  13. net.ipv4.tcp_keepalive_probes = 5  
  14. net.ipv4.tcp_keepalive_intvl = 20  
  15.                                    
  16. net.core.wmem_default = 8388608  
  17. net.core.rmem_default = 8388608  
  18. net.core.rmem_max = 16777216  
  19. net.core.wmem_max = 16777216  
  20.                                    
  21. net.ipv4.tcp_rmem = 4096 87380 16777216  
  22. net.ipv4.tcp_wmem = 4096 65536 16777216  
  23.                                    
  24. net.core.netdev_max_backlog = 32768  
  25.                                    
  26. net.ipv4.tcp_timestamps = 0  
  27. net.ipv4.tcp_synack_retries = 2  
  28. net.ipv4.tcp_syn_retries = 2  
  29. net.ipv4.tcp_retries2 = 5  
  30.                                    
  31. net.ipv4.tcp_mem = 41943040 73400320 94371840  
  32. net.ipv4.tcp_max_orphans = 3276800  
  33. fs.file-max = 1300000  
  34. # /sbin/sysctl -p  




=========================================================================================
八、HAProxy自身健康检查
# vim /usr/local/haproxy/sbin/check_haproxy.sh


[python]  view plain  copy
  1. #!/bin/sh  
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin  
  3.                               
  4. [[ -e "/usr/local/haproxy/sbin" ]] || exit 1  
  5. [[ -z `ps aux | grep sbin/haproxy | grep -v grep` ]] && /sbin/service haproxy start && exit 1  
  6.                               
  7. ETH1_ADDR=`/sbin/ifconfig eth1 | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`  
  8. [[ -z `curl -I -s "http://${ETH1_ADDR}" | grep "200 OK"` ]] && /sbin/service haproxy restart  
  9. # chmod +x /usr/local/haproxy/sbin/check_haproxy.sh  




# crontab -e
*/5 * * * * /usr/local/haproxy/sbin/check_haproxy.sh >/dev/null 2>&1


=========================================================================================
九、测试过程
主机地址:192.168.1.100
绑定本地HOSTS访问:192.168.1.100 mytest.qq.com


后端服务器健康监控页面
http://mytest.qq.com/server_health_status
文章标签:  负载均衡 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值