文章目錄
- 一、LVS-DR模式負載均衡羣集
- 1、LVS DR模式工作原理(Direct Routing)
- 1.1 數據包流向分析
- 1.2 DR模式特點
- 2、DR模式部署步驟
- 2.1 環境規劃
- 2.1.1 服務器規劃
- 2.1.2 環境架構
- 2.2 配置負載調度器(Director Server)
- 2.2.1 系統配置
- 2.2.2 配置虛擬IP
- 2.2.3 調整內核參數
- 2.2.4 配置LVS服務及調度
- 2.3 配置節點服務器(Real Server)
- 2.3.1 配置VIP到lo接口
- 2.3.2 ARP參數調整(避免MAC衝突)
- 2.3.3 安裝Web服務
- 2.4 測試LVS羣集
- 3、LVS面試知識點整理
- 3.1 LVS三種工作模式
- 3.2 LVS調度算法
- 3.2.1 固定調度算法
- 3.2.2 動態調度算法
- 3.3 Nginx vs LVS vs HAProxy區別
- 3.4 一句話總結
- 二、LVS+Keepalived羣集
- 1、概念與原理
- 1.1 Keepalived
- 1.2 VRRP工作原理
- 1.3 Keepalived主要模塊
- 2、腦裂問題與防護
- 2.1 腦裂(Split Brain)
- 2.2 腦裂原因
- 2.3 防護策略
- 3、部署步驟
- 3.1 環境準備
- 3.2 安裝與配置LVS + Keepalived
- 3.2.1 DR服務器操作
- 3.2.2 配置Keepalived
- 3.2.3 VIP配置
- 3.2.4 啓動服務
- 3.2.5 內核參數優化
- 3.3 配置Web節點
- 3.4 測試
- 3.5 小結與注意事項
一、LVS-DR模式負載均衡羣集
1、LVS DR模式工作原理(Direct Routing)
1.1 數據包流向分析
- 客户端向VIP(虛擬IP)發送請求,數據包到達Director Server內核空間。
- Director判斷目標IP為VIP,修改數據包的目標MAC為Real Server MAC、源MAC為自身MAC,IP地址保持不變後發送給Real Server。
- Real Server通過lo接口配置的VIP接收報文並處理請求,響應報文源IP為VIP、目標IP為客户端(CIP),直接發送給客户端。
- 客户端接收響應,報文不經過Director Server。
1.2 DR模式特點
- Director Server與Real Server必須在同一物理網絡。
- Real Server可使用私有或公網地址。
- Director僅作為請求入口,不作為網關。
- 所有請求經過Director,響應直接由Real Server發送。
- Real Server的網關不能指向Director Server。
- Real Server的lo接口需配置VIP。
2、DR模式部署步驟
2.1 環境規劃
2.1.1 服務器規劃
- DR服務器:192.168.10.23
- Web服務器1:192.168.10.16
- Web服務器2:192.168.10.17
- VIP:192.168.10.180
2.1.2 環境架構
DR模式LVS負載均衡羣集,客户端(192.168.10.200)通過外網路由器(網關192.168.10.1)訪問VIP(192.168.10.180),Director Server(192.168.10.23)轉發請求至兩台Real Server,響應直接由Real Server返回客户端。
2.2 配置負載調度器(Director Server)
2.2.1 系統配置
# 關閉防火牆
systemctl stop firewalld.service
# 關閉SELinux
setenforce 0
# 加載ip_vs模塊
modprobe ip_vs
# 安裝ipvsadm工具
yum -y install ipvsadm
2.2.2 配置虛擬IP
# 進入網絡腳本目錄
cd /etc/sysconfig/network-scripts/
# 複製網卡配置文件
cp ifcfg-ens33 ifcfg-ens33:0
# 編輯配置文件(內容如下)
vim ifcfg-ens33:0
# 激活虛擬網卡
ifup ens33:0
# 驗證配置
ifconfig ens33:0
ifcfg-ens33:0 配置內容:
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.2.3 調整內核參數
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加參數:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
2.2.4 配置LVS服務及調度
# 清空原有配置
ipvsadm -C
# 添加虛擬服務(VIP:80,輪詢調度)
ipvsadm -A -t 192.168.10.180:80 -s rr
# 添加Real Server節點(DR模式 -g)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
# 查看節點狀態(Route代表DR模式)
ipvsadm -ln
2.3 配置節點服務器(Real Server)
2.3.1 配置VIP到lo接口
# 進入網絡腳本目錄
cd /etc/sysconfig/network-scripts/
# 複製lo接口配置
cp ifcfg-lo ifcfg-lo:0
# 編輯配置文件(內容如下)
vim ifcfg-lo:0
# 激活接口
ifup lo:0
# 驗證配置
ifconfig lo:0
# 添加路由(綁定VIP到lo接口)
route add -host 192.168.10.180 dev lo:0
ifcfg-lo:0 配置內容:
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.3.2 ARP參數調整(避免MAC衝突)
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加參數:
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
2.3.3 安裝Web服務
# 安裝httpd(兩台Real Server均執行)
yum -y install httpd
systemctl start httpd
# 192.168.10.16 服務器配置首頁
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html
# 192.168.10.17 服務器配置首頁
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html
2.4 測試LVS羣集
# 客户端執行(或直接瀏覽器訪問 http://192.168.10.180/)
curl http://192.168.10.180/
# 多次執行,應輪詢顯示不同節點頁面內容(延遲50秒刷新)
3、LVS面試知識點整理
3.1 LVS三種工作模式
|
模式
|
原理
|
優缺點
|
|
NAT(VS/NAT)
|
Director改變數據包目標IP並轉發,RS響應包回到Director再發客户端
|
優點:節點可任意OS;缺點:Director是瓶頸
|
|
DR(VS/DR)
|
Director改變目標MAC地址,RS直接響應客户端
|
優點:Director不處理響應;缺點:節點需與Director同網段
|
|
TUN(VS/TUN)
|
Director封裝IP包到隧道,RS解封直接響應客户端
|
優點:Director不處理響應;缺點:節點需支持IP隧道
|
3.2 LVS調度算法
3.2.1 固定調度算法
- rr:輪詢,每個RS均攤請求
- wrr:加權輪詢,權重高的分配更多請求
- dh:目的地址哈希分配
- sh:源地址哈希分配
3.2.2 動態調度算法
- lc:最少連接數
- wlc:加權最少連接
- lblc:基於地址的最少連接
3.3 Nginx vs LVS vs HAProxy區別
|
特性
|
Nginx
|
LVS(Linux Virtual Server)
|
HAProxy
|
|
定位
|
Web服務器+反向代理+負載均衡
|
內核級四層負載均衡
|
專業負載均衡器(四層+七層)
|
|
工作層級
|
四層(TCP)+七層(HTTP/HTTPS)
|
四層(TCP/UDP,傳輸層)
|
四層+七層
|
|
性能
|
高(軟件級,單機可達十萬級併發)
|
極高(內核態,百萬級併發)
|
高(接近Nginx,但更專注負載均衡)
|
|
功能特點
|
靜態資源服務、反向代理、緩存、支持HTTP/HTTPS負載均衡
|
高性能轉發、調度算法豐富、內核態轉發幾乎無性能損耗
|
專注於負載均衡、健康檢查更強大、支持會話保持、SSL卸載等
|
|
健康檢查
|
簡單(TCP/HTTP)
|
依賴Keepalived或其他工具
|
強大(多協議、多方式)
|
|
配置複雜度
|
簡單
|
較複雜(需ipvsadm/keepalived配合)
|
中等(配置文件靈活)
|
|
適用場景
|
Web代理、動靜分離、中小型集羣
|
超大規模集羣、核心四層調度
|
高可用集羣、對健康檢查要求高的業務
|
|
優缺點
|
優點:功能多,易上手;缺點:七層性能不如LVS/HAProxy
|
優點:性能最強,穩定;缺點:只能四層,配置偏複雜
|
優點:專業負載均衡,健康檢查強;缺點:不自帶Web服務
|
3.4 一句話總結
- Nginx:輕量、全能,適合Web服務和中小型負載均衡。
- LVS:極致性能,適合四層超大規模集羣,但功能單一。
- HAProxy:專業負載均衡器,四層+七層均可,健康檢查能力最強。
二、LVS+Keepalived羣集
1、概念與原理
1.1 Keepalived
- 基於VRRP協議實現高可用(HA),初衷為LVS負載均衡提供高可用方案,後支持Nginx、MySQL等其他服務。
- 核心功能:LVS集羣管理、節點健康檢查(Health Check)、故障自動切換(Failover)、高可用VIP(虛擬IP)接管。
1.2 VRRP工作原理
- MASTER節點向BACKUP節點發送心跳(通告)。
- BACKUP節點收不到心跳時,接管VIP。
- MASTER恢復時,可搶回VIP(搶佔模式)或不搶回(非搶佔模式)。
- 默認多播地址:224.0.0.18,優先級決定MASTER節點(數值越大越優先)。
1.3 Keepalived主要模塊
|
模塊
|
功能
|
|
core
|
核心進程、配置文件加載解析
|
|
vrrp
|
VRRP協議實現,高可用
|
|
check
|
健康檢查,支持TCP/HTTP/腳本檢查
|
2、腦裂問題與防護
2.1 腦裂(Split Brain)
- 定義:兩個節點失去心跳連接,均認為對方掛掉。
- 後果:共享資源衝突、數據損壞(如數據庫)。
2.2 腦裂原因
- 心跳線故障(斷線、老化)。
- 網卡/驅動故障。
- 心跳網絡設備故障(網卡及交換機)。
- 仲裁機器異常。
- 防火牆阻擋VRRP心跳消息。
- 配置不一致(virtual_router_id、優先級、實例名)。
- vrrp實例名字不一致、優先級一致。
2.3 防護策略
- 雙心跳線冗餘:減少心跳線故障概率。
- 磁盤鎖(鎖定共享資源):避免共享資源爭搶,可採用“智能”鎖機制。
- 仲裁機制(Ping參考IP):通過ping網關等參考IP判斷自身網絡狀態,決定是否競爭VIP。
- 腳本監控報警:及時發現並告警腦裂問題。
3、部署步驟
3.1 環境準備
- 主DR(MASTER):192.168.10.80
- 備DR(BACKUP):192.168.10.23
- VIP:192.168.10.180
- Web節點:192.168.10.16、192.168.10.17
- 客户端:192.168.10.100
3.2 安裝與配置LVS + Keepalived
3.2.1 DR服務器操作
# 關閉防火牆
systemctl stop firewalld
# 關閉SELinux
setenforce 0
# 安裝工具
yum -y install ipvsadm keepalived
# 加載ip_vs模塊
modprobe ip_vs
# 檢查模塊
cat /proc/net/ip_vs
3.2.2 配置Keepalived
# 編輯配置文件
vim /etc/keepalived/keepalived.conf
MASTER節點 keepalived.conf 配置:
global_defs {
router_id LVS_01 # 路由ID,BACKUP節點設為LVS_02
smtp_server 127.0.0.1
}
vrrp_instance VI_1 {
state MASTER # BACKUP節點設為BACKUP
interface ens33 # 綁定網卡
virtual_router_id 10 # 虛擬路由ID,主備需一致
priority 100 # 優先級,BACKUP設為90
advert_int 1 # 心跳間隔1秒
authentication {
auth_type PASS
auth_pass abc123 # 認證密碼,主備需一致
}
virtual_ipaddress {
192.168.10.180 # VIP地址
}
}
virtual_server 192.168.10.180 80 {
delay_loop 6 # 健康檢查間隔
lb_algo rr # 調度算法(輪詢)
lb_kind DR # 負載均衡模式(DR)
persistence_timeout 50 # 會話保持時間
protocol TCP # 協議
real_server 192.168.10.16 80 {
weight 1 # 權重
TCP_CHECK {
connect_port 80 # 檢查端口
connect_timeout 3 # 超時時間
nb_get_retry 3 # 重試次數
delay_before_retry 3 # 重試間隔
}
}
real_server 192.168.10.17 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3.2.3 VIP配置
# 編輯虛擬網卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 重啓網絡
systemctl restart network
# 激活網卡
ifup ens33:0
ifcfg-ens33:0 配置內容:
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
3.2.4 啓動服務
# 啓動keepalived
systemctl start keepalived
# 查看VIP(確認是否綁定)
ip addr
# 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm
# 啓動ipvsadm
systemctl start ipvsadm
# 查看LVS配置
ipvsadm -ln
3.2.5 內核參數優化
# 編輯sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加參數:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
3.3 配置Web節點
# 關閉防火牆
systemctl stop firewalld
# 關閉SELinux
setenforce 0
# 安裝httpd
yum -y install httpd
# 啓動httpd
systemctl start httpd
# 192.168.10.16 配置首頁
echo 'this is kgc web!' > /var/www/html/index.html
# 192.168.10.17 配置首頁
echo 'this is benet web!' > /var/www/html/index.html
# 配置lo:0接口(同DR模式Real Server配置)
# 配置ARP參數(同前)
3.4 測試
# 1. 客户端訪問VIP,驗證服務
curl http://192.168.10.180/
# 2. 停掉MASTER的Keepalived,觀察BACKUP是否接管VIP
systemctl stop keepalived # MASTER節點執行
ip addr # BACKUP節點執行,查看VIP是否出現
# 3. 啓動MASTER的Keepalived,觀察VIP是否迴歸
systemctl start keepalived # MASTER節點執行
ip addr # MASTER節點執行,查看VIP是否迴歸
3.5 小結與注意事項
|
項目
|
注意點
|
|
VIP
|
DR節點配置VIP網卡ens33:0,Web節點配置lo:0
|
|
搶佔模式
|
MASTER恢復會搶回VIP,非搶佔模式需配置nopreempt
|
|
健康檢查
|
Keepalived支持TCP/HTTP檢查,可防止故障節點被調度
|
|
防火牆
|
Firewalld需關閉,確保VRRP心跳消息暢通
|
|
腦裂防護
|
採用雙心跳線、磁盤鎖、仲裁IP、腳本監控等策略
|