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



END