Centos

KeepAlived 在不同的子網上

  • December 29, 2021

我正在嘗試在基於 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 流量,也可能用於數據庫。

我沒有發布配置文件,因為問題本身非常簡單,但如果需要,我可以這樣做。

還有一種替代方法。2 keepalived 在不同的網路中可以使用通信unicast_peer(它的工作方式就像你有一個 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

引用自:https://serverfault.com/questions/760875