插件窝 干货文章 keepalived双机热备nginx怎么配置

keepalived双机热备nginx怎么配置

Keepalived Nginx 服务器 检查 408    来源:    2025-04-25

Keepalived + Nginx 双机热备配置指南

一、配置前准备

  1. 两台服务器(假设为 ServerA 和 ServerB)
  2. 确保两台服务器已安装 Nginx 和 Keepalived
  3. 一个虚拟 IP(VIP)地址,例如 192.168.1.100

二、Nginx 基础配置

在两台服务器上安装并配置 Nginx(确保配置相同):

# 安装 Nginx (以 Ubuntu 为例)
sudo apt update
sudo apt install nginx -y

# 启动 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

三、Keepalived 安装

在两台服务器上安装 Keepalived:

sudo apt install keepalived -y

四、Keepalived 配置

主服务器配置(ServerA) - /etc/keepalived/keepalived.conf

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx" # 检查nginx进程是否存在
    interval 2                         # 每2秒检查一次
    weight 2                           # 优先级变化值
}

vrrp_instance VI_1 {
    state MASTER                       # 主服务器设置为MASTER
    interface ens33                    # 网卡名称(根据实际情况修改)
    virtual_router_id 51               # 虚拟路由ID,主备必须相同
    priority 100                       # 优先级,主服务器较高
    advert_int 1                       # 检查间隔,单位秒

    authentication {
        auth_type PASS
        auth_pass 1111                 # 认证密码,主备必须相同
    }

    virtual_ipaddress {
        192.168.1.100/24               # 虚拟IP地址
    }

    track_script {
        chk_nginx                      # 调用上面定义的检查脚本
    }
}

备服务器配置(ServerB) - /etc/keepalived/keepalived.conf

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx" # 检查nginx进程是否存在
    interval 2                         # 每2秒检查一次
    weight 2                           # 优先级变化值
}

vrrp_instance VI_1 {
    state BACKUP                       # 备服务器设置为BACKUP
    interface ens33                    # 网卡名称(根据实际情况修改)
    virtual_router_id 51               # 虚拟路由ID,主备必须相同
    priority 90                        # 优先级,备服务器较低
    advert_int 1                       # 检查间隔,单位秒

    authentication {
        auth_type PASS
        auth_pass 1111                 # 认证密码,主备必须相同
    }

    virtual_ipaddress {
        192.168.1.100/24               # 虚拟IP地址
    }

    track_script {
        chk_nginx                      # 调用上面定义的检查脚本
    }
}

五、启动 Keepalived

在两台服务器上启动 Keepalived:

sudo systemctl start keepalived
sudo systemctl enable keepalived

六、验证配置

  1. 检查虚拟 IP 是否绑定在主服务器上:

    ip addr show
    

    应该能看到虚拟 IP 绑定在主服务器的网卡上

  2. 停止主服务器的 Nginx 服务:

    sudo systemctl stop nginx
    

    观察虚拟 IP 是否自动漂移到备服务器

  3. 恢复主服务器的 Nginx 服务:

    sudo systemctl start nginx
    

    观察虚拟 IP 是否自动漂移回主服务器

七、高级配置选项(可选)

邮件通知配置

在 keepalived.conf 中添加:

global_defs {
    notification_email {
        admin@yourdomain.com
    }
    notification_email_from keepalived@yourdomain.com
    smtp_server smtp.yourdomain.com
    smtp_connect_timeout 30
}

更复杂的健康检查

可以替换简单的进程检查为更全面的 Nginx 健康检查:

vrrp_script chk_nginx {
    script "/usr/bin/curl -s http://localhost/health-check || exit 1"
    interval 2
    weight 2
    fall 2
    rise 2
}

常见问题解决

  1. 虚拟 IP 不漂移

    • 检查防火墙是否阻止了 VRRP 协议(通常使用 IP 协议号 112)
    • 确保两台服务器的 virtual_router_id 相同
    • 检查网络接口名称是否正确
  2. 脑裂问题

    • 确保网络连接稳定
    • 可以配置多播或单播 VRRP 通信
  3. 日志查看

    journalctl -u keepalived -f
    

通过以上配置,您已经成功设置了 Nginx 的 Keepalived 双机热备方案,可以实现高可用的 Web 服务。