不同子网上的 KeepAlived

不同子网上的 KeepAlived

我正在尝试在基于 ESXi 的设置上设置 keepalived,其中 2 个物理盒安装了 ESXi,每个物理盒都有一个使用 HAProxy 充当负载平衡器的节点。现在,为了实现高可用性,我想使用 KeepAlived,这样两个 HAProxy 实例都可以共享虚拟 IP,并且我可以将物理 IP 地址指向虚拟 IP 地址。我的实施面临的挑战是它有 2 个子网。

子网 A 上的 HAProxy:1.1.10.101 子网 B 上的 HAProxy:1.2.10.101

现在,当我尝试在两个实例上分配虚拟 IP 1.1.10.201 时,它将指向两个服务器上的本地实例。

我正在使用带有 HAProxy 和 KeepAlived 的 CentOS 7.x,主要用于平衡 HTTP 流量的负载,也可能用于数据库。

我不会发布配置文件,因为问题本身非常简单,但如果需要我可以这样做。

答案1

还有另一种方法。不同网络中的 2 个 keepalived 可以使用进行通信unicast_peer(其工作原理与你有 VIP 但没有 VIP 的情况相同)

然后,您可以使用notify_script移动 IP 故障转移(例如由您的主机提供)并向您的提供商发出 API 调用,以在 keepalived 转换到 MASTER 时告知将您的 IP 故障转移移动到另一个服务(有一条notify_master规则)。

我的 keepalived 配置示例:

global_defs {
    vrrp_version 2
    vrrp_garp_master_delay 1
    vrrp_garp_master_refresh 60
    script_user root
    enable_script_security
}

vrrp_script chk_haproxy {
    script "/etc/keepalived/scripts/check_haproxy.sh"
    timeout 1
    interval 5   # check every 5 second
    fall 2       # require 2 failures for KO
    rise 2       # require 2 successes for OK
}

vrrp_instance lb-vips {
    state {{KEEPALIVED_STATE}}
    interface {{KEEPALIVED_INTERFACE}}
    virtual_router_id {{KEEPALIVED_VIRTUAL_ROUTER_ID}}
    priority {{KEEPALIVED_PRIORITY}}
    advert_int 1
    unicast_src_ip {{KEEPALIVED_UNICAST_SRC}}
    unicast_peer {
        X.X.X.X # here you have all ip of other keepalived
        X.X.X.X
    }
    authentication {
        auth_type PASS
        auth_pass {{KEEPALIVED_AUTH_PASSWORD}}
    }
    track_script {
        chk_haproxy
    }

    notify "/etc/keepalived/scripts/notify_script.sh"
}

相关变量:

# Keepalived Config
KEEPALIVED_STATE=MASTER
KEEPALIVED_INTERFACE=eth0
KEEPALIVED_VIRTUAL_ROUTER_ID=77
# For electing MASTER, highest priority wins.
# MASTER=101, SLAVES=100
KEEPALIVED_PRIORITY=101
# password: Only the first eight (8) characters are used.
KEEPALIVED_AUTH_PASSWORD=password
# Should be the public ip of the server
KEEPALIVED_UNICAST_SRC=X.X.X.X

# Keepalived Notify Script Config
OVH_ENDPOINT=ovh-eu
OVH_APP_KEY=X.X.X.X
OVH_APP_SECRET=X.X.X.X
OVH_CONSUMER_KEY=X.X.X.X
FAILOVER_IP=X.X.X.X
FAILOVER_SERVICE=X.X.X.X

答案2

不幸的是,keepalived 使用的 VRRP 只能在单个子网内工作。

相关内容