Назад | Перейти на главную страницу

Keepalived: неверный главный переход

У нас есть установка поддержки активности на двух машинах, где обе машины настроены одинаково.

vrrp_instance RP_VI_1 {
  interface                 eth3
  state                     BACKUP
  virtual_router_id         61
  priority                  150
  advert_int                1
  garp_master_delay         5

  virtual_ipaddress {
    x.x.x.x dev eth2
  }
}

Обе машины работали с этой конфигурацией около полугода без проблем, но сегодня вечером произошел, казалось бы, ошибочный переход между состояниями.

host1: in BACKUP state
host2: in MASTER state

03:44:44: host1: Transition to MASTER state
03:44:45: host1: Entering MASTER STATE
03:44:46: host1: Received higher prio advert 150
03:44:46: host1: Entering BACKUP state

В то время host2 не переходил между состояниями и не регистрировал никакой информации. Таким образом, host1 отправил в сеть бесплатный ARP, и его MAC-адрес был кэширован в течение нескольких часов, в то время как он сбросил весь трафик.

Наша самая большая проблема здесь в том, что host1 вернулся в состояние BACKUP, заявив, что было получено «объявление с более высоким приоритетом», в то время как оба хоста имеют одно и то же значение prio, равное 150. Как может быть, что этот переход был запущен без того, чтобы системы взаимодействовали впоследствии, чтобы решить, кто должен остаться master и, таким образом, разослать новый бесплатный ARP, чтобы гарантировать передачу пакетов на правильный хост?

После прочтения определений VRRPv2 (RFC3768) становится очевидным следующее:

1) В качестве прерывателя связи между двумя мастерами используется первичный IP-адрес с одинаковым приоритетом. Выигрывает хост с более высоким IP-адресом, хост с меньшим IP-адресом перейдет на MASTER.

2) Вариант garp_master_refresh for keepalived можно использовать для повторной отправки бесплатного ARP через x секунд. Поскольку это значение по умолчанию равно 0, теперь запросы отправляются повторно по умолчанию, указание этого должно привести к восстановлению системы через некоторое время.