其中的核心部分在这里
vrrp_script checkhaproxy {
script "/usr/local/keepalived/script/chk_haproxy.bash"
weight -20
interval 3
}
...
...
track_script {
checkhaproxy
}
track_script 中调用 checkhaproxy
checkhaproxy 的意思是:
每3秒种执行一次 /usr/local/keepalived/script/chk_haproxy.bash 脚本 如果反馈结果是 0,就保持原优先级 priority ,如果是 1 ,就将优先级降低 20,也就是检查到 haproxy 状态异常后,就降级,以便让另一台服务器的keepalived进程可以抢到IP
为了避免网络的不稳定还可以加入 fall N (代表连续N次检查失败才算异常) 和 rise N (代表连续N次检查成功就算正常)
优先级改变的算法是这样的:
Note: keepalived 相互之间的通讯要使用到组播,如果没打开,会出现几个实例同时抢占着IP的情况,打开方式是在iptables中加入
-A INPUT -d 224.0.0.18 -j ACCEPT
,然后重载iptables配置
先确保两边的haproxy都是正常运行的
[root@h101 script]# /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf
[root@h101 script]#
两边的keepalived启动后,以初始设定优先级高的keepalived为Master
当优先级高的keeaplived检测到haproxy异常后,会自动降级20,然后重新选举Master,这时另一台服务器的优先级就相对较高,更有优势,于是抢到IP,成为新的Master
在原master上执行以下命令,可以看到IP的漂移过程
[root@h102 mycat-web]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b6:a8:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.143/24 brd 192.168.1.255 scope global eth3
inet6 fe80::20c:29ff:feb6:a8f8/64 scope link
valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b6:a8:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.102/24 brd 192.168.100.255 scope global eth2
inet 192.168.100.222/24 scope global secondary eth2
inet6 fe80::20c:29ff:feb6:a802/64 scope link
valid_lft forever preferred_lft forever
[root@h102 mycat-web]# ps faux | grep haproxy
root 12707 0.0 0.0 103256 828 pts/1 S+ 23:48 0:00 | \_ grep haproxy
haproxy 12118 0.0 0.0 14260 936 ? Ss 23:42 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
[root@h102 mycat-web]# kill 12118; watch -n .5 ip a
[root@h102 mycat-web]#
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。