跳到主要内容

Keepalived 配置 Nginx 自动重启 ?

参考答案:

Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源软件,用于实现服务器之间的高可用性。通过配置 Keepalived,我们可以实现 Nginx 的自动重启和双主热备,从而提高系统的可用性和可靠性。以下是如何配置 Keepalived 以实现 Nginx 自动重启的步骤:

  1. 安装 Keepalived 和 Nginx: 首先,确保在所有参与高可用性架构的服务器上安装了 Keepalived 和 Nginx。你可以通过适合你的操作系统的包管理器(如 apt、yum 等)来安装这两个软件。

  2. 创建 Nginx 检查脚本: 我们需要一个脚本来检查 Nginx 的状态,并在必要时重新启动它。以下是一个简单的示例脚本,该脚本检查 Nginx 进程是否存在,如果不存在则尝试重新启动它:

    #!/bin/bash
    A=`ps -C nginx --no-header | wc -l`
    if [ $A -eq 0 ]; then
        /usr/local/nginx/sbin/nginx
        sleep 3
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
            # 如果 Nginx 仍未启动,你可以在这里添加额外的处理逻辑,例如发送警报或停止 Keepalived
            echo "Nginx failed to start"
            # killall keepalived
        fi
    fi
    

    将上述脚本保存为 /etc/keepalived/check_nginx_alive_or_not.sh,并赋予执行权限:

    chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
    
  3. 配置 Keepalived: 在主服务器和备份服务器上分别创建 Keepalived 的配置文件(通常是 /etc/keepalived/keepalived.conf)。在配置文件中,你需要定义 VRRP 实例以及一个用于执行 Nginx 检查脚本的自定义检查。

    以下是一个简化的 Keepalived 配置示例,其中包含了自定义的脚本检查:

    ! Configuration File for keepalived
    
    global_defs {
        notification_email {
            your-email@example.com
        }
        notification_email_from keepalived@yourdomain.com
        smtp_server smtp.yourdomain.com
        smtp_connect_timeout 30
        router_id LVS_DEVEL
    }
    
    vrrp_script chk_nginx {
        script "/etc/keepalived/check_nginx_alive_or_not.sh"
        interval 2  # 检查间隔
        weight 2    # 如果脚本执行失败,则降低优先级
    }
    
    vrrp_instance VI_1 {
        state MASTER      # 主节点为 MASTER,备份节点为 BACKUP
        interface eth0    # 网络接口名称
        virtual_router_id 51  # VRRP 组标识,主备节点必须一致
        priority 100      # 优先级,主节点优先级高于备份节点
        advert_int 1      # VRRP 广播间隔
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.100/24  # 虚拟 IP 地址
        }
        track_script {
            chk_nginx    # 执行上面定义的 chk_nginx 脚本检查
        }
        notify_master "/path/to/your/script_to_run_when_master.sh"  # 成为主节点时执行的脚本(可选)
        notify_backup "/path/to/your/script_to_run_when_backup.sh"   # 成为备份节点时执行的脚本(可选)
        notify_fault "/path/to/your/script_to_run_when_fault.sh"      # 出现故障时执行的脚本(可选)
        notify_stop "/path/to/your/script_to_run_when_stop.sh"        # Keepalived 停止时执行的脚本(可选)
    }
    

    注意,interface 应该设置为你的服务器实际使用的网络接口名称,virtual_ipaddress 是你想要 Keepalived 管理的虚拟 IP 地址。

  4. 启动 Keepalived 服务: 配置完成后,启动 Keepalived 服务,并确保它在系统启动时自动启动:

    sudo systemctl start keepalived
    sudo systemctl enable keepalived
    
  5. 验证配置: 检查 Keepalived 和 Nginx 的状态,确保它们正在运行并且按照预期进行故障转移。

请注意,