引自免费微信小程序:皆我百晓生
为了实现A、B两台机器之间的业务服务双机单活,你需要对VRRP(虚拟路由冗余协议)进行一些定制配置,并且结合你的监控脚本和通知脚本。这里是一个详细的步骤来配置VRRP并使其适应你的需求。
首先,我们需要创建两个VRRP实例:VI_1和VI_2。VI_1用于主服务,VI_2用于备份服务。我们将根据主服务的状态动态调整权重。
以下是VRRP配置示例,使用CentOS/RHEL系统的Keepalived作为参考:
vim /etc/keepalived/keepalived.conf
添加以下配置到文件中:
global_defs {
notification_email "admin@example.com"
notification_email_from "noreply@example.com"
smtp_server "smtp.example.com"
smtp_connect_timeout 30
}
vrrp_script chk_service {
script "/home/test02.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eno16780032
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
chk_service
}
}
vrrp_instance VI_2 {
state BACKUP
interface eno16780032
virtual_router_id 52
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
track_script {
chk_service
}
}
这里我们有两个VRRP实例,VI_1和VI_2。VI_1设置为MASTER,VI_2设置为BACKUP。每个实例都有一个对应的track_script
,它会定期执行/home/test02.sh
脚本来检查服务状态。
然后,你需要修改你的监控脚本/home/test02.sh
,使其返回不同的退出状态码来反映服务是否健康。例如,如果服务健康,脚本返回0;如果不健康,返回非零值。这将影响VRRP实例的优先级。
#!/bin/bash
# 检查服务状态的逻辑...
if service_is_up; then
exit 0
else
exit 1
fi
现在,当A机上的服务运行时,chk_service
脚本返回0,因此VI_1的优先级为100,而VI_2的优先级为79。如果A机的服务发生故障,脚本将返回1,导致VI_1的优先级降低至80,此时如果VI_2的优先级仍为79,那么VRRP将会自动切换到B机。
同样地,当B机的服务运行时,chk_service
脚本也会返回0,使得VI_2的优先级升至99,VI_1降为79,从而保持双机单活模式。
注意:这个配置依赖于 Keepalived 的 track_script
功能,当脚本返回非零值时,会减去指定的权重值。在这种情况下,如果A机的权重变为80,而B机的权重仍然是79,理论上VRRP应该会选择B机作为新的master。然而,实际效果可能因 Keepalived 版本和具体实现的不同而略有差异。如果仍然存在问题,可能需要进一步调试或升级 Keepalived 版本。
最后,确保重启 Keepalived 服务以应用新配置:
systemctl restart keepalived
如果你有任何疑问或遇到问题,请随时提问。