目錄
引言
一、實驗環境準備
二、理論基礎:集群與 LVS 核心原理
2.1 集群與分布式
2.2 LVS 核心原理
LVS 的 4 種工作模式
LVS 調度算法
三、LVS 部署工具:ipvsadm 命令詳解
四、實戰案例:LVS 部署詳解
案例 1:NAT 模式集群部署
環境說明
配置步驟
案例 2:DR 模式集群部署
環境說明
配置步驟
1.在客戶端主機中為nat模式網卡:
2.?在路由主機中設定雙網卡,eth0為nat網卡,eth1為僅主機網卡
3.對于dr調度器設定網卡為僅主機模式??
?4.對于RS1的設定網卡為僅主機模式
?5.對于RS2中的網絡設定
解決vip響應問題
配置詳情
1.配置要點
?2.在lvs 和 rs 中設定vip
?3.在RS1和RS2中解決響應問題
4.在lvs中配置策略
?5.測試效果
三、總結
引言
在高并發業務場景中,單臺服務器往往難以承載大量的訪問請求,此時集群技術成為提升系統性能與可用性的關鍵。LVS(Linux Virtual Server,Linux 虛擬服務器)作為 Linux 內核集成的負載均衡技術,能夠將請求高效分發到多臺真實服務器,實現負載均衡。本文將從理論到實戰,詳細介紹 LVS 集群技術,包括核心原理、部署命令及多個實戰案例,助你快速掌握 LVS 的應用。
一、實驗環境準備
在開始 LVS 部署前,需準備以下實驗環境(可根據實際情況調整主機數量和 IP):
主機名 | 角色 | 說明 |
server1 | 調度器(VS) | 負責請求調度,需配置 VIP:192.168.2.100(虛擬 IP)和 DIP:192.168.186.100(調度器內網 IP) |
server2 | 真實服務器(RS1) | 提供實際服務(如 Web),配置 RIP(真實服務器 IP)192.168.186.10 |
server3 | 真實服務器(RS2) | 同 server2? IP地址:192.168.186.20 |
server4 | 測試機 | 模擬客戶端,用于測試負載均衡效果? IP地址:192.168.2.111 |
二、理論基礎:集群與 LVS 核心原理
2.1 集群與分布式
- 集群(Cluster):多臺計算機組合成的單個系統,用于解決特定問題,常見類型包括:
-
- 負載均衡(LB):請求分發到多臺主機,分攤負載;
-
- 高可用(HA):避免單點故障(SPOF),提升服務可用性;
-
- 高性能計算(HPC):專注大規模計算(本文不涉及)。
- 分布式:將業務拆分為多個子業務,部署在多臺服務器,每臺服務器功能不同,組合實現完整業務。
- 區別:集群通過提升單位時間處理任務數提升效率,分布式通過縮短單個任務時間提升效率。
2.2 LVS 核心原理
LVS 由調度器(VS)和真實服務器(RS)組成,VS 根據調度算法將客戶端請求分發到 RS,核心術語包括:
- VIP:VS 對外提供服務的 IP;
- DIP:VS 內網 IP,用于與 RS 通信;
- RIP:RS 的 IP;
- CIP:客戶端 IP。
LVS 的 4 種工作模式
- NAT 模式(lvs-nat):
-
- 原理:修改請求報文的目標 IP(多目標 DNAT),請求和響應均經過 VS;
-
- 特點:RS 網關需指向 DIP,支持端口映射,但 VS 可能成為瓶頸。
- DR 模式(lvs-dr):
-
- 原理:通過封裝新 MAC 地址轉發請求,請求經 VS,響應由 RS 直接發往客戶端;
-
- 特點:VS 和 RS 需配置相同 VIP,不支持端口映射,性能高(默認模式)。
- TUN 模式(lvs-tun):
-
- 原理:原 IP 報文外封裝新 IP 首部(源 DIP,目標 RIP),響應由 RS 直接發往客戶端;
-
- 特點:支持跨網絡部署,需公網 IP,RS 需支持隧道功能。
- FULLNAT 模式:
-
- 原理:修改請求報文的源 IP 和目標 IP,請求和響應均經過 VS;
-
- 特點:內核默認不支持,RIP 與 DIP 可不在同一網絡。
LVS 調度算法
- 靜態算法(不考慮 RS 負載):
-
- RR(輪詢):請求依次分發到各 RS;
-
- WRR(加權輪詢):按權重分配,性能高的 RS 承擔更多請求;
-
- SH(源地址哈希):同一客戶端請求固定到同一 RS(會話綁定)。
- 動態算法(考慮 RS 負載):
-
- WLC(加權最少連接):默認算法,根據活躍連接數和權重分配;
-
- SED(最短預期延遲):高權重 RS 優先承接新請求;
-
- FO(加權故障轉移):用于灰度發布,優先調度未過載的高權重 RS。
三、LVS 部署工具:ipvsadm 命令詳解
ipvsadm 是 LVS 的管理工具,用于配置集群服務和 RS,核心命令如下:
功能 | 命令示例 | 說明 |
添加集群服務 | ipvsadm -A -t VIP:80 -s rr | 添加 TCP 服務(VIP:80),調度算法為輪詢(rr) |
添加 RS | ipvsadm -a -t VIP:80 -r RIP:80 -m | 為集群服務添加 RS(RIP:80),模式為 NAT(-m) |
修改配置 | ipvsadm -E -t VIP:80 -s wrr | 將調度算法修改為加權輪詢(wrr) |
刪除 RS | ipvsadm -d -t VIP:80 -r RIP:80 | 從集群服務中刪除指定 RS |
查看配置 | ipvsadm -Ln | 顯示集群配置(-n:不解析域名) |
保存規則 | ipvsadm -Sn > /etc/sysconfig/ipvsadm | 保存當前配置到文件 |
?
四、實戰案例:LVS 部署詳解
案例 1:NAT 模式集群部署
環境說明
- VS(server1):VIP=192.168.2.100(外網),DIP=192.168.186.100(內網);
- RS1(server2):RIP=192.168.186.10,網關指向 DIP;
- RS2(server3):RIP=192.168.186.20,網關指向 DIP;
- 測試機(server4):192.168.2.111模擬外網客戶端。
配置步驟
- VS 啟用內核路由:
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/99-ip_forward.conf
[root@lvs ~]# sysctl --system # 生效配置
??
??
【解釋】:NAT 模式需要 VS 轉發報文,需開啟 IP 轉發。
- 安裝 ipvsadm:
[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# systemctl enable --now ipvsadm # 開機自啟
- 配置集群服務和 RS:
# 添加集群服務(VIP:80,輪詢算法)[root@lvs ~]# ipvsadm -A -t 192.168.2.100:80 -s rr# 添加RS1(NAT模式)[root@lvs ~]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.186.10:80 -m# 添加RS2(NAT模式)[root@lvs ~]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.186.20:80 -m
?
- 測試驗證:
在測試機執行多次請求,觀察輪詢效果:
for N in {1..6};do curl 192.168.2.100;done
?
預期結果:交替返回 RS1 和 RS2 的響應。
案例 2:DR 模式集群部署
環境說明
主機名 | IP | VIP | 角色 |
DR_client | 192.168.2.111 | null | 測試主機 |
route | NAT-eth0:192.168.2.100, 僅主機-eth1:192.168.186.100 | null | 路由器 |
lvs | 192.168.186.200, GW:192.168.186.100 | lo:192.168.186.254 | 調度器 |
RS1 | 192.168.186.10, GW:192.168.186.100 | lo:192.168.186.254 | web服務器1 |
RS2 | 192.168.186.20, GW:192.168.186.200 | lo:192.168.186.254 | web服務器2 |
配置步驟
1.在客戶端主機中為nat模式網卡:
[root@client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.2 0.0.0.0 UG 100 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
2.?在路由主機中設定雙網卡,eth0為nat網卡,eth1為僅主機網卡
#對于eth0的設定
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.2.100/24,192.168.2.2
dns=8.8.8.8#對于eth1的設定
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection [connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
method=manual
address1=192.168.186.100/24,192.168.2.2
dns=8.8.8.8
?
3.對于dr調度器設定網卡為僅主機模式 ?
[root@lvs-dr ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.186.200/24,192.168.186.100
address2=192.168.186.254/24
dns=8.8.8.8
?4.對于RS1的設定網卡為僅主機模式
[root@rs1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.186.10/24,192.168.186.100
dns=8.8.8.8
?
?5.對于RS2中的網絡設定
[root@rs2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.186.20/24,192.168.186.100
dns=8.8.8.8
解決vip響應問題
DR模型中各主機上均需要配置VIP,解決地址沖突的方式有三種:(1)在前端網關做靜態綁定(2)在各RS使用arptables(3)在各RS修改內核參數,來限制arp響應和通告的級別限制響應級別:arp_ignore0:默認值,表示可使用本地任意接口上配置的任意地址進行響應1:僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應限制通告級別:arp_announce0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告1:盡量避免將接口信息向非直接連接網絡進行通告2:必須避免將接口信息向非本網絡進行通告
配置詳情
1.配置要點
1.Director服務器采用雙IP橋接網絡,一個是VPP,一個DIP2.Web服務器采用和DIP相同的網段和Director連接3.每個Web服務器配置VIP4.每個web服務器可以出外網
?2.在lvs 和 rs 中設定vip
#lvs
[root@lvs-dr ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.186.200/24,192.168.186.100
address2=192.168.186.254/24
dns=8.8.8.8
#RS1
[root@rs1 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection [connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.186.254/32
#RS2
[root@rs2 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection [connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.186.254/32
?3.在RS1和RS2中解決響應問題
#RS1
[root@rs1 ~]# echo net.ipv4.conf.all.arp_ignore =1 >> /etc/sysctl.conf
[root@rs1 ~]# echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
[root@rs1 ~]# echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
[root@rs1 ~]# echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf
?
#RS2
[root@rs2 ~]# echo net.ipv4.conf.all.arp_ignore =1 >> /etc/sysctl.conf
[root@rs2 ~]# echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
[root@rs2 ~]# echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
[root@rs2 ~]# echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf
4.在lvs中配置策略
#lvs
[root@lvs-dr ~]# ipvsadm -A -t 192.168.186.254:80 -s rr
[root@lvs-dr ~]# ipvsadm -a -t 192.168.186.254:80 -r 192.168.186.10:80 -g
[root@lvs-dr ~]# ipvsadm -a -t 192.168.186.254:80 -r 192.168.186.20:80 -g
?
?5.測試效果
三、總結
LVS 作為高性能的負載均衡技術,通過不同工作模式(NAT/DR/TUN)和調度算法,可靈活應對各種業務場景。本文通過 4 個實戰案例,從基礎部署到問題解決,詳細演示了 LVS 的配置過程。實際應用中,需根據業務需求選擇合適的模式(如 DR 模式適合高并發場景),并結合監控工具(如 ipvsadm 統計)優化調度策略。
希望本文能幫助你快速掌握 LVS 集群技術,歡迎在評論區交流部署過程中遇到的問題!