我在两台不同的机器上使用 2 个 Nginx 服务器,两台机器上分别安装了 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
安装了 Nginx 和 Keepalived 的 2 台服务器。10.0.80.240
是网络中有效的未分配私有 IP,在 keepalived 配置中用作虚拟 IP
问题:当 Nginx 与掌握声明 Keepalived 上的10.0.80.66
已关闭,Keepalived 不会将请求重定向到 上的活动 Nginx 实例10.0.80.68
。我需要在机器上进行任何设置才能实现这一点吗?
答案1
问题缺乏关于这种“关闭”状态的原因的大量信息,但我会选择显而易见的一个:您的“ 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
显然你需要进行调整,它可以变得更加“智能”