开源的Keepalived在很多项目中得到实用,博主配置过keepalived+haproxy+mysql双机,keepalived+postgresql双机,本文记录一些常用的Keepalived参数配置误区以及疑问.
keepalived的 vrrp_script 检测脚本.
1) 检测脚本在 master和backup节点上均会执行,因此编写脚本时,需要考虑检测逻辑,并根据集群规划来编写脚本输出,例如:
A 正常情况下主备机上应用都启动的情况(例如数据库主备复制的集群情况),可以检测 程序进程是否存在,数据库是否可读 来决定检测脚本的输出。
B 正常情况下只有主机应用启动的情况(例如使用了共享存储情况下的数据库或者其他程序),检测脚本只需要在VIP所在的主机上检测 数据库程序是否存在,数据库是否可读写来决定检测脚本的输出,而备机(VIP不在的机器)直接输出正常值.
2) 检测脚本 vrrp_script的参数配置说明:
重点: 当weight为正数,会在 每 interval 秒执行一次脚本,连续 rise次数 输出为0 时,将本节点priority 值增加 weight。
当weight为负数,会在 每 interval 秒执行一次脚本,连续 fall 次数输出为 非0时,将本节点的Priority值 增加 weight(负值),相当于降低本weight绝对值的优先级。
并且以上 调整priority的动作只会执行一次。所以必须确保一次weight的调整,能将集群节点的 priority之间的差值正确的拉开,从而进行切换。
博主前面测试时出现的配置问题,主备机的priority差距为5,weight配置为-1,实测是当主机脚本检测异常时,主机priority只会调整一次,然后一直不能自动切换.
vrrp_script <SCRIPT_NAME> {
# path of the script to execute
script <STRING>|<QUOTED-STRING>
# seconds between script invocations, (default: 1 second)
interval <INTEGER>
# seconds after which script is considered to have failed
timeout <INTEGER>
# adjust priority by this weight, (default: 0)
# For description of reverse, see track_script.
# 'weight 0 reverse' will cause the vrrp instance to be down when the
# script is up, and vice versa.
weight <INTEGER:-253..253> [reverse]
# required number of successes for OK transition
rise <INTEGER>
# required number of successes for KO transition
fall <INTEGER>
# user/group names to run script under.
# group default to group of user
user USERNAME [GROUPNAME]
# assume script initially is in failed state
init_fail
}
keepalived的vrpp广播/单播/组播消息
1)只有master 节点会周期性(advert_int 秒)的广播vrrp消息(其他节点不会发广播消息),通知其他节点自己正常工作,相当于宣告自己是master,其他节点收到广播消息后,会保持当前状态。
2)当其他节点超过3个周期没有收到 任何vrrp广播消息时,会广播vrrp通告,重新选举master,次优先级的会优先成为master。