文章目录
前言
在企业级应用中,保证服务的高可用性是至关重要的。Nginx作为流行的Web服务器和反向代理服务器,其高可用性方案能够有效避免单点故障,确保业务连续性。本文将详细介绍在CentOS 7.9系统下,使用Keepalived实现Nginx高可用集群的完整方案。
一、环境准备
1.1 系统环境
- 操作系统:CentOS 7.9
- 服务器1:192.168.10.21(主节点)
- 服务器2:192.168.10.22(备节点)
- 虚拟IP(VIP):192.168.10.180
- 已安装软件:Nginx
1.2 基础环境设置
1.2.1 关闭防火墙和SELinux
在两台服务器上执行以下操作:
# 停止并禁用防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(需要重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 验证SELinux状态
getenforce
1.2.2 安装Keepalived软件包
在两台服务器上执行:
yum install -y keepalived
1.2.3 为nginx服务器准备网页文档
# 192.168.10.21
echo "<h1>192.168.10.21</h1>" > /usr/local/nginx/html//index.html
# 192.168.10.22
echo "<h1>192.168.10.22</h1>" > /usr/local/nginx/html//index.html


二、配置健康检查脚本
2.1 创建健康检查脚本
在两台服务器上创建相同的健康检查脚本:
vim /etc/keepalived/check_nginx.sh
脚本内容:
#!/bin/bash
# 检测 nginx 是否存活
# 存活 -> exit 0
# 死亡 -> exit 1
if /usr/bin/pgrep -x "nginx" >/dev/null 2>&1; then
exit 0
else
exit 1
fi

2.2 设置脚本权限
chmod +x /etc/keepalived/check_nginx.sh
三、配置Keepalived
3.1 主服务器配置(192.168.10.21)
创建或编辑Keepalived配置文件:
vim /etc/keepalived/keepalived.conf
配置文件内容:
! Configuration File for keepalived
global_defs {
router_id nginx_master # 唯一标识,备份节点要不同
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 健康检查脚本
interval 2 # 检查间隔(秒)
weight -50 # 检查失败时权重减少值
fall 2 # 连续失败2次才认为故障
rise 1 # 成功1次就认为恢复
}
vrrp_instance VI_1 {
state MASTER # 初始状态
interface ens33 # 网卡名称,根据实际情况修改
virtual_router_id 51 # 虚拟路由ID,同一组keepalived必须相同
priority 100 # 优先级,主节点要高于备份节点
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证方式
auth_pass 1111 # 认证密码,同一组keepalived必须相同
}
track_script {
chk_nginx # 执行健康检查
}
virtual_ipaddress {
192.168.10.180/24 dev ens33 # 虚拟IP地址
}
}
3.2 备份服务器配置(192.168.10.22)
创建或编辑Keepalived配置文件:
vim /etc/keepalived/keepalived.conf
配置文件内容:
! Configuration File for keepalived
global_defs {
router_id nginx_backup # 唯一标识
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -50
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP # 初始状态为备份
interface ens33
virtual_router_id 51 # 必须与主节点相同
priority 90 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 # 必须与主节点相同
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.10.180/24 dev ens33
}
}
重要提示:请根据实际网络环境修改interface参数,使用ip addr命令查看正确的网卡名称。
四、启动服务
4.1 启动Keepalived和Nginx
在两台服务器上执行:
# 启动keepalived并设置开机自启
systemctl start keepalived
systemctl enable keepalived
# 检查服务状态
systemctl is-active keepalived
systemctl is-active nginx

五、验证配置
5.1 检查VIP绑定状态
在主服务器上执行:
ip addr show ens33

5.2 测试VIP访问
从客户端测试虚拟IP是否可访问:
http://192.168.10.180

六、故障切换测试
6.1 查看keepalived日志
tail -f /var/log/messages | grep keepalived
6.2 测试Nginx服务故障
在主服务器上停止Nginx服务:
systemctl stop nginx
等待几秒钟后,在备份服务器上检查VIP是否已切换:
ip addr show ens33



6.3 恢复测试
恢复主服务器服务:
systemctl start nginx
# 主服务器执行
ip addr show ens33
由于主服务器优先级更高,VIP应该会自动切回主服务器。

# 在客户端继续访问vip,查看区别
http://192.168.10.180

总结
本文详细介绍了在CentOS 7.9系统下搭建Nginx+Keepalived高可用集群的完整方案。通过该方案,可以实现:
- 自动故障检测:通过健康检查脚本实时监控Nginx服务状态
- 自动故障切换:当主节点出现故障时,VIP会自动切换到备用节点
- 服务高可用:确保Web服务在单点故障时仍可正常访问
- 快速恢复:故障节点恢复后,可自动或手动切回主节点
该方案具有配置简单、可靠性高、维护方便等特点,适合中小型企业的Web服务高可用需求。在实际生产环境中,建议结合监控系统对集群状态进行实时监控,并定期进行故障切换演练,确保高可用方案的有效性。

7234

被折叠的 条评论
为什么被折叠?



