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

keepalived BACKUP переходит к MASTER без видимой причины

В целях тестирования я привел 2 виртуальные машины Debian jessie (с использованием vagrant и virtualbox), и обе они запускали мини-веб-сервер и настраивались с помощью keepalived.

Проблема в том, что сервер BACKUP переходит через несколько секунд после service keepalived restart в МАСТЕР без видимой причины.

Я также вижу многоадресные пакеты VRRP, поступающие на оба сервера, и они выглядят так, как ожидалось. (что, кажется, означает, что решение, предложенное в Нежелательный переход Keepalived к мастеру не имеет отношения)

Файлы конфигурации выглядят следующим образом:

МАСТЕР-сервер:

global_defs {
        lvs_id tom_lvs
}

vrrp_instance tom_lvs {
        state MASTER
        interface eth1
    virtual_router_id 1
    lvs_sync_daemon_interface eth1
    priority 100
    preempt
        authentication {
                auth_type PASS
                auth_pass 1234
        }

    advert_int 1
    virtual_ipaddress {
        172.28.128.10/24
    }

        virtual_server 172.28.128.10 3000 {
                delay_loop 10
                lb_algo wlc
                lb_kind DR
                protocol TCP
                persistence_timeout 1800
                sorry_server 172.28.128.3 3000
                real_server 172.28.128.4 3000 {
                        weight 5
                        HTTP_GET {
                                url {
                                        path /index.html
                                }
                        }
                }
        }
}

РЕЗЕРВНЫЙ сервер:

global_defs {
        lvs_id tom_lvs
}

vrrp_instance tom_lvs {
        state BACKUP
        interface eth1
    virtual_router_id 2
        lvs_sync_daemon_interface eth1
    priority 96
    preempt
        authentication {
                auth_type PASS
                auth_pass 1234
        }

    advert_int 1
    virtual_ipaddress {
        172.28.128.10/24
    }

        virtual_server 172.28.128.10 3000 {
                delay_loop 10
                lb_algo wlc
                lb_kind DR
                protocol TCP
                persistence_timeout 1800
                sorry_server 172.28.128.3 3000
                real_server 172.28.128.3 3000 {
                        weight 5
                        HTTP_GET {
                                url {
                                        path /index.html
                                }
                        }
                }
        }
}

регистрирует на резервном сервере, что показывает переход от BACKUP к MASTER:

Feb 14 13:22:44 jessie Keepalived_vrrp[1145]: VRRP_Instance(tom_lvs) sending 0 priority
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering Kernel netlink reflector
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering Kernel netlink command channel
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Registering gratuitous ARP shared channel
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Opening file '/etc/keepalived/keepalived.conf'.
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Registering Kernel netlink reflector
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Configuration is using : 62104 Bytes
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: Using LinkWatch kernel netlink reflector...
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Registering Kernel netlink command channel
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Opening file '/etc/keepalived/keepalived.conf'.
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Configuration is using : 12103 Bytes
Feb 14 13:22:44 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Entering BACKUP STATE
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Using LinkWatch kernel netlink reflector...
Feb 14 13:22:44 jessie Keepalived_healthcheckers[1175]: Activating healthchecker for service [172.28.128.3]:3000
Feb 14 13:22:48 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Transition to MASTER STATE
Feb 14 13:22:49 jessie Keepalived_vrrp[1176]: VRRP_Instance(tom_lvs) Entering MASTER STATE

и это то, что я вижу на обеих машинах в tshark

Capturing on 'eth1'
  1   0.000000 172.28.128.4 -> 224.0.0.18   VRRP 60 Announcement (v2)
  2   0.001404 172.28.128.3 -> 224.0.0.18   VRRP 54 Announcement (v2)
  3   1.002283 172.28.128.4 -> 224.0.0.18   VRRP 60 Announcement (v2)
  4   1.004130 172.28.128.3 -> 224.0.0.18   VRRP 54 Announcement (v2)
  5   2.004466 172.28.128.4 -> 224.0.0.18   VRRP 60 Announcement (v2)
  6   2.006260 172.28.128.3 -> 224.0.0.18   VRRP 54 Announcement (v2)

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

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

В приведенной выше конфигурации они имеют разные значения и поэтому работают независимо.