Centos
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 流量,也可能用於數據庫。
我沒有發布配置文件,因為問題本身非常簡單,但如果需要,我可以這樣做。
還有一種替代方法。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