從原理到實踐:LVS+Keepalived構建高可用負載均衡集群
文章目錄
- 從原理到實踐:LVS+Keepalived構建高可用負載均衡集群
- 一、為什么需要LVS+Keepalived?
- 二、核心原理:Keepalived與VRRP協議
- 1. VRRP的核心思想
- 2. Keepalived的三大功能
- 三、LVS+Keepalived集群拓撲設計
- 四、實戰部署:LVS+Keepalived集群搭建
- 階段1:環境準備
- 階段2:配置主從調度器(核心步驟)
- 1. 主調度器配置(192.168.10.73)
- 2. 從調度器配置(192.168.10.74)
- 3. 啟動Keepalived服務
- 階段3:配置Web節點(DR模式必需)
- 五、集群測試與驗證
- 1. 負載均衡測試
- 2. 高可用(故障切換)測試
- (1)主調度器故障測試
- (2)Web節點故障測試
- 3. 日志查看
- 六、常見問題與解決方案
- 七、總結
在企業級應用部署中,“單點故障”是懸在運維人員頭頂的“達摩克利斯之劍”——單臺服務器一旦宕機,服務中斷、業務停滯、用戶流失等問題便會接踵而至。為解決這一痛點,LVS(Linux Virtual Server)與Keepalived的組合成為了構建高可用負載均衡集群的經典方案。本文將從原理剖析入手,一步步帶大家掌握LVS+Keepalived集群的部署與實戰技巧。
一、為什么需要LVS+Keepalived?
在傳統的單服務器或單純LVS部署中,存在兩大核心隱患:
- 單點故障風險:無論是單獨的Web服務器,還是LVS調度器,一旦出現硬件故障或軟件崩潰,整個服務鏈路便會中斷。
- 負載與可用性失衡:單純的LVS能實現負載均衡,但調度器本身沒有冗余機制;單純的雙機熱備能解決單點問題,卻無法分擔訪問壓力。
而LVS+Keepalived的組合恰好彌補了這些不足:
- LVS:作為四層負載均衡器,負責將客戶端請求高效分發到后端服務器池,支撐高并發訪問。
- Keepalived:基于VRRP協議實現調度器的熱備冗余,同時提供節點健康檢查,確保集群“零中斷”運行。
二、核心原理:Keepalived與VRRP協議
想要用好LVS+Keepalived,首先要理解其核心——VRRP(虛擬路由冗余協議) ,這是Keepalived實現高可用的底層邏輯。
1. VRRP的核心思想
VRRP將多臺服務器(或路由器)組成一個“熱備組”,通過一個虛擬IP(VIP) 對外提供服務。熱備組內有明確的角色分工:
- 主節點(MASTER):優先級最高的節點,負責處理客戶端請求,同時定期向備節點發送“心跳”消息。
- 備節點(BACKUP):處于待命狀態,持續監聽主節點的心跳;一旦檢測到主節點失效,立即通過優先級選舉接替VIP,成為新的主節點。
這種“虛擬IP漂移”機制,能在主節點故障時實現毫秒級切換,對客戶端完全透明。
2. Keepalived的三大功能
Keepalived并非只為LVS設計,但其與LVS的適配性堪稱完美,核心功能可概括為三點:
- 故障自動切換(Failover):基于VRRP實現主備調度器的無縫切換,避免調度器單點故障。
- 節點健康檢查(Health Checking):定期檢測后端真實服務器(如Web節點)的狀態,自動剔除故障節點,待節點恢復后再重新加入集群。
- LVS集群管理:可直接調用ipvsadm工具配置LVS虛擬服務器、管理后端節點,無需手動執行復雜命令。
三、LVS+Keepalived集群拓撲設計
一個標準的LVS+Keepalived集群至少包含以下角色(以Web服務為例),拓撲結構如下:
[Internet] → [外網交換機] → [主調度器(MASTER)/從調度器(BACKUP)] → [內網交換機]↓[Web服務器池(節點1~節點N)] ← [NFS共享存儲]
各組件說明:
- 調度器(2臺):主調度器(如192.168.10.73)、從調度器(如192.168.10.74),共享VIP(如192.168.10.72)。
- Web節點(N臺):運行Web服務,通過NFS共享存儲保證內容一致性(如節點IP:192.168.10.77~80)。
- NFS服務器(1臺):存儲Web站點文件,避免各節點內容不一致問題(如IP:192.168.10.250)。
四、實戰部署:LVS+Keepalived集群搭建
以下部署基于CentOS 7系統,假設已配置好基礎網絡、關閉防火墻(或開放必要端口)及SELinux。
階段1:環境準備
-
安裝依賴工具:所有節點均需安裝基礎工具,調度器額外安裝ipvsadm和Keepalived。
# 所有節點安裝基礎工具 yum install -y net-tools vim# 主從調度器安裝ipvsadm和Keepalived yum install -y ipvsadm keepalived
-
配置NFS共享(僅NFS服務器操作):
# 安裝NFS服務 yum install -y nfs-utils rpcbind# 創建共享目錄并授權 mkdir -p /var/www/html chmod 777 /var/www/html# 配置exports文件 echo "/var/www/html 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports# 啟動服務并設置開機自啟 systemctl start rpcbind nfs systemctl enable rpcbind nfs
-
掛載NFS到Web節點(所有Web節點操作):
# 創建Web目錄并掛載NFS mkdir -p /var/www/html mount -t nfs 192.168.10.250:/var/www/html /var/www/html# 設置開機自動掛載 echo "192.168.10.250:/var/www/html /var/www/html nfs defaults 0 0" >> /etc/fstab
-
部署Web服務(所有Web節點操作):
# 安裝Apache yum install -y httpd# 為每個節點創建差異化測試頁面(便于后續驗證負載均衡) echo "Web Node 1 (192.168.10.77)" > /var/www/html/index.html # 節點1 echo "Web Node 2 (192.168.10.78)" > /var/www/html/index.html # 節點2 # 其余節點同理# 啟動Apache并設置開機自啟 systemctl start httpd systemctl enable httpd
階段2:配置主從調度器(核心步驟)
Keepalived的配置核心是/etc/keepalived/keepalived.conf
,主從調度器的配置差異僅在于router_id
、state
和priority
三個參數。
1. 主調度器配置(192.168.10.73)
編輯主配置文件:
vim /etc/keepalived/keepalived.conf
配置內容如下:
! Configuration File for keepalived# 全局參數配置
global_defs {router_id HA_MASTER # 主調度器標識(唯一)
}# VRRP熱備實例配置
vrrp_instance VI_1 {state MASTER # 角色:主節點interface ens33 # 承載VIP的物理網卡(根據實際網卡名修改)virtual_router_id 1 # 虛擬路由ID(主從必須一致,范圍0-255)priority 100 # 優先級(主節點需高于備節點,如100)advert_int 1 # 心跳間隔(1秒)# 認證配置(主從必須一致)authentication {auth_type PASSauth_pass 123456}# 虛擬IP(VIP)virtual_ipaddress {192.168.10.72/24 # 集群對外服務的VIP}
}# LVS虛擬服務器配置(關聯后端Web節點)
virtual_server 192.168.10.72 80 {delay_loop 6 # 健康檢查間隔(6秒)lb_algo rr # 負載均衡算法(rr:輪詢;wrr:加權輪詢;lc:最小連接)lb_kind DR # LVS工作模式(DR:直接路由模式,性能最優)persistence_timeout 50 # 會話保持時間(50秒內同一客戶端請求定向到同一節點)protocol TCP # 協議類型# 后端Web節點1配置real_server 192.168.10.77 80 {weight 1 # 權重(數值越大,分配到的請求越多)# 健康檢查方式(TCP_CHECK:端口檢查)TCP_CHECK {connect_timeout 3 # 連接超時時間(3秒)retry 3 # 重試次數delay_before_retry 3 # 重試間隔}}# 后端Web節點2配置(其余節點同理)real_server 192.168.10.78 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
2. 從調度器配置(192.168.10.74)
從調度器配置與主調度器基本一致,僅需修改3處參數:
global_defs {router_id HA_BACKUP # 從調度器標識(唯一)
}vrrp_instance VI_1 {state BACKUP # 角色:備節點interface ens33virtual_router_id 1priority 90 # 優先級(低于主節點,如90)advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.10.72/24}
}# LVS虛擬服務器配置與主調度器完全一致,此處省略
3. 啟動Keepalived服務
主從調度器均執行以下命令:
# 啟動服務
systemctl start keepalived
# 設置開機自啟
systemctl enable keepalived
# 查看服務狀態
systemctl status keepalived
階段3:配置Web節點(DR模式必需)
LVS-DR模式下,Web節點需要綁定VIP到回環網卡,并調整ARP響應參數,避免IP沖突:
- 創建配置腳本:
vim /usr/local/sbin/lvs_dr_real.sh
- 腳本內容如下:
#!/bin/bash VIP=192.168.10.72 # 綁定VIP到回環網卡 ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up # 添加路由(避免VIP數據包通過物理網卡發送) route add -host $VIP dev lo:0 # 關閉ARP響應(防止節點響應VIP的ARP請求) echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
- 執行腳本并設置開機自啟:
# 賦予執行權限 chmod +x /usr/local/sbin/lvs_dr_real.sh # 執行腳本 sh /usr/local/sbin/lvs_dr_real.sh # 添加到rc.local實現開機自啟 echo "/usr/local/sbin/lvs_dr_real.sh" >> /etc/rc.local chmod +x /etc/rc.local
五、集群測試與驗證
部署完成后,需從高可用和負載均衡兩個維度進行測試,確保集群功能正常。
1. 負載均衡測試
在客戶端瀏覽器中多次訪問http://192.168.10.72
(VIP),觀察頁面內容是否在“Web Node 1”“Web Node 2”等節點間輪詢切換——若切換,則說明LVS負載均衡生效。
也可通過調度器執行ipvsadm -lnc
命令,查看連接記錄,驗證請求是否分發到各后端節點:
ipvsadm -lnc # 查看當前連接狀態
2. 高可用(故障切換)測試
(1)主調度器故障測試
- 在主調度器上禁用網卡(模擬故障):
ifdown ens33
- 在從調度器上執行
ip addr
命令,查看是否已綁定VIP(192.168.10.72)——若綁定,則說明故障切換成功。 - 客戶端繼續訪問
http://192.168.10.72
,確認服務是否正常可用。 - 恢復主調度器網卡:
由于主調度器優先級更高,會重新搶占VIP,從調度器將釋放VIP。ifup ens33
(2)Web節點故障測試
- 停止某臺Web節點的Apache服務(模擬故障):
systemctl stop httpd
- 在調度器上執行
ipvsadm -ln
命令,查看該節點是否已被標記為“Inactive”——若標記,則說明健康檢查生效,故障節點已被剔除。 - 客戶端訪問VIP,確認請求是否不再分發到故障節點。
- 恢復Apache服務:
調度器會自動檢測到節點恢復,將其重新加入集群。systemctl start httpd
3. 日志查看
Keepalived的故障切換日志默認記錄在/var/log/messages
中,可通過以下命令查看切換過程:
tail -f /var/log/messages | grep Keepalived # 實時查看Keepalived日志
六、常見問題與解決方案
-
VIP無法漂移:
- 檢查主從調度器的
virtual_router_id
、auth_pass
是否一致。 - 確認主調度器優先級是否高于從調度器。
- 檢查防火墻是否阻止VRRP協議(VRRP使用224.0.0.18多播地址,需開放)。
- 檢查主從調度器的
-
Web節點無法訪問VIP:
- 確認Web節點的
lvs_dr_real.sh
腳本是否執行成功,lo:0接口是否綁定VIP。 - 檢查
arp_ignore
和arp_announce
參數是否設置正確。
- 確認Web節點的
-
負載均衡失效:
- 確認LVS工作模式(DR)與Web節點配置是否匹配。
- 檢查
ipvsadm
規則是否正確(可通過ipvsadm -ln
查看)。
七、總結
LVS+Keepalived集群通過“LVS負載均衡+Keepalived高可用”的雙重保障,完美解決了企業級應用的單點故障和高并發壓力問題。其核心在于VRRP協議的虛擬IP漂移機制,以及Keepalived的健康檢查能力。
在實際部署中,需注意主從調度器的配置一致性、Web節點的ARP參數調整、日志的實時監控等細節——這些細節直接決定了集群的穩定性。掌握這套方案,能為企業業務的持續運行提供堅實的技術支撐。