Я использую 2 сервера Nginx на 2 разных машинах с установленным Keepalived соответственно на обеих машинах. Ниже представлена конфигурация для Keepalived.
МАСТЕР ХРАНИЛ
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
10.0.80.240
}
unicast_src_ip 10.0.80.66
unicast_peer {
10.0.80.68
}
}
vrrp_script chk_http_port {
script "pidof nginx"
interval 2
}
РАБ СОХРАНЯЕТСЯ
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
10.0.80.240
}
unicast_src_ip 10.0.80.68
unicast_peer {
10.0.80.66
}
}
vrrp_script chk_http_port {
script "pidof nginx"
interval 2
}
НОТА: 10.0.80.66
& 10.0.80.68
это 2 сервера, на которых установлены Nginx и Keepalived. 10.0.80.240
- это действительный неназначенный частный IP-адрес в сети, используемый в качестве виртуального IP-адреса в конфигурации keepalived
ВОПРОС: Когда Nginx с МАСТЕР заявил Keepalived на 10.0.80.66
не работает, Keepalived не перенаправляет запрос на экземпляр Nginx, работающий на 10.0.80.68
. Есть ли какие-то настройки, которые мне нужно сделать на машинах, чтобы это произошло?
В этом вопросе не так много информации о причинах такого статуса "неработающий", но я остановлюсь на очевидном: Ваш 'vrrp_script
'только убедитесь, что процесс nginx присутствует в системе, а не то, что служба запущена и работает.
Для надежной проверки нужно пойти дальше, например примерно так:
#!/bin/bash
# exit on first error
set -o errexit
# check nginx process exist
pidof nginx
# check nginx static processing ok (if appliable)
curl --silent http://localhost/static/test/
# check dynamic backend (ideally should test backend database connection)
curl --silent http://localhost/service/test/
# everything was ok ? so exit fine
exit 0
Очевидно, вам нужно настроить, и он может быть намного более "умным"