Linux Labs

Практики SRE: SLO, инциденты, отказоустойчивость / Ступень 7 из 8

Балансировщик и проверка здоровья

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 7 из 10 · теория · 4 мин

VRRP и keepalived

Здесь — кто переносит адрес и за сколько.

Адрес 192.0.2.100 не закреплён за машиной: его держит та, что сейчас главная. Такой адрес называют плавающим, или VIP (virtual IP). Клиенты знают только его, поэтому смена машины для них проходит без правок.

Кому держать адрес, машины договариваются по протоколу VRRP — его ведёт служба keepalived. Главная машина (MASTER) раз в advert_int секунд рассылает объявление: адрес у меня, мой приоритет 150. Запасная (BACKUP) слушает. Объявления пропали — после трёх пропусков, через ~3 секунды, запасная становится главной и поднимает адрес у себя. При systemctl stop keepalived напоследок шлёт объявление с приоритетом 0, и запасная забирает адрес сразу — это ты и видел.

vrrp_instance site {
    state MASTER            # на node2 — BACKUP
    interface lab-n1
    virtual_router_id 51    # номер группы: одинаковый на обеих машинах
    priority 150            # на node2 — 100: главная та, у кого больше
    advert_int 1
    virtual_ipaddress {
        192.0.2.100/24
    }
}

Вернулась машина с большим приоритетом — она забирает адрес обратно: на этом стенде через ~3,5 с после systemctl start keepalived.

Проверь себя 1 вопрос

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 решает, какая главная.
Ubuntu 24.04
Загрузка…