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

Почему keepalived track_script не перезапускает keepalived при отключении HAProxy?

ОБНОВЛЕНИЕ: кажется, нужен собственный сценарий отслеживания для фактического переключения и перезапуска, когда HAProxy умирает. Отправлено как ответ.

Я установил keepalived (плюс VIP) + haproxy + galera_node (на том же хосте, конфигурация ниже) с использованием того же скрипта отслеживания, который можно найти в десятках примеров в Интернете. Я не получаю, когда убиваю haproxy процесс, запущенный на данном узле, это то, что отображается в /var/log/syslog:

Keepalived_vrrp[29230]: VRRP_Instance(250) Entering MASTER STATE
Keepalived_vrrp[29230]: VRRP_Script(check_haproxy) failed

Имеет смысл. Это действительно не удалось. Но странная вещь keepalived не отказывается от VIP и не входит в состояние BACKUP, что является желаемым поведением (ниже VIP все еще существует через несколько минут после выхода haproxy). Я не понимаю, как keepalived предназначен для работы, или в моей конфигурации есть другая явная ошибка? (Версия KA - 1.2.7 в Ubuntu 14.04)

# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 0e:02:c6:83:82:74 brd ff:ff:ff:ff:ff:ff 
    inet 10.10.10.202/24 brd 10.20.18.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.10.10.250/32 scope global eth0
       valid_lft forever preferred_lft forever 

keepalived.conf

global_defs
{
  router_id    mynode
}

vrrp_script check_haproxy
{
   script      "killall -0 haproxy"
   interval    1
   fall        2
   weight      2
}

vrrp_instance 200
{
   virtual_router_id 200
   advert_int   1
   nopreempt
   priority     90
   state        BACKUP
   interface    eth0
   notify       /etc/keepalived/log_status.sh

   virtual_ipaddress
   {
     10.10.10.250 dev   eth0
   }

   track_script
   {
     check_haproxy
   }
}

Теперь я использую собственный track_script, который это исправляет. Он перезапускает keepalived, если haproxy не запущен. Похоже, что keepalived входит в режим РЕЗЕРВНОГО КОПИРОВАНИЯ только при запуске / перезапуске сценария отслеживания по умолчанию, а не во время его работы ¯ \ _ (ツ) _ / ¯

#!/bin/sh
# restart keepalive if haproxy died
pid=`/bin/pidof haproxy`
test -z "$pid" && { service keepalived restart &>/dev/null; exit 1; }
exit 0