В целях тестирования я привел 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 узнает, что сообщения о состоянии предназначены для одного и того же виртуального маршрутизатора.
В приведенной выше конфигурации они имеют разные значения и поэтому работают независимо.