haproxy + keepalived “一键安装包” 配置与测试HOWTO

许招
2023-12-01

本文为  “haproxy + keepalived 一键安装包”  的 第四篇

目的:帮助快速设置haproxy 与 keepalived 配置文档

第一篇 haproxy 安装与配置

第二篇 keepalived 安装与配置

第三篇 haproxy + keepalived 一键安装包(keepalived 为haproxy 做 HA 高可用)

第四篇 haproxy + keepalived “一键安装包”  配置与测试HOWTO

 

一 haproxy.sh 与 keepalived.sh 服务脚本 

 
 
  1. [root@four cluster]# ls /usr/local/sbin/*.ah 
  2. haproxy.sh  keepalived.sh 

 

二 设置自动启动 haproxy.sh 与 keepalived.sh

 
 
  1. [root@four cluster]# cat /etc/rc.local  
  2. #!/bin/sh 
  3. # This script will be executed *after* all the other init scripts. 
  4. # You can put your own initialization stuff in here if you don't 
  5. # want to do the full Sys V style init stuff. 
  6.  
  7. touch /var/lock/subsys/local 
  8. ulimit -SHn 65535 
  9.  
  10. /usr/local/sbin/haproxy.sh start 
  11. /usr/local/sbin/keepalived.sh start 

 

三 haproxy 相关配置

 
 
  1. 3.1 haroxy 程序目录 
  2. #ls /usr/local/haproxy 
  3. doc  haproxy.cfg  html  logs  sbin  share 
  4.  
  5. 3.2 haproxy 配置文档 
  6. [root@four cluster]# file /usr/local/haproxy/haproxy.cfg  
  7. /usr/local/haproxy/haproxy.cfg: UTF-8 Unicode text 
  8.  
  9. 3.3 编辑haproxy 配置文档 
  10. [root@four cluster]# vim /usr/local/haproxy/haproxy.cfg  
  11. 第37 行 定义健康检查html文档,所以你需要在你的web服务上建立check.html文件用于haproxy 
  12. 健康检查,也可以跟具需要自定义检查文档。 
  13. option  httpchk HEAD /check.html #用来做健康检查html文档 
  14. 第38 39 行修10.0.1.252/253 替换成你的web 服务器ip地址 
  15. server server1 10.0.1.252:80 cookie server1 check inter 2000 rise 3     fall 3 weight 3 
  16. server server2 10.0.1.253:80 cookie server2 check inter 2000 rise 3     fall 3 maxconn 120 weight 3 
  17.  
  18. 3.4 启动haproxy 输入如下命令  
  19. [root@four cluster]# haproxy.sh start 
  20.  
  21. 3.5 检查是否有haproxy 进程 
  22. [root@four cluster]# ps aux | grep haproxy | grep -v 'grep' 
  23. nobody    4216  0.0  0.2   7436  1108 ?        Ss   20:35   0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 
  24.  
  25. 3.6 检查haproxy 是否监听80 端口 
  26. [root@four cluster]# lsof -i :80 
  27. COMMAND  PID   USER   FD   TYPE DEVICE SIZE NODE NAME 
  28. haproxy 4216 nobody    4u  IPv4   8229       TCP *:http (LISTEN) 
  29.  
  30. 3.7 简单测试 haproxy 看看否返回 ’200 OK‘ 
  31. [root@four cluster]# curl -IL http://10.0.1.254 (换成你的ip ) 
  32. HTTP/1.1 200 OK 
  33. Server: nginx/1.0.5 
  34. Date: Wed, 28 Dec 2011 12:42:30 GMT 
  35. Content-Type: text/html 
  36. Content-Length: 159 
  37. Last-Modified: Sat, 03 Dec 2011 11:36:10 GMT 
  38. Connection: close 
  39. Accept-Ranges: bytes 

 

四 keepalived 相关配置

 
 
  1. 4.1 keepalived 程序目录 
  2. [root@four cluster]# ls /usr/local/keepalived 
  3. bin  etc  haproxy_check.sh  keepalived.conf  sbin  share 
  4.  
  5. 4.2 haproxy_check.sh shell脚本监控程序,用于检查 80端口,来判断haproxy 是否可用 
  6. [root@four cluster]# file /usr/local/keepalived/haproxy_check.sh  
  7. /usr/local/keepalived/haproxy_check.sh: Bourne-Again shell script text executable 
  8.  
  9. 4.3 keepalived 配置文档 
  10. [root@four cluster]# file /usr/local/keepalived/keepalived.conf  
  11. /usr/local/keepalived/keepalived.conf: ASCII text 
  12.  
  13. 4.4 编辑keepalived 配置文档 
  14. [root@four cluster]# vim /usr/local/keepalived/keepalived.conf  
  15. 第16 行 interface 默认值 eth1 ,改成你的haproxy 外网卡(公网ip网卡) 
  16. interface eth0 
  17.  
  18. 第 34 行 默认值 10.0.1.250/24 dev eth1 ,10.0.1.250 替换成你virtual ip 地址,dev eth1 改成你的haproxy 外网卡(与第16行一致) 
  19. 10.0.1.250/24 dev eth0 scope global 
  20.  
  21. 4.5 启动keepalived 输入如下命令  
  22. [root@four cluster]# keepalived.sh start 
  23. [root@four cluster]# 4242                #此处返回的是keepalived 进程id,敲下回车键即可 
  24.  
  25. 4.6 检查是否有keepalived 进程 
  26. # ps aux | grep keepalived | grep -v 'grep'  
  27. root      4238  0.0  0.0  63844   464 pts/0    S    20:52   0:00 /bin/bash /usr/local/sbin/keepalived.sh start 
  28. root      4240  0.0  0.1  35776   608 ?        Ss   20:52   0:00 /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/keepalived.conf 
  29. root      4241  0.0  0.1  39936  1048 ?        S    20:52   0:00 /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/keepalived.conf 
  30. root      4242  0.0  0.2  63848  1152 pts/0    S    20:52   0:00 /bin/bash /usr/local/keepalived/haproxy_check.sh start 
  31.  
  32. 4.7 查看keepalived 输出日志 
  33. [root@four cluster]# tail /var/log/messages  
  34. Dec 28 20:52:28 four Keepalived_vrrp: Registering Kernel netlink reflector 
  35. Dec 28 20:52:28 four Keepalived_vrrp: Registering Kernel netlink command channel 
  36. Dec 28 20:52:28 four Keepalived_vrrp: Registering gratutious ARP shared channel 
  37. Dec 28 20:52:28 four Keepalived: Starting VRRP child process, pid=4241 
  38. Dec 28 20:53:08 four Keepalived_vrrp: Opening file '/usr/local/keepalived/keepalived.conf'.  
  39. Dec 28 20:53:08 four Keepalived_vrrp: Configuration is using : 63577 Bytes 
  40. Dec 28 20:53:08 four Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  41. Dec 28 20:53:08 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  42. Dec 28 20:53:12 four Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  43. Dec 28 20:53:13 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE              #当前keepalived 状态为master 

 

五 haproxy 与 keepalived 整体测试

 
 
  1. 5.1 查看 haproxy 与 keepalived 进程树 
  2. [root@four cluster]# pstree  
  3. init─┬─crond 
  4.      ├─events/0 
  5.      ├─events/1 
  6.      ├─haproxy                                      #haproxy 进程 
  7.      ├─keepalived───keepalived                      #keepalived 进程(2个) 
  8.      ├─keepalived.sh───haproxy_check.s───sleep      #keepalived.sh 调用 haproxy_check.sh (监控脚本) 调用 sleep (用于控检查间隔时间,2s) 
  9.  
  10.  
  11. 5.2 模拟网络故障 haproxy 切换测试  
  12. haproxy 1 日志 
  13. [root@one ~]# tail /var/log/messages -f 
  14. Dec 28 21:09:43 one kernel: NFSD: starting 90-second grace period 
  15. Dec 28 21:09:44 one Keepalived: Starting Keepalived v1.2.2 (12/25,2011)  
  16. Dec 28 21:09:44 one Keepalived_vrrp: Registering Kernel netlink reflector 
  17. Dec 28 21:09:44 one Keepalived_vrrp: Registering Kernel netlink command channel 
  18. Dec 28 21:09:44 one Keepalived_vrrp: Registering gratutious ARP shared channel 
  19. Dec 28 21:09:44 one Keepalived: Starting VRRP child process, pid=1993 
  20. Dec 28 21:10:24 one Keepalived_vrrp: Opening file '/usr/local/keepalived/keepalived.conf'.  
  21. Dec 28 21:10:24 one Keepalived_vrrp: Configuration is using : 63597 Bytes 
  22. Dec 28 21:10:24 one Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  23. Dec 28 21:10:24 one Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  24.  
  25. haproxy 2 日志 
  26. [root@four cluster]# ifdown eth0 
  27. [root@four cluster]# tail /var/log/messages  
  28. Dec 28 20:52:28 four Keepalived: Starting VRRP child process, pid=4241 
  29. Dec 28 20:53:08 four Keepalived_vrrp: Opening file '/usr/local/keepalived/keepalived.conf'.  
  30. Dec 28 20:53:08 four Keepalived_vrrp: Configuration is using : 63577 Bytes 
  31. Dec 28 20:53:08 four Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  32. Dec 28 20:53:08 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  33. Dec 28 20:53:12 four Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  34. Dec 28 20:53:13 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
  35. Dec 28 21:12:07 four Keepalived_vrrp: Kernel is reporting: interface eth0 DOWN 
  36. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering FAULT STATE 
  37. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Now in FAULT state                 #keepalived fault 状态 
  38.  
  39. haproxy 1 日志 
  40. [root@one ~]# tail /var/log/messages -f 
  41. Dec 28 21:09:43 one kernel: NFSD: starting 90-second grace period 
  42. Dec 28 21:09:44 one Keepalived: Starting Keepalived v1.2.2 (12/25,2011)  
  43. Dec 28 21:09:44 one Keepalived_vrrp: Registering Kernel netlink reflector 
  44. Dec 28 21:09:44 one Keepalived_vrrp: Registering Kernel netlink command channel 
  45. Dec 28 21:09:44 one Keepalived_vrrp: Registering gratutious ARP shared channel 
  46. Dec 28 21:09:44 one Keepalived: Starting VRRP child process, pid=1993 
  47. Dec 28 21:10:24 one Keepalived_vrrp: Opening file '/usr/local/keepalived/keepalived.conf'.  
  48. Dec 28 21:10:24 one Keepalived_vrrp: Configuration is using : 63597 Bytes 
  49. Dec 28 21:10:24 one Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  50. Dec 28 21:10:24 one Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  51. Dec 28 21:12:08 one Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  52. Dec 28 21:12:09 one Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE             #成功切换为 master  
  53.  
  54. haproxy 1 检查vip  
  55. [root@one ~]# ip add 
  56. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue  
  57.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
  58.     inet 127.0.0.1/8 scope host lo 
  59.     inet6 ::1/128 scope host  
  60.        valid_lft forever preferred_lft forever 
  61. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 
  62.     link/ether 08:00:27:74:3c:05 brd ff:ff:ff:ff:ff:ff 
  63.     inet 10.0.2.251/24 brd 10.0.2.255 scope global eth0 
  64.     inet6 fe80::a00:27ff:fe74:3c05/64 scope link  
  65.        valid_lft forever preferred_lft forever 
  66. 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 
  67.     link/ether 08:00:27:3e:9a:2b brd ff:ff:ff:ff:ff:ff 
  68.     inet 10.0.1.251/24 brd 10.0.1.255 scope global eth1                                  
  69.     inet 10.0.1.250/24 scope global secondary eth1  #virtual ip
  70.     inet6 fe80::a00:27ff:fe3e:9a2b/64 scope link  
  71.        valid_lft forever preferred_lft forever 
  72. 4: sit0: <NOARP> mtu 1480 qdisc noop  
  73.     link/sit 0.0.0.0 brd 0.0.0.0 
  74.  
  75. 5.3 模拟haproxy 80端口故障 keepalived 切换测试  
  76. haproxy 2 恢复 
  77. [root@four cluster]# ifup eth0 
  78. haproxy 2 日志 
  79. [root@four cluster]# tail /var/log/messages -f 
  80. Dec 28 20:53:08 four Keepalived_vrrp: Configuration is using : 63577 Bytes 
  81. Dec 28 20:53:08 four Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  82. Dec 28 20:53:08 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  83. Dec 28 20:53:12 four Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  84. Dec 28 20:53:13 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
  85. Dec 28 21:12:07 four Keepalived_vrrp: Kernel is reporting: interface eth0 DOWN 
  86. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering FAULT STATE 
  87. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Now in FAULT state 
  88. Dec 28 21:15:34 four kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 
  89. Dec 28 21:15:35 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  90.  
  91.  
  92. haproxy 1 进程 
  93. [root@one ~]# pstree 
  94. init─┬─crond 
  95.      ├─dbus-daemon 
  96.      ├─events/0 
  97.      ├─haproxy 
  98.      ├─keepalived───keepalived 
  99.      ├─keepalived.sh───haproxy_check.s───sleep 
  100.  
  101. 停止 haproxy 进程 
  102. [root@one ~]# killall haproxy                                        #停止haproxy 进程 
  103. [root@one ~]# tail /usr/local/keepalived/fault.log                   #fault log 
  104.  2011-12-28_21:17:50 http://10.0.1.251:80 1      fault 
  105.  2011-12-28_21:17:51 http://10.0.1.251:80 2      fault 
  106.  2011-12-28_21:17:52 http://10.0.1.251:80 3      fault 
  107.  2011-12-28_21:17:53 http://10.0.1.251:80 4      fault 
  108.  2011-12-28_21:17:54 http://10.0.1.251:80 5      fault 
  109.  2011-12-28_21:17:55 http://10.0.1.251:80 6      fault 
  110.  2011-12-28_21:17:56 http://10.0.1.251:80 7      fault 
  111.  2011-12-28_21:17:57 http://10.0.1.251:80 8      fault 
  112.  
  113. haproxy 1 日志 
  114. [root@one ~]# tail /var/log/messages  
  115. Dec 28 21:12:09 one Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
  116. Dec 28 21:17:58 one Keepalived: Terminating on signal                                      
  117. Dec 28 21:17:58 one Keepalived: Stopping Keepalived v1.2.2 (12/25,2011)                   #keepalived 被haproxy_check.sh 监控脚本关闭 
  118. Dec 28 21:17:58 one Keepalived_vrrp: Terminating VRRP child process on signal 
  119. Dec 28 21:17:58 one kernel: ADDRCONF(NETDEV_UP): eth0: link is not ready 
  120. Dec 28 21:17:58 one kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 
  121. Dec 28 21:17:58 one kernel: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 
  122. Dec 28 21:18:00 one kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready 
  123. Dec 28 21:18:00 one kernel: e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 
  124. Dec 28 21:18:00 one kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready 
  125.  
  126.  
  127. haproxy 2 日志 
  128. [root@four cluster]# tail /var/log/messages -f 
  129. Dec 28 20:53:08 four Keepalived_vrrp: Configuration is using : 63577 Bytes 
  130. Dec 28 20:53:08 four Keepalived_vrrp: Using LinkWatch kernel netlink reflector... 
  131. Dec 28 20:53:08 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  132. Dec 28 20:53:12 four Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  133. Dec 28 20:53:13 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE 
  134. Dec 28 21:12:07 four Keepalived_vrrp: Kernel is reporting: interface eth0 DOWN 
  135. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering FAULT STATE 
  136. Dec 28 21:12:07 four Keepalived_vrrp: VRRP_Instance(VI_1) Now in FAULT state 
  137. Dec 28 21:15:34 four kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX 
  138. Dec 28 21:15:35 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE 
  139. Dec 28 21:18:02 four Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 
  140. Dec 28 21:18:03 four Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE          #keepalived 状态为 master            
  141.  
  142. [root@four cluster]# ip add                 
  143. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue  
  144.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
  145.     inet 127.0.0.1/8 scope host lo 
  146.     inet6 ::1/128 scope host  
  147.        valid_lft forever preferred_lft forever 
  148. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 
  149.     link/ether 08:00:27:27:ef:a6 brd ff:ff:ff:ff:ff:ff 
  150.     inet 10.0.2.254/24 brd 10.0.2.255 scope global eth0 
  151.     inet6 fe80::a00:27ff:fe27:efa6/64 scope link  
  152.        valid_lft forever preferred_lft forever 
  153. 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 
  154.     link/ether 08:00:27:cd:f3:db brd ff:ff:ff:ff:ff:ff 
  155.     inet 10.0.1.254/24 brd 10.0.1.255 scope global eth1                                 
  156.     inet 10.0.1.250/24 scope global secondary eth1  #virtual ip
  157.     inet6 fe80::a00:27ff:fecd:f3db/64 scope link  
  158.        valid_lft forever preferred_lft forever 
  159. 4: sit0: <NOARP> mtu 1480 qdisc noop  
  160.     link/sit 0.0.0.0 brd 0.0.0.0 

 

六 haproxy_check.sh 监控脚本

 
 
  1. 脚本默认监控 eth1 网卡,所以你需要根据自己的需要调整,如果你haproxy virtual ip 在eth0 网卡,那么你需要做如下更改: 
  2. 6.1 使用"#"号注释掉 第14行 第16行,取消掉 第15行 第17行 
  3. #eth1_ip=$(/sbin/ifconfig eth1  | sed -n '/inet addr:/ s/inet addr://pg' | awk -F" " '{print $1}') 
  4. eth0_ip=$(/sbin/ifconfig eth0  | sed -n '/inet addr:/ s/inet addr://pg' | awk -F" " '{print $1}') 
  5. #eth1_url="http://${eth1_ip}:80" 
  6. eth0_url="http://${eth0_ip}:80" 
  7.  
  8. 6.2 将第35行 $eth1_url,替换成 $eth0_url 
  9. if curl -IL -A "haproxy_check" "$eth1_url" > /dev/null 2>&1 ;then 
  10. 6.3 将第48行 $eth1_url,替换成 $eth0_url
  11. if ! curl -IL -A "haproxy_check" "$eth1_url" > /dev/null 2>&1 ;then 

 

七 其它

 
 
  1. 5.2 模拟网络故障 haproxy 切换测试 与 5.3 模拟haproxy 80端口故障 keepalived 切换测试  
  2. 五 haproxy 与 keepalived 整体测试,反过来测试也是没有问题的,不过要保证 haproxy.sh keepalived.sh 这两个服务脚本已经启动了,可以使用pstree 查看 
  3. 如:[root@four cluster]# pstree 
  4. init─┬─crond 
  5.      ├─events/0 
  6.      ├─events/1 
  7.      ├─haproxy 
  8.      ├─keepalived───keepalived 
  9.      ├─keepalived.sh───haproxy_check.s───sleep
本文转自 dongnan 51CTO博客,原文链接:
http://blog.51cto.com/dngood/753739
 类似资料: