利用Keepalived实现NGINX PLUS的HA部署

IDC服务

利用Keepalived实现NGINX PLUS的HA部署

2025-03-22 00:09


✨ 基于Keepalived的Nginx Plus高可用部署指南 通过Keepalived实现Nginx Plus的双机热备(Active-Standby),可有效避免单点故障,确保业务连续性。本教程将详解配置逻辑、关键参数及验证方法,适用于生产环境。

                                            




✨ 基于Keepalived的Nginx Plus高可用部署指南
通过Keepalived实现Nginx Plus的双机热备(Active-Standby),可有效避免单点故障,确保业务连续性。本教程将详解配置逻辑、关键参数及验证方法,适用于生产环境。


部署架构与核心原理

1. 基础架构图

               +-------------+
               | 虚拟IP (VIP)|
               +------+------+
                      |
        +--------------+--------------+
        |                             |
+-------+-------+             +-------+-------+
| 主节点        |             | 备用节点      |
| Nginx Plus    |             | Nginx Plus    |
| Keepalived    |             | Keepalived    |
+---------------+             +---------------+

2. 核心组件说明

  • Keepalived:通过VRRP协议管理虚拟IP(VIP)漂移,实现故障切换。
  • Nginx Plus:提供健康检查API接口,支持主动状态监控。
  • VRRP协议:主备节点通过组播通信,优先级高的节点获得VIP控制权。

?️ 配置步骤详解

步骤1:环境准备

  • 节点规划

    • 主节点:IP 192.168.1.10,优先级100
    • 备节点:IP 192.168.1.11,优先级90
    • 虚拟IP(VIP):192.168.1.100
  • 依赖安装

    # CentOS/RHEL
    sudo yum install keepalived
    # Ubuntu/Debian
    sudo apt install keepalived
    

步骤2:配置Keepalived主节点

创建配置文件 /etc/keepalived/keepalived.conf

global_defs {
    router_id nginx_ha_master  # 唯一标识,建议按节点命名
}

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"  # 检测Nginx进程是否存在
    interval 2                         # 每2秒执行一次检测
    weight -20                         # 检测失败时降低优先级20
}

vrrp_instance VI_1 {
    state MASTER           # 初始状态为主节点
    interface eth0         # 绑定VIP的网络接口
    virtual_router_id 51   # 虚拟路由ID,主备节点必须相同(1-255)
    priority 100           # 初始优先级(主>备)

    authentication {       # 认证配置
        auth_type PASS
        auth_pass 1234     # 密码需主备一致
    }

    virtual_ipaddress {
        192.168.1.100/24  # 虚拟IP及子网掩码
    }

    track_script {
        chk_nginx         # 关联健康检查脚本
    }
}

步骤3:配置Keepalived备节点

备节点配置与主节点仅需修改两处

vrrp_instance VI_1 {
    state BACKUP          # 初始状态为备节点
    priority 90           # 优先级低于主节点
    # 其他参数与主节点一致
}

步骤4:启动服务并验证

sudo systemctl enable keepalived  # 设置开机启动
sudo systemctl start keepalived   # 立即启动服务

# 检查VIP绑定状态
ip addr show eth0 | grep "inet 192.168.1.100"

关键配置参数解析表

参数 作用 注意事项
state 初始角色(MASTER/BACKUP) 主备节点必须明确区分
virtual_router_id 虚拟路由组标识(1-255) 同一组主备必须相同
priority 节点优先级(1-254) 主节点需高于备节点
interval 健康检查执行频率(秒) 过短增加系统负载,过长延迟故障检测
weight 健康检查失败时优先级调整值 负值表示降级,确保备节点能接管

高可用性验证与故障模拟

1. 主节点故障测试

# 在主节点停止Keepalived服务
sudo systemctl stop keepalived

# 在备节点检查VIP是否接管
ip addr show eth0 | grep "inet 192.168.1.100"  # 应显示VIP

2. Nginx进程崩溃测试

# 在主节点强制终止Nginx
sudo pkill -9 nginx

# Keepalived将触发优先级降级,VIP漂移至备节点

⚠️ 生产环境注意事项

1. 避免脑裂(Split-Brain)

  • 预防措施
    • 使用多播检测或第三方仲裁服务(如基于ICMP的监控)。
    • 配置 nopreempt禁止备节点主动抢占VIP(需主节点恢复后手动切换)。

2. 防火墙配置

确保VRRP协议通信(IP协议号112)和组播地址 224.0.0.18开放:

# CentOS firewalld
sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
sudo firewall-cmd --reload

# Ubuntu UFW
sudo ufw allow proto vrrp

3. 日志与监控

启用Keepalived详细日志:

# 修改/etc/keepalived/keepalived.conf
global_defs {
    log_local 7  # 日志级别0-7(7为最详细)
}

总结

通过Keepalived实现Nginx Plus高可用需关注:VRRP配置同步、健康检查机制、优先级策略。关键参数statepriorityvirtual_router_id需严格匹配,结合防火墙与监控可构建稳定HA环境。建议定期模拟故障,验证切换流程可靠性。?

掌握本教程内容后,可快速构建企业级高可用Web服务集群!


标签:
  • Keepalived
  • NGINX