Здесь — кто переносит адрес и за сколько.
Адрес 192.0.2.100 не закреплён за машиной: его держит та, что сейчас главная. Такой адрес называют плавающим, или VIP (virtual IP). Клиенты знают только его, поэтому смена машины для них проходит без правок.
Кому держать адрес, машины договариваются по протоколу VRRP — его ведёт служба keepalived. Главная машина (MASTER) раз в advert_int секунд рассылает объявление: адрес у меня, мой приоритет 150. Запасная (BACKUP) слушает. Объявления пропали — после трёх пропусков, через ~3 секунды, запасная становится главной и поднимает адрес у себя. При systemctl stop keepalived напоследок шлёт объявление с приоритетом 0, и запасная забирает адрес сразу — это ты и видел.
Вернулась машина с большим приоритетом — она забирает адрес обратно: на этом стенде через ~3,5 с после systemctl start keepalived.
keepalived на node1 убит kill -9: служба failed, адрес 192.0.2.100 остался на lab-n1. Где будет этот адрес через 5 секунд?
-
Без объявлений главной запасная становится главной и поднимает адрес — она его не снимает.
-
kill -9не даёт процессу ничего сделать напоследок: адрес наlab-n1остаётся, а node2 поднимает его ещё раз. -
node2 не слышит объявлений и через ~3 с поднимает адрес у себя. Адрес на node1 тоже остаётся: снять его некому.
node2 перестала получать объявления и через ~3 с стала главной, а с node1 адрес снять некому — он на обеих машинах. Такое раздвоение (split brain) видно по ip -br addr на обеих машинах.
Главное в шаге
- Плавающий адрес держит главная машина; клиенты ходят на него, адреса самих машин им знать не нужно.
-
keepalived выбирает главную по VRRP: объявления раз в
advert_int, тишина ~3 с — адрес поднимает запасная. -
virtual_router_idодинаковый у машин одной группы,priorityрешает, какая главная.