1. LVS 簡(jiǎn)介
1.1 什么是LVS
LVS(Linux Virtual Server) 是一個(gè)高度可擴(kuò)展且高可用的服務(wù)器, 構(gòu)建在真實(shí)服務(wù)器集群上的, load balancer(負(fù)載均衡) 在linux 操作系統(tǒng)上運(yùn)行, 服務(wù)器集群的體系結(jié)構(gòu)對(duì)用戶透明, 并且用戶就像是在于 單個(gè)高性能的虛擬服務(wù)器交互一樣,
1.2 服務(wù)器集群系統(tǒng)
傳統(tǒng)的沒(méi)有集群的的服務(wù)器 如果性能不足, 就需要使用 '對(duì)稱多處理'(Symmetric Multi-Processor 簡(jiǎn)稱SMP) 是由多個(gè)CPU, 和通過(guò)總線共享的內(nèi)存和I/O 部件組成的計(jì)算機(jī)系統(tǒng), SMP 是一種低并行的結(jié)構(gòu), 是通常所說(shuō)的'緊耦合多處理系統(tǒng)', 該系統(tǒng)的可擴(kuò)展能力是有限的, 優(yōu)點(diǎn)是 單一的系統(tǒng), 有共享的內(nèi)存和I/O, 且易編程.
由于SMP 擴(kuò)展能力有限, SMP 不能夠滿足高可升縮, 高可用網(wǎng)絡(luò)服務(wù)中 負(fù)載能力不斷增長(zhǎng)需求. 隨著負(fù)載增長(zhǎng), 會(huì)導(dǎo)致服務(wù)器不斷升級(jí),
- 這種服務(wù)器有以下幾種不足:
- 升級(jí)繁瑣, 機(jī)器切換會(huì)使服務(wù)中, 并且原有計(jì)算資源浪費(fèi)
- 越高端單服務(wù)器, 升級(jí)花費(fèi)越大
- SMP 服務(wù)器 發(fā)生單點(diǎn)故障(Single Point of Failure)時(shí), 服務(wù)器或應(yīng)用軟件失效, 導(dǎo)致整個(gè)服務(wù)中斷.
通過(guò)高性能網(wǎng)絡(luò)或局域網(wǎng)服務(wù)器幾圈稱為高可升縮, 高可用網(wǎng)絡(luò)服務(wù)的有效結(jié)構(gòu),
- 這種松耦合的服務(wù)器集群的有點(diǎn):
- 性能: 網(wǎng)絡(luò)服務(wù)工作負(fù)載通常是大量相互獨(dú)立的任務(wù), 通過(guò)一組服務(wù)器分別操作, 可以獲得很高的性能
- 性價(jià)比: 通過(guò)組 服務(wù)器集群可以使用大規(guī)模的低成本的服務(wù)器.
- 可伸縮性: 集群系統(tǒng)中節(jié)點(diǎn)數(shù)目可以增長(zhǎng)到成千上萬(wàn)個(gè), 伸縮性遠(yuǎn)超過(guò)單個(gè)超級(jí)計(jì)算機(jī).
- 高可用性: 在硬件和軟件上都有冗余, 通過(guò)檢測(cè)硬件故障, 將故屏蔽, 由存活節(jié)點(diǎn)提供服務(wù), 實(shí)現(xiàn)服務(wù)的高可用性.
- 服務(wù)器集群系統(tǒng)可以實(shí)現(xiàn)可伸縮性服務(wù)也存在很多需要的操作.
- 透明性(Transperncy)
- 如果高效的使用多個(gè)獨(dú)立服務(wù)器組成松耦合的集群系統(tǒng)構(gòu)建成一個(gè)虛擬的服務(wù)器, 客戶端在于集群交互式, 需要感受像是在與一臺(tái)高性能服務(wù)器交互一樣, 客戶端不需要任何修改, 部分服務(wù)的切入和切出 不會(huì)中斷服務(wù).
- 性能(Performance)
- 性能需要線性提升, 需要設(shè)計(jì)很好的軟硬件體系結(jié)構(gòu), 消除系統(tǒng)性能提升時(shí)的瓶頸, 降幅在劇呢很難過(guò)調(diào)度到各個(gè)服務(wù)器上,
- 高可用性(Availability)
- 需要設(shè)計(jì)實(shí)現(xiàn)很好的系統(tǒng)資源和故障的檢測(cè)和處理系統(tǒng), 發(fā)現(xiàn)一個(gè)模塊失敗時(shí), 要這個(gè)模塊上提供服務(wù)遷移到其他模塊上理想狀態(tài)下, 這種遷移是 實(shí)時(shí), 自動(dòng)的.
- 可管理性(Manageability)
- 需要使系統(tǒng)易管理, 就像管理單一系統(tǒng)一樣,
- 透明性(Transperncy)
1.3 IP 蓄力服務(wù)器軟件IPVS
在調(diào)度器實(shí)現(xiàn)技術(shù)中, IP 負(fù)載均衡技術(shù)是效率最高的, 在已有的IP 負(fù)載均衡技術(shù)中 有通過(guò)負(fù)載均衡技術(shù)中 又通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換 NAT(Network Address Translation) 將一組服務(wù)器構(gòu)建成一個(gè)高性能, 高可用的虛擬服務(wù)器, 稱為 VS/NAT 技術(shù), 大多數(shù)商業(yè)化的IP 負(fù)載均衡調(diào)度都是使用該方法, 如 LocalDirector, F5的 Big/IP 等等.
由于NAT 缺點(diǎn)和網(wǎng)絡(luò)非對(duì)稱性, 就有了通過(guò)IP隧道的方法 VS/TUN(IP Tunneling), 和通過(guò)直接路由 實(shí)現(xiàn)虛擬服務(wù)器的方法 VS/DR(Direct Routing), 可以極大提升系統(tǒng)的伸縮性, 所以IPVS 軟件實(shí)現(xiàn)了這三種IP 負(fù)載均衡技術(shù), 原理如下:
-
Virtual Server via Network Address Translation(VA/NAT)
- 通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換, 調(diào)度器重寫(xiě)請(qǐng)求報(bào)文的目標(biāo)地址, 根據(jù)設(shè)定的調(diào)度算法, 將請(qǐng)求分配到后端真實(shí)服務(wù)器上, 真實(shí)服務(wù)器的響應(yīng)報(bào)文通過(guò)調(diào)度器時(shí), 報(bào)文源地址會(huì)被重寫(xiě), 返回給客戶端, 完成負(fù)載調(diào)度過(guò)程.
-
Virtual Server via IP Tunneline(VS/TUN)
- 采用NAT 技術(shù)時(shí)由于請(qǐng)求和響應(yīng)報(bào)文都需要經(jīng)過(guò)調(diào)度器重寫(xiě), 客戶端請(qǐng)求越來(lái)越多時(shí), 調(diào)度器的處理能力會(huì)稱為系統(tǒng)瓶頸, 為解決該問(wèn)題, 調(diào)度器會(huì)把請(qǐng)求報(bào)文通過(guò)隧道發(fā)到真實(shí)服務(wù)器, 而真實(shí)服務(wù)器直接返回給客戶端, 調(diào)度器只處理了請(qǐng)求報(bào)文, 一般服務(wù)器響應(yīng)報(bào)文會(huì)比請(qǐng)求報(bào)文大很多, 所以采用 VS/TUN 技術(shù), 集群的吞吐量可以提高很多倍.
-
Virtual Server via Direct Routing(VS/DR)
- VS/DS 通過(guò)改寫(xiě)請(qǐng)求報(bào)文的MAC 地址. 將請(qǐng)求發(fā)送到真實(shí)服務(wù)器, 二診室服務(wù)IQ響應(yīng)直接返回給客戶端, 和 VS/TUN技術(shù)一樣, VS/DR 技術(shù)可以極大提高集群系統(tǒng)的伸縮性, 這種發(fā)發(fā)沒(méi)有VS/TUN 的開(kāi)銷, 隊(duì)及群眾真實(shí)服務(wù)器也米誒有必要的 IP 隧道協(xié)議要求, 但是要求的是 調(diào)度器與真實(shí)服務(wù)器必須在同一個(gè)網(wǎng)段中.
1.4 LVS 調(diào)度器 負(fù)載輪詢算法
-
輪詢(Round Robin)
- 調(diào)度器通過(guò)'輪詢' 算法將外度請(qǐng)求順序輪流分配到真實(shí)服務(wù)器上, 均勻的對(duì)待每一個(gè)服務(wù)器, 不管其實(shí)際連接數(shù) 或者系統(tǒng)負(fù)載.
-
加權(quán)輪詢(Weighted Round Robin)
- 調(diào)度器通過(guò) '加權(quán)輪詢' 調(diào)度算法根據(jù)真實(shí)服務(wù)器不同的處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求. 可以保證處理更多的訪問(wèn)流量, 調(diào)度器可以自動(dòng)詢問(wèn)真實(shí)服務(wù)器的負(fù)載情況, 并動(dòng)態(tài)調(diào)節(jié)其權(quán)值.
-
最少連接數(shù)(Laster Connections)
- 調(diào)度器通過(guò)'最少連接數(shù)' 調(diào)度算法動(dòng)態(tài)將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接最少的服務(wù)器上, 如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能, 采用'最小鏈接'算法可以較高的均衡負(fù)載.
-
加權(quán)最少連接(Weighted Laster Connections)
- 在集群系統(tǒng)中如果服務(wù)器性能差異較大, 調(diào)度器采用'加權(quán)最少連接' 調(diào)度算法可以優(yōu)化 負(fù)載均衡性能, 調(diào)度器可以自動(dòng)詢問(wèn)真實(shí)服務(wù)器負(fù)載情況, 并動(dòng)態(tài)調(diào)整權(quán)值.
-
基于局部性的最小連接(Locality-Based Least Connections)
- 該調(diào)度算法是針對(duì)目標(biāo)IP 地址的負(fù)載均衡, 目前主要用于Cache 集群, 該算法根據(jù)請(qǐng)求的目標(biāo)IP最近使用的服務(wù)器, 如果該服務(wù)器時(shí)可用的, 并且沒(méi)有超載, 那么將會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到該服務(wù)器, 如果服務(wù)器不存在, 或者服務(wù)器超載, 則采用'最少連接'原則.
-
帶復(fù)制的基于局部的最少連接(Locality-Based Least Connections with Replication)
- 該算法也是針對(duì)目標(biāo)IP 地址的負(fù)載均衡, 目前用于 Cache 集群系統(tǒng)中, 和 LBLC 不同的是它 要維護(hù)一個(gè)目標(biāo)IP 地址到一組服務(wù)器的映射, 而LBLC 維護(hù)的是一個(gè)目標(biāo)IP 地址到到一臺(tái)服務(wù)器的映射, 如果服務(wù)器沒(méi)有超載, 將請(qǐng)求發(fā)送到服務(wù)器, 如果服務(wù)器超載則 按照 最小連接.
-
目標(biāo)地址散列(Destination Hashing)
- 該算法根據(jù)請(qǐng)求目標(biāo)IP 地址, 作為散列鍵(Hash Key) 從靜態(tài)分配找到對(duì)應(yīng)的服務(wù)器, 如果該服務(wù)器可用, 就會(huì)將請(qǐng)求發(fā)送到該服務(wù)器.
-
源地址散列(Source Hashing)
- 該算法是根據(jù)源IP 地址, 作為散列鍵(Hash Key)
1.5 LVS 體系結(jié)構(gòu)
LVS 設(shè)計(jì)時(shí)考慮到系統(tǒng)的透明性, 可伸縮性, 高可用性, 易管理性, 采用了三層結(jié)構(gòu)
- 負(fù)載調(diào)度器(Load Balancer), 是整個(gè)系統(tǒng)對(duì)外的前端機(jī), 負(fù)責(zé)將客戶的請(qǐng)求發(fā)送到一組服務(wù)器上執(zhí)行, 讓客戶認(rèn)為是來(lái)自一個(gè)IP 地址的(稱為VIP)
-服務(wù)器池(Server pool), 一組正真執(zhí)的客戶請(qǐng)求的服務(wù)器, 執(zhí)行的服務(wù)器有 Web, Mail, FTP, DNS 都可以. - 共享存儲(chǔ)(shared storage), 為服務(wù)器池提供一個(gè)共享的存儲(chǔ)區(qū), 這樣很容易讓服務(wù)器擁有相同的內(nèi)容, 提供相同的服務(wù). 如數(shù)據(jù)庫(kù).
2. LVS 集群的搭建(VS/NAT)
2.1 環(huán)境說(shuō)明
主機(jī)名 IP地址 軟件
node10009 192.168.10.9 LVS
192.168.20.9
node10011 192.168.20.11 nginx
node10012 192.168.20.12 nginx
VIP 192.168.10.3
2.2 安裝ipvsadm 工具
[fangfc@node10009 ~]$ sudo yum -y install ipvsadm
....
Installed:
ipvsadm.x86_64 0:1.27-7.el7
Complete!
[fangfc@node10009 ~]$
- ipvs 工具是一個(gè)LVS 的管理工具,
- 常用參數(shù):
-A --Add-service 在內(nèi)核的虛擬服務(wù)器表中添加一條新的虛擬服務(wù)器記錄, 新增一臺(tái)新的虛擬服務(wù)器
-E --edit-service 編輯內(nèi)核虛擬服務(wù)器表中的一條虛擬服務(wù)器記錄
-D --delete-service 刪除 虛擬服務(wù)器表 中的一條記錄
-C --clear 清除 所有記錄
-R --restore 恢復(fù) 規(guī)則(恢復(fù)到上一次保存)
-S --save 保存 規(guī)則,
-a --add-server 新怎一條 真實(shí)服務(wù)器 的記錄(增加一臺(tái)真實(shí)服務(wù)器)
-e --edit-server 編輯一條 真實(shí)服務(wù)器記錄
-d --delete-server 刪除一條 真實(shí)服務(wù)器記錄
-L/-l --list 顯示列表
-n --numberic 數(shù)字形式顯示端口號(hào)
-c --connection 顯示ipvs 目前存在的連接, 也可以用于分析調(diào)度情況
-Z --zero 將轉(zhuǎn)發(fā)消息統(tǒng)計(jì)清零
-p --persistent 配置持久化時(shí)間
--set top tcp udp 配置三個(gè)時(shí)間
-r --real-server 真實(shí)的服務(wù)器
-t/-u tcp/udp 協(xié)議的虛擬服務(wù)
-g/-m/-i LVS 模式 DR/NAT/TUN
-w 配置真實(shí)服務(wù)器的權(quán)重
-s 配置負(fù)載均衡算法, 如 rr, wrr, lc
--timeout 顯示配置的 超時(shí)時(shí)間
--stats 顯示歷史轉(zhuǎn)發(fā)消息統(tǒng)計(jì)(累加值)
--rate 顯示轉(zhuǎn)發(fā)速率信息(瞬時(shí))
2.3 集群搭建
- LB 上設(shè)置
- 搭建步驟
1. 在 eth0 綁定網(wǎng)卡 VIP 地址
2. 清除當(dāng)前LVS規(guī)則
3. 設(shè)置 tcp, tcpfin, udp 鏈接超時(shí)時(shí)間
4. 添加虛擬服務(wù), -t指定虛擬服務(wù)的IP 端口, -s 指定調(diào)度算法,
5. 將虛擬服務(wù)關(guān)聯(lián)到真實(shí)服務(wù)上,
- 配置VIP地址
[root@node10009 ~]# ip addr add 192.168.10.3/24 dev ens33
[root@node10009 ~]# ip a s ens33 | grep inet
inet 192.168.10.9/24 brd 192.168.10.255 scope global ens33
inet 192.168.10.3/24 scope global secondary ens33
inet6 fe80::20c:29ff:fe8f:4e4a/64 scope link
[root@node10009 ~]#
- 配置轉(zhuǎn)發(fā)
[root@node10009 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@node10009 ~]# vim /etc/sysctl.conf
- 配置lvs
[root@node10009 ~]# ipvsadm -C
[root@node10009 ~]# ipvsadm --set 30 5 60
[root@node10009 ~]# ipvsadm -A -t 192.168.10.3:80 -s rr -p 20
[root@node10009 ~]# ipvsadm -a -t 192.168.10.3:80 -r 192.168.10.11:80 -m
[root@node10009 ~]# ipvsadm -a -t 192.168.10.3:80 -r 192.168.10.12:80 -m
[root@node10009 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.3:80 rr persistent 20
-> 192.168.10.11:80 Masq 1 0 0
-> 192.168.10.12:80 Masq 1 0 0
[root@node10009 ~]#
- Real Server 設(shè)置
- 所有的 Real Server 配置DR 模式都需要 配置 網(wǎng)關(guān)為 LB 的內(nèi)網(wǎng)ip
- node10011
[fangfc@node10011 ~]$ ip route
default via 192.168.20.9 dev ens34 proto static metric 100
192.168.20.0/24 dev ens34 proto kernel scope link src 192.168.20.11 metric 100
[fangfc@node10011 ~]$
[fangfc@node10011 ~]$ ip a show ens34 | grep inet
inet 192.168.20.11/24 brd 192.168.20.255 scope global noprefixroute ens34
inet6 fe80::5a3a:3ec1:9021:6f0c/64 scope link noprefixroute
[fangfc@node10011 ~]$
- node10012
[root@node10012 ~]# ip route
default via 192.168.20.9 dev ens34 proto static metric 100
192.168.20.0/24 dev ens34 proto kernel scope link src 192.168.20.12 metric 100
[root@node10012 ~]# ip a show ens34 | grep inet
inet 192.168.20.12/24 brd 192.168.20.255 scope global noprefixroute ens34
inet6 fe80::dcae:3aca:a26:ea64/64 scope link noprefixroute
[root@node10012 ~]#
2.4 測(cè)試



END