Keepalived不必要的过渡到主

我开始在亚马逊的Cloud EC2两个实例,第二个实例从第一个实例开始约30秒。

configuration如下所示:

实例2

state BACKUP interface eth0 virtual_router_id 51 priority 100 unicast_peer { 172.17.16.10 } 

实例1

  state MASTER interface eth0 virtual_router_id 51 priority 100 unicast_peer { 172.17.16.11 } 

两者都configuration了相同的健康检查成功。

我设置相同的优先级,以便我没有震动问题(如果MASTERclosures,将BACKUP转换为新的MASTER,但是如果OLD MASTER恢复,保持原样)。

这个问题是在最初的开始阶段发生的:

  • 一审启动进入MASTER STATE
  • 第二个实例在大约30秒之后开始,最初进入BACKUP STATE,但由于某种原因,之后转换到MASTER。

两者应该有相同的优先权,那为什么?

我注意到,关于内核IPVS和主机指纹计算的日志消息只有在keepalived启动后才会打印。 这使得我认为keepalived是系统中第一个使系统在networking接口上交换数据包的软件,并以某种方式触发不需要的故障转移。

另外,一旦keepalived启动,Instance 2立即进入备份状态:

 Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: Using LinkWatch kernel netlink reflector... Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Entering BACKUP STATE Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: VRRP sockpool: [ifindex(2), proto(112), unicast(1), fd(15,16)] 

而实例1仅在内核IPVS消息和指纹之后变为MASTER:

 Nov 17 17:44:28 ip-172-17-16-10 kernel: [ 157.650360] IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP) Nov 17 17:44:28 ip-172-17-16-10 kernel: [ 157.654035] IPVS: Connection hash table configured (size=4096, memory=64Kbytes) Nov 17 17:44:28 ip-172-17-16-10 kernel: [ 157.658356] IPVS: Creating netns size=2048 id=0 Nov 17 17:44:28 ip-172-17-16-10 kernel: [ 157.661163] IPVS: ipvs loaded. Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Opening file '/etc/keepalived/keepalived.conf'. Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Configuration is using : 5174 Bytes Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Using LinkWatch kernel netlink reflector... Nov 17 17:44:28 ip-172-17-16-10 Keepalived_vrrp[2392]: VRRP_Script(chk_haproxy) succeeded Nov 17 17:44:29 ip-172-17-16-10 ec2: Nov 17 17:44:29 ip-172-17-16-10 ec2: ############################################################# Nov 17 17:44:29 ip-172-17-16-10 ec2: -----BEGIN SSH HOST KEY FINGERPRINTS----- Nov 17 17:44:29 ip-172-17-16-10 ec2: -----END SSH HOST KEY FINGERPRINTS----- Nov 17 17:44:29 ip-172-17-16-10 ec2: ############################################################# Nov 17 17:44:29 ip-172-17-16-10 Keepalived_vrrp[2392]: VRRP_Instance(VI_1) Transition to MASTER STATE 

– testingconfiguration:

  • 我停止两个keepalived
  • 我开始keepalived实例1,它去MASTER。
  • 我开始keepalived实例2,它进入备份,不会触发故障转移。

所以一切看起来不错。

按照devise,在同等优先级的情况下,VRRP将select主地址最高的节点作为MASTER。

https://www.juniper.net/techpubs/en_US/junose11.3/topics/concept/vrrp-router-election-rules.html http://www.ietf.org/rfc/rfc3768.txt

 If the Priority in the ADVERTISEMENT is equal to the local Priority and the primary IP Address of the sender is greater than the local primary IP Address, then: o Cancel Adver_Timer o Set Master_Down_Timer to Master_Down_Interval o Transition to the {Backup} state