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

Keepalived теряет VIP при отключении питания мастера

У меня есть два сервера под управлением Keepalived 1.2.7 с именами хостов left и right. Вот конфиги:

# keepalived.conf on left
vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 160
    advert_int 1
    virtual_ipaddress {
        10.10.10.200
    }
}

# keepalived.conf on right
vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        10.10.10.200
    }
}

Теперь я цикл питания left. Вот как выглядят системные журналы с чередованием и аннотациями:

>> started servers <<
Aug 15 19:07:32 left Keepalived[4041]: Starting VRRP child process, pid=4043
Aug 15 19:07:32 right Keepalived[4041]: Starting VRRP child process, pid=4043
Aug 15 19:07:33 left Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Transition to MASTER STATE
Aug 15 19:07:33 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Transition to MASTER STATE
Aug 15 19:07:33 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Received higher prio advert
Aug 15 19:07:33 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Entering BACKUP STATE
Aug 15 19:07:34 left Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Entering MASTER STATE
>> left has 10.10.10.200 <<

>> powered off left <<
Aug 15 19:08:25 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Transition to MASTER STATE
Aug 15 19:08:26 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Entering MASTER STATE
>> right has 10.10.10.200 <<

>> powered on left <<
Aug 15 19:08:58 left Keepalived[1027]: Starting VRRP child process, pid=1029
Aug 15 19:08:59 left Keepalived_vrrp[1029]: VRRP_Instance(VI_1) Transition to MASTER STATE
Aug 15 19:09:00 left Keepalived_vrrp[1029]: VRRP_Instance(VI_1) Entering MASTER STATE
Aug 15 19:09:00 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Received higher prio advert
Aug 15 19:09:00 right Keepalived_vrrp[4043]: VRRP_Instance(VI_1) Entering BACKUP STATE
>> neither has 10.10.10.200 <<

я ожидал left забрать 10.10.10.200 когда вернулось. Почему нет? Как я могу изменить свой keepalived.confs так что это делает?

Вы хотите, чтобы конфигурация "справа" выглядела так:

vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
    10.10.10.200
}

В РЕЗЕРВНОЕ КОПИРОВАНИЕ ключевое слово сообщает keepalived, что нужно вернуться к МАСТЕР по мере доступности.

Следующая конфигурация работает, хотя мне все еще любопытно, почему тот, что в моем вопросе, не.

# keepalived.conf on left
vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 160
    advert_int 1
    preempt_delay 15
    virtual_ipaddress {
        10.10.10.200
    }
}

# keepalived.conf on right
vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 100
    advert_int 1
    preempt_delay 15
    virtual_ipaddress {
        10.10.10.200
    }
}

В этой конфигурации указано, что необходимо повторно выбрать новый мастер через 15 секунд после того, как машина с более высоким приоритетом подключится к сети. Есть объяснение preempt_delay вариант в списке рассылки.

Одна проблема с этой конфигурацией: если обе машины выйдут из строя, ни одна из них не потребует 10.10.10.200, когда они вернутся. (Это произошло из-за автоконфигурации сети, которую делает Vagrant.)