虛擬IP(VIP)主要用于彈性云服務器的主備切換,達到高可用性的目的。如果主ECS實例發生故障,備用ECS實例會自動調用自身的接管程序,接管主ECS實例的虛擬IP資源及服務,實現業務高可用。
前提準備
實例鏡像及vm實例已創建且能登錄互通。
配置步驟
本場景整體操作流程如下:


步驟一:創建虛擬IP
虛擬IP是一種可以獨立創建和釋放的私網IP資源。彈性云服務器綁定虛擬IP后,彈性云服務器可以通過使用ARP協議進行該IP的宣告。
本文以可用區資源池華東1為例:
1、登錄管理控制臺。
2、選擇“服務列表 > 網絡 > 虛擬私有云”。
3、在左側導航欄選擇“子網”。
4、在“子網”列表中,單擊子網名稱。
5、在“虛擬IP”頁簽中,單擊“申請虛擬IP地址”,根據界面提示配置參數。
步驟二:申請所需云資源
1、登錄管理控制臺。
2、選擇“服務列表 > 計算 > 彈性云主機”,購買彈性云服務器。
3、選擇“服務列表 > 網絡 > 彈性IP”申請EIP(根據是否有訪問公網業務需求來購買)。
步驟三:在主備彈性云服務器上安裝keepalived
本示例介紹如何部署keepalived 和nginx進程。
1、登錄ECS1實例。具體操作,請參見彈性云主機。
2、在port-nouqagnspx 所在的實例中啟動keepalived服務。
2.1 安裝keepalived
yum install -y keepalived
2.2 修改配置文件,并啟動服務。
- vi /etc/keepalived/keepalived.conf
- 清除文件內容
- 每個server填入各自配置
server1:
! Configuration File for keepalived
global_defs {
router_id my_router
vrrp_garp_interval 3
vrrp_gna_interval 3
}
vrrp_instance VI_1 {
# 注意主備參數選擇
state BACKUP # 設置初始狀態均為"備"
interface eth0 # 設置綁定 VIP 的網卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 設置非搶占模式,
priority 100 # 兩設備是相同值的等權重節點
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.17.0.3 # 設置本機內網IP地址
unicast_peer {
172.17.0.4 # 對端設備的 IP 地址
}
virtual_ipaddress {
172.17.0.7 # 設置高可用虛擬 VIP
}
garp_master_delay 1 # 設置當切為主狀態后多久更新 ARP 緩存
garp_master_refresh 5 # 設置主節點發送 ARP 報文的時間間隔
track_interface {
eth0 # 使用綁定 VIP 的網卡 例如 eth0
}
}
server2:
! Configuration File for keepalived
global_defs {
router_id my_router
vrrp_garp_interval 3
vrrp_gna_interval 3
}
vrrp_instance VI_1 {
# 注意主備參數選擇
state BACKUP # 設置初始狀態均為"備"
interface eth0 # 設置綁定 VIP 的網卡 例如 eth0
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 設置非搶占模式,
priority 100 # 兩設備是相同值的等權重節點
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.17.0.4 # 設置本機內網IP地址
unicast_peer {
172.17.0.3 # 對端設備的 IP 地址
}
virtual_ipaddress {
172.17.0.7 # 設置高可用虛擬 VIP
}
garp_master_delay 1 # 設置當切為主狀態后多久更新 ARP 緩存
garp_master_refresh 5 # 設置主節點發送 ARP 報文的時間間隔
track_interface {
eth0 # 使用綁定 VIP 的網卡 例如 eth0
}
}
2.3 啟動keepalived:
3、在port為port-5oq20ui7dl的實例中做同樣的上述操作,keepalived的配置文件響應的地址需要修改下,然后啟動keepalived服務。
注意您需要將配置文件中的通信方式配置為單播通信方式做心跳檢測。
步驟四:將虛擬IP與主備彈性云服務器綁定
點擊綁定服務器,彈出的對話框中,
4.1 選擇“服務器類型”:云主機/物理機


4.2 選擇網卡:云主機支持多網卡,可選擇主網卡/擴展網卡(需確保網卡與虛擬IP在同一子網內才可綁定)。


步驟五:放通安全組規則
放通綁定虛擬IP的彈性云服務器所在的安全組,即放通對端入向安全組規則協議為Any。


說明1、出向默認是全通的,如果有做限制,請放通出向規則協議為Any。
步驟六:將虛擬IP與EIP綁定(如有訪問公網需求可綁定)
點擊綁定彈性IP,彈出的對話框中選擇未綁定的彈性IP。綁定彈性公網IP為單選,每個IP只能綁定一個虛擬IP,且綁定虛擬IP后不能再綁定其它云資源。


步驟七:訪問測試
7.1 在port-5oq20ui7dl和 port-nouqagnspx兩個vip 后端節點啟動keepalived服務后,可以通過 ip addr查看vip設置在哪個節點(即master)。
port-5oq20ui7dl節點:


port-nouqagnspx 節點:


在另一個同子網的port實例中ping vip,然后期間重啟port-5oq20ui7dl節點上的keepalived服務,觀察ping的情況:


同時vip兩個后端節點分別執行ip addr ,觀察vip 是否漂移到了另一個節點。
注意
如不放通安全組規則可能會存在雙主的現象,請保證您的對端安全組規則已放通。
keepalived不同版本配置可能存在部分差異,本文檔已在keepalived-2.0.20-19.ct12.x86_64做過驗證,僅供參考。

tips :
keepalived 關鍵配置說明(必須配置):
IPv4:
vrrp_garp_master_delay :切換成master后,發送免費arp的延時時間,單位s,默認值為 5 ( 5s )。建議配置值為 1s 。
vrrp_garp_master_repeat :切換成master后,一次發送免費arp的數量。默認值為5。 建議值為3,或者不配置使用默認值5。
vrrp_garp_master_refresh :角色為master節點刷新發送免費arp的時間間隔。單位s ,默認值為 0 (不刷新),建議配置值為 5s 。
vrrp_garp_master_refresh_repeat :角色為master節點刷新免費arp時發送的免費arp的數量。默認值為1。
vrrp_garp_interval :接口發送免費arp報文間的時間間隔。默認值為0。
vrrp_gna_interval :接口發送NA報文的時間間隔。默認值為0。
VRRP實例對應的配置:
garp_master_delay 10
garp_master_repeat 1
garp_lower_prio_delay 10
garp_lower_prio_repeat 1
garp_master_refresh 60
garp_master_refresh_repeat 2
注意虛擬IP本身是一種可以獨立創建和釋放的私網IP資源,與高可用軟件(例如Keepalived)配合使用,搭建高可用主備服務,提高業務的可用性。理論上不推薦您在尚未使用高可用軟件的前提下去手動切換虛擬IP所綁定資源的主備狀態,底層在未收到免費ARP(IPv4類型)/NA報文(IPv6類型)時,無法識別主的切換行為,因此會造成服務器切換狀態失敗。
若您仍需要手動切換資源主備狀態,請確保您的虛機可以發出相應的免費ARP(IPv4類型)/NA報文(IPv6類型)來宣告主資源。請確保虛機發出的對應協議報文中:
1、IPv6時,NA報文(ICMPv6):源IP是網卡的VIP,目的IP是IPv6組播 FF02::1,源MAC是網卡的MAC,目的MAC是IPv6組播33:33:00:00:00:01。
2、IPv4時,ARP:源、目的IP均為VIP,源MAC為網卡MAC,目的MAC為 FF:FF:FF:FF:FF:FF。
