keepalived备份过渡到MASTER没有明显的原因

出于testing的目的,我提出了两个Debian jessie虚拟机(使用vagrant和virtualbox),并让它们都运行迷你Web服务器并configurationkeepalived

问题是BACKUP服务器在service keepalived restart之后几秒钟转换为MASTER,原因不明。

我也看到VRRP多播包到达两台服务器,他们看起来如预期。 (这似乎意味着解决schemebuild议Keepalived不需要过渡到主站是不相关的)

configuration文件如下:

MASTER服务器:

 global_defs { lvs_id tom_lvs } vrrp_instance tom_lvs { state MASTER interface eth1 virtual_router_id 1 lvs_sync_daemon_interface eth1 priority 100 preempt authentication { auth_type PASS auth_pass 1234 } advert_int 1 virtual_ipaddress { 172.28.128.10/24 } virtual_server 172.28.128.10 3000 { delay_loop 10 lb_algo wlc lb_kind DR protocol TCP persistence_timeout 1800 sorry_server 172.28.128.3 3000 real_server 172.28.128.4 3000 { weight 5 HTTP_GET { url { path /index.html } } } } } 

BACKUP服务器:

 global_defs { lvs_id tom_lvs } vrrp_instance tom_lvs { state BACKUP interface eth1 virtual_router_id 2 lvs_sync_daemon_interface eth1 priority 96 preempt authentication { auth_type PASS auth_pass 1234 } advert_int 1 virtual_ipaddress { 172.28.128.10/24 } virtual_server 172.28.128.10 3000 { delay_loop 10 lb_algo wlc lb_kind DR protocol TCP persistence_timeout 1800 sorry_server 172.28.128.3 3000 real_server 172.28.128.3 3000 { weight 5 HTTP_GET { url { path /index.html } } } } } 

login备份服务器,显示从BACKUP到MASTER的转换:

 Feb 14 13:22:44 jessie Keepalived_vrrp[1145]: VRRP_Instance(tom_lvs) sending 0 priority Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering Kernel netlink reflector Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering Kernel netlink command channel Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering gratuitous ARP shared channel Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Opening file '/etc/keepalived/keepalived.conf'. Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Registering Kernel netlink reflector Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Configuration is using : 62104 Bytes Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Using LinkWatch kernel netlink reflector... Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Registering Kernel netlink command channel Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Opening file '/etc/keepalived/keepalived.conf'. Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Configuration is using : 12103 Bytes Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Entering BACKUP STATE Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Using LinkWatch kernel netlink reflector... Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Activating healthchecker for service [172.28.128.3]:3000 Feb 14 13:22:48 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Transition to MASTER STATE Feb 14 13:22:49 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Entering MASTER STATE 

这是我在两台机器上看到的

 Capturing on 'eth1' 1 0.000000 172.28.128.4 -> 224.0.0.18 VRRP 60 Announcement (v2) 2 0.001404 172.28.128.3 -> 224.0.0.18 VRRP 54 Announcement (v2) 3 1.002283 172.28.128.4 -> 224.0.0.18 VRRP 60 Announcement (v2) 4 1.004130 172.28.128.3 -> 224.0.0.18 VRRP 54 Announcement (v2) 5 2.004466 172.28.128.4 -> 224.0.0.18 VRRP 60 Announcement (v2) 6 2.006260 172.28.128.3 -> 224.0.0.18 VRRP 54 Announcement (v2) 

在研究类似的行为的时候,我遇到了这个问题,所以我想我会为所有同样感到困惑的人提供答案。

这两个configuration文件都需要为virtual_router_id使用相同的值,这是keepalived如何知道状态消息是针对同一个虚拟路由器的。

在上面的configuration中,它们具有不同的值,因此独立运行。