我正在使用 Cloudformation 在 Amazon 中启动 2 个 EC2 实例,第二个实例在第一个实例之后大约 30 秒启动。
配置如下所示:
实例 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
}
两者都配置了成功的相同健康检查。
我设置了相同的优先级,这样就不会出现抖动问题(如果 MASTER 关闭,则将 BACKUP 转换为新的 MASTER,但如果 OLD MASTER 重新启动,则保持原样)。
问题发生在初始启动期间:
- 第一个实例启动并进入主状态
- 第二个实例大约在 30 秒后开始,最初进入 BACKUP STATE,但由于某种原因之后转换为 MASTER。
两者应该具有相同的优先级,那为什么呢?
我注意到有关内核 IPVS 和主机指纹计算的日志消息仅在 keepalived 启动后才会打印。这让我认为keepalived是系统上第一个使系统在网络接口上交换数据包并以某种方式触发不必要的故障转移的软件。
此外,实例 2 在 keepalived 启动后立即进入 BACKUP STATE :
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
-- 测试配置:
- 我停止了两个keepalived
- 我在实例 1 上开始 keepalived,它转到 MASTER。
- 我在实例 2 上启动 keepalived,它进入 BACKUP 并且不触发故障转移。
所以一切看起来都很好。
按照设计,在同等优先级的情况下,VRRP 会选择主地址最高的节点作为 MASTER。
https://www.juniper.net/techpubs/en_US/junose11.3/topics/concept/vrrp-router-election-rules.html http://www.ietf.org/rfc/rfc3768.txt