Я пытаюсь настроить keepalived + HAProxy в качестве избыточного балансировщика нагрузки на EC2 VPC (да, я знаю, что ELB - это вариант). Я считаю, что у нас все настроено правильно, но убийство главного сервера не похоже на аварийное переключение.
Конфигурация сервера A:
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 100
nopreempt
virtual_router_id 33
unicast_src_ip 172.30.1.100
unicast_peer {
172.30.1.101
}
authentication {
auth_type PASS
auth_pass PASSWORD
}
track_script {
chk_haproxy
}
notify_master /etc/keepalived/master.sh
}
Конфигурация сервера B:
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 100
nopreempt
virtual_router_id 33
unicast_src_ip 172.30.1.101
unicast_peer {
172.30.1.100
}
authentication {
auth_type PASS
auth_pass PASSWORD
}
track_script {
chk_haproxy
}
notify_master /etc/keepalived/master.sh
}
Я установил правила группы безопасности, чтобы:
HTTP TCP 80 0.0.0.0/0
Custom ICMP Rule Echo Reply N/A 0.0.0.0/0
SSH TCP 22 0.0.0.0/0
Custom Protocol VRRP (112) All 0.0.0.0/0
Custom ICMP Rule Echo Request N/A 0.0.0.0/0
Однако следующая команда всегда выходит из резервной копии (и то же самое с реверсом на главном сервере):
nc -vz 172.30.1.100 112
Кроме того, следующая команда никогда ничего не возвращает, что заставляет меня думать, что по какой-то причине они все еще не выполняются:
sudo tshark -f "vrrp"
Проблема оказалась до боли очевидной, когда я поспал на ней и посмотрел еще раз (не всегда ли). Это было так же просто, как и опечатку в unicast_src_ip
. Поскольку IP-адрес был неверным, сообщения не проходили ни на одном сервере. Я бы подумал, что для этого будет какое-то сообщение об ошибке, но все стало работать на 100%, как только это было исправлено.
Ваша команда netcat пытается использовать порт 112, а не протокол 112. Вот почему это не работает. Кроме того, использование netcat для тестирования связи в этом случае - неправильный путь. Используйте любую из этих команд, чтобы узнать, присутствует ли ваш трафик на любом из экземпляров:
tcpdump "ip proto 112"
tshark -f "vrrp"
Ваши конфигурации должны определять один из серверов как МАСТЕР, а другой как РЕЗЕРВНЫЙ. Приоритет должен быть 100 для BACKUP, 101 для MASTER.
Возможно, проблема в том, что для них обоих установлено РЕЗЕРВНОЕ КОПИРОВАНИЕ.