在主 Nginx 死机后,Nginx 的 Keepalived 负载平衡无法正常工作,只有备份 Nginx 仍处于活动状态

在主 Nginx 死机后,Nginx 的 Keepalived 负载平衡无法正常工作,只有备份 Nginx 仍处于活动状态

我在两台不同的机器上使用 2 个 Nginx 服务器,两台机器上分别安装了 Keepalived。以下是两个 Keepalived 的配置。

主服务器保持活动状态

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

     track_script {
            chk_http_port
        }

    virtual_ipaddress {
        10.0.80.240
    }

unicast_src_ip 10.0.80.66
    unicast_peer {
        10.0.80.68
    }
}

vrrp_script chk_http_port {
    script "pidof nginx"
    interval 2
}

奴隶保活

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_http_port
    }

    virtual_ipaddress {
        10.0.80.240
    }

unicast_src_ip 10.0.80.68
    unicast_peer {
        10.0.80.66
    }
}

vrrp_script chk_http_port {
    script "pidof nginx"
    interval 2
}

笔记: 10.0.80.6610.0.80.68安装了 Nginx 和 Keepalived 的 2 台服务器。10.0.80.240是网络中有效的未分配私有 IP,在 keepalived 配置中用作虚拟 IP

问题:当 Nginx 与掌握声明 Keepalived 上的10.0.80.66已关闭,Keepalived 不会将请求重定向到 上的活动 Nginx 实例10.0.80.68。我需要在机器上进行任何设置才能实现这一点吗?

答案1

问题缺乏关于这种“关闭”状态的原因的大量信息,但我会选择显而易见的一个:您的“ vrrp_script”仅检查系统中是否存在 nginx 进程,而不是检查服务是否启动并正在运行。

为了进行可靠的检查,您需要进一步采取步骤,例如这样的操作:

#!/bin/bash
# exit on first error
set -o errexit
# check nginx process exist
pidof nginx
# check nginx static processing ok (if appliable)
curl --silent http://localhost/static/test/
# check dynamic backend (ideally should test backend database connection)
curl --silent http://localhost/service/test/
# everything was ok ? so exit fine
exit 0

显然你需要进行调整,它可以变得更加“智能”

相关内容