HAProxy track_script + nopreempt 不起作用

HAProxy track_script + nopreempt 不起作用

我在 Amazon AWS VPC 中有 2 个带有 Keepalived v1.2.13 的节点。

我正在尝试实现这个场景,假设 Node1 是 MASTER:
如果我停止 HAProxy 或停止 keepalived 或停止节点,则故障转移到 Node2。
如果我在 Node1 上启动 HAProxy 备份或启动 keepalived 或启动节点,则执行不是故障转移到 Node1(无抖动)。

使用以下配置,只需停止 keepalived 或停止节点,故障转移即可工作。track_script 导致的优先级变化似乎不会影响 MASTER 选举。

节点1

vrrp_script chk_haproxy {       # Requires keepalived-1.1.13
script "killall -0 haproxy"     # cheaper than pidof
interval 2                      # check every 2 seconds
fall 2
weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    advert_int 2
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 51
    priority 101
    unicast_peer {
        172.17.16.10
    }

    notify_master "/etc/keepalived/randomscript.sh"
    track_script {
        chk_haproxy
    }
}

节点2

vrrp_script chk_haproxy {       # Requires keepalived-1.1.13
script "killall -0 haproxy"     # cheaper than pidof
interval 2                      # check every 2 seconds
fall 2
weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    advert_int 2
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 51
    priority 100
    unicast_peer {
        172.17.16.11
    }

    notify_master "/etc/keepalived/randomscript.sh"
    track_script {
        chk_haproxy
    }
}

答案1

我最终使用了两个都节点:

state EQUAL
priority 100

竞争条件是由于实例的安全组存在某种问题而导致的。因此,这是一个特定于AWS

由于未知原因,即使安全组中未明确允许,VRRP 单播仍可工作。我明确打开了它(自定义协议 112),它解决了该问题。似乎在堆栈初始化期间允许数据包需要一些时间。

相关内容