Я запускаю 2 инстанса EC2 в Amazon с Cloudformation, второй инстанс запускается примерно через 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
}
Оба настроены с одинаковой успешной проверкой работоспособности.
Я установил тот же приоритет, чтобы у меня не возникало проблем с колебаниями (если МАСТЕР выходит из строя, переходите РЕЗЕРВНОЕ КОПИРОВАНИЕ как новый МАСТЕР, но если СТАРЫЙ МАСТЕР возвращается, оставайтесь как есть).
Проблема возникает при первоначальном запуске:
Оба должны иметь одинаковый приоритет, так почему?
Я заметил, что сообщения журнала о IPVS ядра и вычислении отпечатка хоста печатаются только после запуска keepalived. Это заставляет меня думать, что keepalived - первое программное обеспечение в системе, которое заставляет систему обмениваться пакетами через сетевой интерфейс и каким-то образом запускать нежелательное переключение при отказе.
Кроме того, Экземпляр 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 и отпечатков пальцев:
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
- Чтобы проверить конфигурацию:
Так что все выглядит нормально.
По замыслу, в случае равного приоритета VRRP выберет узел с наивысшим первичным адресом в качестве МАСТЕРА.
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