Keepalived 和 Nginx 结合可以实现高可用的 Web 服务架构,确保当主服务器故障时能自动切换到备用服务器。以下是详细实现方案:
# CentOS/RHEL
yum install -y nginx
systemctl enable nginx
systemctl start nginx
# Ubuntu/Debian
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx
# CentOS/RHEL
yum install -y keepalived
# Ubuntu/Debian
apt-get install -y keepalived
global_defs {
router_id nginx_master # 标识,建议每台不同
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 检测nginx进程是否存在
interval 2 # 每2秒检测一次
weight -5 # 检测失败权重减少5
fall 2 # 连续2次检测失败才认为失败
rise 1 # 检测1次成功就认为成功
}
vrrp_instance VI_1 {
state MASTER # 主服务器
interface eth0 # 网卡名称,根据实际情况修改
virtual_router_id 51 # 虚拟路由ID,主备必须相同
priority 100 # 优先级,主服务器要高
advert_int 1 # 检查间隔1秒
authentication {
auth_type PASS
auth_pass 1111 # 密码,主备必须相同
}
virtual_ipaddress {
192.168.1.100/24 # 虚拟IP地址,根据实际情况修改
}
track_script {
chk_nginx # 调用上面定义的nginx检测脚本
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
global_defs {
router_id nginx_backup
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP # 备用服务器
interface eth0
virtual_router_id 51 # 必须与主服务器相同
priority 90 # 优先级低于主服务器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
#!/bin/bash
# /etc/keepalived/notify.sh
TYPE=$1
NAME=$2
NOW=$(date +"%F %T")
case $TYPE in
"master")
echo "$NOW - 切换为MASTER" >> /var/log/keepalived-status.log
# 可以在这里添加成为主节点后要执行的命令
;;
"backup")
echo "$NOW - 切换为BACKUP" >> /var/log/keepalived-status.log
# 可以在这里添加成为备节点后要执行的命令
;;
"fault")
echo "$NOW - 切换为FAULT" >> /var/log/keepalived-status.log
# 可以在这里添加故障时要执行的命令
;;
*)
echo "$NOW - 未知状态: $TYPE" >> /var/log/keepalived-status.log
;;
esac
给脚本执行权限:
chmod +x /etc/keepalived/notify.sh
systemctl enable keepalived
systemctl start keepalived
VIP漂移测试:在主服务器上停止keepalived或nginx服务,观察VIP是否自动切换到备用服务器
systemctl stop nginx # 在主服务器上执行
然后检查备用服务器是否接管了VIP:
ip addr show eth0 | grep "192.168.1.100"
恢复测试:恢复主服务器的服务,观察VIP是否自动切回
systemctl start nginx
systemctl start keepalived
通过以上配置,您就实现了一个高可用的Nginx服务架构,能够自动在主服务器故障时切换到备用服务器,确保服务持续可用。