Выделенная сеть Keepalived для пульса и vrrp_sync_group
У меня есть требование, чтобы Keepalived запускал VRRP на двух балансировщиках нагрузки (NGINX) с двумя интерфейсами - eth0 (внешний) и eth1 (внутренний). Я пытаюсь настроить настройку, в которой весь трафик VRRP (предпочтительно одноадресный) запускается через выделенный внутренний интерфейс eth1, чтобы снизить риск ситуации с разделением мозга. Однако плавающий IP-адрес (VRRP IP) будет находиться во внешней сети eth0.
Я смотрел [https://github.com/acassen/keepalived/issues/637] и пытался сделать что-то подобное. Моя конфигурация ниже:
global_defs {
notification_email_from myadmin@myserver
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_nginx {
script "/usr/libexec/keepalived/check_nginx.sh"
interval 3
}
vrrp_sync_group link_instances {
group {
real
stop_duplicate
}
}
vrrp_instance real {
state BACKUP
interface eth0
virtual_router_id 1
priority 250 # This will be a lower value on the other router
version 3 # not necessary, but you may as well use the current protocol
advert_int 1
nopreempt
track_interface {
eth1
}
track_script {
check_nginx
}
unicast_src_ip 115.197.1.166
unicast_peer {
115.197.1.167
}
virtual_ipaddress {
115.197.1.170/32 dev eth0
}
}
vrrp_instance stop_duplicate {
state BACKUP
interface eth1
virtual_router_id 1
priority 255
version 3
advert_int 1
nopreempt
unicast_src_ip 192.168.0.3
unicast_peer {
192.168.0.4
}
virtual_ipaddress {
192.168.0.5/29
}
}
Проблемы, которые у меня есть с этой настройкой до сих пор:
На мастере принудительно сбил eth1 (внутренний интерфейс). Впоследствии это вызвало аварийное переключение поддержки активности, и состояние перешло в состояние отказа. Не совсем то поведение, которого я ожидал, потому что я думал, что идея состоит в том, чтобы он "использовал" внешний eth0 в этом случае для связи (который все еще работает и работает с внешним VRRP), так что это обеспечит отказоустойчивость. Возможно ли, что, когда eth1 обнаружен как неработающий, аварийное переключение НЕ запускается, а вместо этого ждать выхода eth1 из строя, чтобы он переключился?
Я получил предупреждение, что мой track_script
check_nginx
не используется. Использованиеtrack_scripts
все еще не разрешено вvrrp_sync_group
? Потому что мне все еще нужно, чтобы это работало в случае отказа NGINX.Могу ли я использовать вытеснение внутри
vrrc_sync_group
? Потому что я хотел бы предотвратить отказ, когда он переместится.Есть ли лучший способ сделать это? Я хочу добиться: а. Убедитесь, что трафик VRRP используется на внутреннем (выделенном) интерфейсе.
eth1
и плавающий IP-адрес VRRP для размещения наeth0
. Это значит, что нам не нужно зависеть от внешней сети для проверки пульса. б. В случае сбоя eth0 НЕ переключайтесь на узел BACKUP, если eth1 все еще жив. Только отработка отказа, если он тоже не работает (как и должно).
c. Еслиcheck_nginx
однако сбой, это вызовет аварийное переключение. d. После сбоя он не вернется - если только с ним не случатся те же сценарии сбоя (например, отключение NGINX)
Хотите знать, возможно ли то, чего я пытаюсь достичь?
Спасибо J