开源的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。