一.Keepalived多主模型
Keepalived多主模型概念
如上圖,keepalived主從架構性能損耗較嚴重,如果業務分類明確,則可以配置keepalived多主模型降低損耗,兩臺keepalived互為主備,如:訂單業務走keepalived1,keepalived2做備,商品業務走keepalived2,keepalived1做備。也就是keepalived1和keepalived2各拿一份vip
Keepalived多主模型配置
keepalived1訂單業務:
vrrp_instance VI_2 {state BACKUP #設置為BACKUPinterface ens33virtual_router_id 55priority 80advert_int 1authentication {auth_type PASSauth_pass 111156}virtual_ipaddress {192.168.80.40/24192.168.80.41/24192.168.80.42/24}notify_master "/root/sendemail.sh master"notify_backup "/root/sendemail.sh backup"notify_fault "/root/sendemail.sh fault"
}
?
keepalived1商品業務:?
vrrp_instance VI_1 {state MASTER #設置為MASTER interface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.80.50/24192.168.80.51/24192.168.80.52/24}notify_master "/root/sendemail.sh master"notify_backup "/root/sendemail.sh backup"notify_fault "/root/sendemail.sh fault"
}
keepalived2訂單業務:
vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 55priority 80advert_int 1authentication {auth_type PASSauth_pass 111156}virtual_ipaddress {192.168.80.40/24192.168.80.41/24192.168.80.42/24}notify_master "/root/sendemail.sh master"notify_backup "/root/sendemail.sh backup"notify_fault "/root/sendemail.sh fault"}
?keepalived2商品業務:
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.80.50/24192.168.80.51/24192.168.80.52/24}notify_master "/root/sendemail.sh master"notify_backup "/root/sendemail.sh backup"notify_fault "/root/sendemail.sh fault"}
驗證
?如上圖,keepalived是商品業務的主節點,拿到商品業務的vip,keepalived2是訂單業務的主節點,拿到訂單業務的vip,并且互為主備。
如果此時一個keepalived壞了,另一個keepalived將擁有兩個業務的vip
?
二.實現IPVS 高可用
在分布式系統架構中,高可用性設計始終是核心命題。當我們使用 Keepalived 實現 VIP 飄移時,本質上只是解決了 IP 層的可用性問題,這就像為建筑搭建了穩固的地基,但要讓大樓真正運轉起來,還需要在服務層構建完整的容錯機制。LVS(Linux Virtual Server)正是實現這一目標的關鍵組件,它與 Keepalived 的 VRRP 協議形成了完美的能力互補。
虛擬服務器配置
virtual_server IP port { # 定義虛擬服務器,指定監聽的IP和端口delay_loop<INT> # 健康檢查的時間間隔(單位:秒)lib_algo rr|wr1|cln1c|lib|cln1dh # 負載均衡算法(rr=輪詢,wr1=加權輪詢,cln1c=最少連接,cln1dh=目標地址哈希)lib_kind NAT|ON|TUN # 數據包轉發模式(NAT=網絡地址轉換,TUN=隧道模式,ON=直接路由)persistence_timeout <INT> # 會話保持時間(單位:秒,0表示不啟用)protocol TCP|USIP|SCTP # 協議類型(TCP/USIP[UDP]/SCTP)sorry_server <IPADDR> <PORT> # 備用服務器地址,當所有真實服務器宕機時啟用real_server <IPADDR> <PORT> { # 定義真實服務器(后端節點)weight <INT> # 服務器權重(權重越高分配的請求越多)notify_up <STRING> # 服務器上線時觸發的腳本/命令notify_down <STRING> # 服務器下線時觸發的腳本/命令# 健康檢查方法(只能選其一):HTTP_GET|SSL_GET { # HTTP/HTTPS 檢查(需配置具體URL和狀態碼)url { path <PATH> } # 示例:url { path "/health" status_code 200 }}TCP_CHECK { ... } # TCP端口檢查(默認檢測端口連通性)SNTP_CHECK { ... } # SNTP協議檢查(用于時間服務器)MISC_CHECK { ... } # 自定義腳本檢查(需指定外部腳本路徑)}
}
?例如:
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100}
}virtual_server 192.168.1.100 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.1.101 80 {weight 3TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
?該配置展示了
-
VRRP 實現 VIP(192.168.1.100) 的飄移
-
LVS 使用 DR 模式進行流量分發
-
基于 TCP 連接的健康檢查機制
-
權重為 3 的服務器優先級設置
當某臺真實服務器不可達時,LVS 會自動將其移出服務池,同時 Keepalived 通過 VRRP 協議維護 VIP 的可用性,形成雙重保障機制。