keepalived backup-backup 模式 实现恢复 不抢占
当节点都为backup时,通过优先级 priority 来确定 master
实现效果:
启动后,priority 高的为 master
master 故障 vip 飘到 backup
master 恢复 vip 仍在 bakcup
bug: bakcup 故障 由于 master 没有抢占,故都死球了(解决方法,故障时脚本将 keepalive 杀死)
master 参考配置
! Configuration File for keepalived global_defs { #一个没重复的名字即可 router_id dz_56 } vrrp_script check_nginx { # 脚本路径(相对,绝对) script /etc/keepalived/check_nginx.sh # 执行间隔 (default: 1 second) interval 1 # 脚本执行的超时时间 timeout 1 # 调整权重 (default: 0) # 对于 reverse 的描述,查看 track_script. # 'weight 0 reverse' 导致vrrp实例关闭,反之亦然 weight -50 # 失败后,检测到几次成功后,重置为 OK rise 2 # 检测到几次失败后,重置为 KO fall 2 # 执行的 user/group user root # 假设脚本最初处于失败状态 init_fail } vrrp_instance DZ_1 { # MASTER/BACKUP state BACKUP #选举master时,优先级(1-255)高的获胜,要成为MASTER,建议让这个比其他机器多50。 #所有系统都应该有不同的优先级,以使行为具有确定性。 priority 200 #VRRP 间隔 advert_int 1 #高优先级的VRRP实例上线时,通常会抢占低优先级的实例 #nopreempt阻止启动时抢占 nopreempt # vrrp使用,如果使用单播且不是IPV6可,此配置可省略 interface eth0 #虚拟路由ID(1 to 255)区分同一个接口上面的多个 VRRP 实例 #同一个vrrp_instance相同 virtual_router_id 10 # 采用 vrrp 单播通告的方式; 本机ip unicast_src_ip 192.168.16.56 # 不用组播发送 VRRP 通告。 相反,它使用单播将广告发送到以下 IP 地址列表 # <IPADDR> [min_ttl {0..255}] [max_ttl {0..255}] unicast_peer { 192.168.16.57 } # 除了单播模式下,不建议用 authentication { auth_type PASS auth_pass 1234 } # 设置master的虚拟ip地址 virtual_ipaddress { 192.168.16.71 192.168.16.72 } # 与上方nginx运行状况检测呼应 track_script { check_nginx } }
backup参考配置
! Configuration File for keepalived global_defs { #一个没重复的名字即可 router_id dz_57 } vrrp_script check_nginx { # 脚本路径(相对,绝对) script /etc/keepalived/check_nginx.sh # 执行间隔 (default: 1 second) interval 1 # 脚本执行的超时时间 timeout 1 # 调整权重 (default: 0) # 对于 reverse 的描述,查看 track_script. # 'weight 0 reverse' 导致vrrp实例关闭,反之亦然 weight -50 # 失败后,检测到几次成功后,重置为 OK rise 2 # 检测到几次失败后,重置为 KO fall 2 # 执行的 user/group user root # 假设脚本最初处于失败状态 init_fail } vrrp_instance DZ_1 { # MASTER/BACKUP state BACKUP #选举master时,优先级(1-255)高的获胜,要成为MASTER,建议让这个比其他机器多50。 #所有系统都应该有不同的优先级,以使行为具有确定性。 priority 180 #VRRP 间隔 advert_int 1 #高优先级的VRRP实例上线时,通常会抢占低优先级的实例 #nopreempt阻止启动时抢占 #nopreempt # vrrp使用,如果使用单播且不是IPV6可,此配置可省略 interface eth0 #虚拟路由ID(1 to 255)区分同一个接口上面的多个 VRRP 实例 #同一个vrrp_instance相同 virtual_router_id 10 # 采用 vrrp 单播通告的方式; 本机ip unicast_src_ip 192.168.16.57 # 不用组播发送 VRRP 通告。 相反,它使用单播将广告发送到以下 IP 地址列表 # <IPADDR> [min_ttl {0..255}] [max_ttl {0..255}] unicast_peer { 192.168.16.56 } # 除了单播模式下,不建议用 authentication { auth_type PASS auth_pass 1234 } # 设置master的虚拟ip地址 virtual_ipaddress { 192.168.16.71 192.168.16.72 } # 与上方nginx运行状况检测呼应 track_script { check_nginx } }
脚本改进,排除bug
#!/bin/sh A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ] then /usr/sbin/nginx sleep 1 A2=`ps -C nginx --no-header |wc -l` if [ $A2 -eq 0 ] then systemctl stop keepalived fi fi
含义是:
如果 nginx 停止运行,尝试启动,但是如果无法启动,则杀死本机的 keepalived 进程,
keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。
0顶
0 踩
共 0 条评论