企業級調度器LVS(LVS-NAT;LVS-DR負載均衡群集部署)
- 企業級調度器LVS(Linux Virtual Server)
- 集群和分布式
- 1.1 集群 Cluster
- 1.2 分布式系統
- 1.3 集群和分布式
- 1.4 集群設計原則
- 1.5 集群設計實作
- 1.5.1 基礎設施層面
- 1.5.2 業務層面
- 1.6 LB Cluster 負載均衡集群
- 1.6.1 按實作方式劃分
- 1.6.2 基于作業的協議層次劃分
- 1.6.3 負載均衡的會話保持
- 1.7 HA Cluster 高可用集群實作
- 1.8 HPC Cluster 高性能運算群集
- Linux Virtual Server簡介
- 2.1 LVS介紹
- 2.2 LVS作業原理
- 2.3 LVS集群體系架構
- 2.4 LVS功能及組織架構
- 2.4.1 應用于高訪問量的業務
- 2.4.2 擴展應用程式
- 2.4.3 消除單點故障
- 2.4.4 同城容災(多可用區容災)
- 2.4.5 跨地域容災
- 2.5 LVS集群型別中的術語
- LVS 作業模式和相關命令
- 3.1 LVS集群的作業模式
- 3.1.1 LVS的NAT模式
- 3.1.2 LVS的DR模式
- 3.1.3 LVS的TUN模式
- 3.1.4 LVS的FULLNAT模式
- 3.1.5 LVS作業模式總結和比較
- LVS 調度演算法
- 4.1 靜態方法
- 4.2 動態方法
- 4.3 內核版本4.15版本后新增調度演算法:FO和OVF
- LVS 相關軟體
- 5.1 程式包:ipvsadm
- 5.2 ipvsadm 命令
- LVS實戰案例
- 6.1 LVS-NAT模式案例
- 6.2 LVS-DR模式案例
- 準備作業
- 配置網卡
- 配置nfs服務
- 配置lvs調度器
- 配置節點服務器
- 6.3 LVS-DR模式 使用腳本更簡單的實作方法
- LVS配置
- 節點配置
企業級調度器LVS(Linux Virtual Server)
- 集群概念
- LVS模型
- LVS調度演算法
- LVS實作
集群和分布式
系統性能擴展方式:
- Scale UP:垂直擴展,向上擴展,增強,性能更強的計算機運行同樣的服務
- Scale Out:水平擴展,向外擴展,增加設備,并行地運行多個服務調度分配問題,Cluster
隨著計算機性能的增長,其價格會成倍增長
單臺計算機的性能是有上限的,不可能無限制地垂直擴展
多核CPU意味著即使是單臺計算機也可以并行的,
1.1 集群 Cluster
Cluster:集群,為解決某個特定問題將多臺計算機組合起來形成的單個系統
Cluster分為三種型別:
-
LB: Load Balancing,負載均衡,多個主機組成,每個主機只承擔一部分訪問請求
-
HA:High Availiablity,高可用,避免SPOF (single Point Of failure)
- MTBF:Mean Time Between Failure 平均無故障時間,正常時間
- MTTR:Mean Time To Restoration ( repair)平均恢復前時間,故障時間
- A=MTBF/ (MTBF+MTTR)(0,1): 99%,99.5%,99.9%,99.99%,99.999%
-
SLA:服務等級協議(簡稱: SLA,全稱: service level agreement),是在一定開銷下為保障服務的性能和可用性,服務提供商與用戶間定義的一種雙方認可的協定,通常這個開銷是驅動提供服務質量的主要因素,在常規的領域中,總是設定所謂的三個9,四個9來進行表示,當沒有達到這種水平的時候,就會有一些列的懲罰措施,而運維,最主要的目標就是達成這種服務水平,
1年 = 365天 = 8760小時
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小時
99.99 = 876 * 0.0001 = 0.876小時 = 0.876 * 60 = 52.6分鐘
99.999 = 8760 * 0.00001 = 0.0876小時 = 0.0876 * 60 = 5.26分鐘
停機時間又分為兩種,一種是計劃內停機時間,一種是計劃外停機時間,而運維則主要關注計劃外停機時間,
- HPC:Hgih-performance computing,高性能 超級計算機
1.2 分布式系統
? 分布式存盤: Ceph,GlusterFS,FastDFS,MogileFs
? 分布式計算: hadoop,Spark
? 分布式常見應用
- 分布式應用-服務按照功能拆分,使用微服務
- 分布式靜態資源–靜態資源放在不同的存盤集群上
- 分布式資料和存盤–使用key-value快取系統
- 分布式計算–對特殊業務使用分布式計算,比如Hadoop集群
1.3 集群和分布式
集群:同一個業務系統,部署在多臺服務器上,集群中,每一臺服務器實作的功能沒有差別,資料和代碼都是一樣的
分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上,分布式中,每一臺服務器實作的功能是有差別的,資料和代碼也是不一樣的,分布式每臺服務器功能加起來,才是完整的業務
分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率,
對于大型網站,訪問用戶很多,實作一個群集,在前面部署一個負載均衡服務器,后面幾臺服務器完成同一業務,如果有用戶進行相應業務訪問時,負載均衡器根據后端哪臺服務器的負載情況,決定由給哪一臺去完成回應,并且一臺服務器垮了,其它的服務器可以頂上來,分布式的每一個節點,都完成不同的業務,如果一個節點垮了,那這個業務可能就會失敗
1.4 集群設計原則
可擴展性 集群的橫向擴展能力
可用性 無故障時間
性能 訪問回應時間
容量 單位時間內的最大并發吞吐量(C10K 并發問題)
1.5 集群設計實作
1.5.1 基礎設施層面
提升硬體資源性能 從入口防火墻到后端web server均使用更高性能的硬體資源
多域名—DNS輪詢A記錄決議
多入口一將A記錄決議到多個公網IP入口
多機房―同城+異地容災
CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)實作全域負載均衡,如:DNS
1.5.2 業務層面
分層:安全層、負載層、靜態層、動態層、(快取層、存盤層)持久化與非持久化
分割:基于功能分割大業務為小服務
分布式:對于特殊場景的業務,使用分布式計算
1.6 LB Cluster 負載均衡集群
- 以提高應用系統的回應能力、盡可能處理更多的訪問請求、減少延遲為目標,獲得高并發、高負載(LB)的整體性能
- LB的負載分配依賴于主節點的分流演算法
1.6.1 按實作方式劃分
-
硬體
F5 Big-IP
Citrix Netscaler
A10 A10
-
軟體
lvs:linux virtual server,阿里四層SLB(Server Load Balance)使用
nginx:支持七層調度,阿里七層SLB使用Tengine
haproxy:支持七層調度
1.6.2 基于作業的協議層次劃分
-
傳輸層(通用): DNAT和DPORT
LVS:nginx: stream
haproxy: mode tcp
-
應用層(專用):針對特定協議,常稱為proxy server
http: nginx, httpd, haproxy(mode http), …fastcgi: nginx,httpd, …
mysql: mysql-proxy,…
1.6.3 負載均衡的會話保持
- session sticky:同一用戶調度固定服務器
Source lP: LVS sh演算法(對某一特定服務而言)
Cookie
- session replication:每臺服務器擁有全部session
session multicast cluster
- session server:專門的session服務器
Memcached,Redis
1.7 HA Cluster 高可用集群實作
- 以提高應用系統的可靠性、盡可能地減少中斷時間為目標,確保服務的連續性,達到高可用(HA)的容錯效果
- HA的作業方式包括雙工和主從兩種模式
keepalived: vrrp協議
Ais :應用介面規范
heartbeat
? cman+rgmanager(RHCS)
? coresync_pacemaker
1.8 HPC Cluster 高性能運算群集
- 以提高應用系統的CPU運算速度、擴展硬體資源和分析能力為目標,獲得相當于大型、超級計算機的高性能運算(HPC)能力
- 高性能運算群集的高性能依賴于“分布式運算”、“并行計算”,通過專用硬體和軟體將多個服務器的CPU、記憶體等資源整合在一起,實作只有大型、超級計算機才具備的計算能力
Linux Virtual Server簡介
2.1 LVS介紹
LVS: Linux Virtual Server,負載調度器,內核集成,章文嵩,阿里的四層SLB(Server LoadBalance)是基于LVS+keepalived實作
LVS官網: http://www.linuxvirtualserver.org/
LVS相關術語
VS: Virtual Server,負責調度
RS: Real Server,負責真正提供服務
2.2 LVS作業原理
VS根據請求報文的目標IP和目標協議及埠將其調度轉發至某RS,根據調度演算法來挑選RS,LVS是內核級功能, 作業在INPUT鏈的位置,將發往INPUT的流量進行“處理”
范例:查看內核支持LVS
[root@lnmp ~]# grep -i -C 10 ipvs /boot/config-3.10.0-862.el7.x86_64
...
# 顯示LVS支持哪些協議
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
# LVS的調度演算法
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
2.3 LVS集群體系架構
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-x1VH9ahN-1617386259156)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210331202209337.png)]](https://img.uj5u.com/2021/04/04/233206041343136.png)
從互聯網上發請求過來 到達防火墻經過路由器 路由器
2.4 LVS功能及組織架構
負載均衡的應用場景為高訪問量的業務,提高應用程式的可用性和可靠性,
2.4.1 應用于高訪問量的業務
如果您的應用訪問量很高,可以通過配置監聽規則將流量分發到不同的云服務器ECS (Elastic Compute Service彈性計算服務)實體上,此外,可以使用會話保持功能將同一客戶端的請求轉發到同一臺后端ECS
2.4.2 擴展應用程式
可以根據業務發展的需要,隨時添加和移除ECS實體來擴展應用系統的服務能力,適用于各種Web服務器和App服務器,
2.4.3 消除單點故障
可以在負載均衡實體下添加多臺ECS實體,當其中一部分ECS實體發生故障后,負載均衡會自動屏蔽故障的ECS實體,將請求分發給正常運行的ECS實體,保證應用系統仍能正常作業
2.4.4 同城容災(多可用區容災)
為了提供更加穩定可靠的負載均衡服務,阿里云負載均衡已在各地域部署了多可用區以實作同地域容災,當主可用區出現機房故障或不可用時,負載均衡仍然有能力在非常短的時間內(如:大約30s中斷)切換到另外一個備可用區恢復服務能力;當主可用區恢復時,負載均衡同樣會自動切換到主可用區提供服務,
使用負載均衡時,您可以將負載均衡實體部署在支持多可用區的地域以實作同城容災,此外,建議您結合自身的應用需要,綜合考慮后端服務器的部署,如果您的每個可用區均至少添加了一臺ECS實體,那么此種部署模式下的負載均衡服務的效率是最高的,
如下圖所示,在負載均衡實體下系結不同可用區的ECS實體,正常情況下,用戶訪問流量將同時轉至發主、備可用區內的ECS實體;當可用區A發生故障時,用戶訪問流量將只轉發至備可用區內的ECS實體,此種部署既可以避免因為單個可用區的故障而導致對外服務的不可用,也可以通過不同產品間可用區的選擇來降低延遲,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FiBQAvMl-1617386259165)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210331202941096.png)]](https://img.uj5u.com/2021/04/04/233206041343137.png)
如果采取如下圖所示的部署方案,即在負載均衡實體的主可用區下系結多臺ECS實體,而在備可用區沒有任何ECS實體,當主可用區發生故障時會造成業務中斷,因為備可用區沒有ECS實體來接收請求,這樣的部署方式很明顯是以犧牲高可用性為代價來獲取低延時,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZWIr3Tke-1617386259166)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210331203014447.png)]](https://img.uj5u.com/2021/04/04/233206041343138.png)
2.4.5 跨地域容災
您可以在不同地域下部署負載均衡實體,并分別掛載相應地域內不同可用區的ECS,上層利用云決議做智能DNS,將域名決議到不同地域的負載均衡實體服務地址下,可實作全域負載均衡,當某個地域出現不可用時,暫停對應決議即可實作所有用戶訪問不受影響,

2.5 LVS集群型別中的術語
VS: Virtual Server,Director Server(DS), Dispatcher(調度器),Load Balancer
RS: 后端服務器 Real Server(lvs), upstream server(nginx), backend server(haproxy)
CIP:客戶端IP (Client lP) 用戶記錄發送給集群的源IP地址
VIP:: 虛擬IP (Virtual serve lP VS外網的IP) 用于Director對外提供服務的IP地址
DIP:Director lP VS內網的IP Director用于連接內外網路的IP地址,即負載均衡器上的IP地址
RIP: 真實IP (Real server IP) 集群中真實服務器的物理 IP 地址
LIP:LVS內部IP(Local IP Address) LVS集群的內部通信IP
訪問流程:CIP<–>VIP == DIP<–>RIP
LVS 作業模式和相關命令
3.1 LVS集群的作業模式
lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
lvs-dr:操縱封裝新的MAC地址
lvs-tun:在原請求IP報文之外新加一個IP首部
lvs-fullnat:修改請求報文的源和目標IP
3.1.1 LVS的NAT模式
地址轉換(Network Address Translation)
- 簡稱NAT模式,類似于防火墻的私有網路結構,負載調度器作為所有服務器節點的網關,即作為客戶機的訪問入口,也是各節點回應客戶機的訪問出口
- 服務器節點使用私有IP地址,與負載調度器位于同一個物理網路,安全性要優于其他兩種方式
- RIP和DIP應在同一個IP網路,且應使用私網地址;RS的網關要指向DIP
- 請求報文和回應報文都必須經由Director轉發,Director易于成為系統瓶頸
- 支持埠映射,可修改請求報文的目標PORT
- VS必須是Linux系統,RS可以是任意OS系統
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wI0cJovU-1617386259169)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210331204832996.png)]](https://img.uj5u.com/2021/04/04/2332060413431310.png)
3.1.2 LVS的DR模式
直接路由(Direct Routing)
- 簡稱DR模式,采用半開放式的網路結構,與TUN模式的結構類似,但各節點并不是分散在各地,而是與調度器位于同一個物理網路
- 負載調度器與各節點服務器通過本地網路連接,不需要建立專用的IP隧道

LVS-DR: Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的介面的MAC,目標MAC是某挑選出的RS的RIP所在介面的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6Ic7RZEN-1617386259170)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210331212354353.png)]](https://img.uj5u.com/2021/04/04/2332060413431312.png)
DR模式的特點:
-
Director和各RS都配置有VIP
-
確保前端路由器將目標IP為VIP的請求報文發往Director
在前端網關做靜態系結VIP和Director的MAC地址
在RS上使用 arptables工具
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mgngle-ip-s $RIP在RS上修改內核引數以限制arp通告及應答級別
cat /proc/sys/net/ipv4/conf/all/arp_announce cat /proc/sys/net/ipv4/conf/all/arp_announce- RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同—IP網路;RIP的網關不能指向DiIP,以確保回應報文不會經由Director
- RS和Director要在同一個物理網路
- 請求報文要經由Director,但回應報文不經由Director,而由RS直接發往Client
- 不支持埠映射(埠不能修改)
- 無需開啟 ip_forward
- RS可使用大多數OS系統
3.1.3 LVS的TUN模式
IP隧道(IP Tunnel)
- 簡稱TUN模式,采用開放式的網路結構,負載調度器僅作為客戶機的訪問入口,各節點通過各自的Internet連接直接回應客戶機,而不再經過負載調度器
- 服務器節點分散在互聯網中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載調度器相互通信

轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原報文之外再封裝一個Ip首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接回應給客戶端(源IP是VIP,目標IP是CIP)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FJbnHFl5-1617386259172)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210401084505911.png)]](https://img.uj5u.com/2021/04/04/2332060413431314.png)
TUN模式特點:
-
RIP和DIP可以不處于同一物理網路中,RS的網關一般不能指向DIP,且kIP可以和公網通信,也就是說集群節點可以跨互聯網實作,DIP, VIP,RIP可以是公網地址
-
RealServer的tun介面上需要配置VIP地址,以便接收director轉發過來的資料包,以及作為回應的報文源IP
-
Director轉發給RealServer時需要借助隧道,隧道外層的IP頭部的源IP是DIP,目標IP是RIP,而RealServer回應給客戶端的IP頭部是根據隧道內層的IP頭分析得到的,源IP是VIP,目標IP是CIP
-
請求報文要經由Director,但回應不經由Director,回應由RealServer自己完成
-
不支持埠映射
-
RS的OS須支持隧道功能
應用場景:
一般來說,TUN模式常會用來負載調度快取服務器組,這些快取服務器一般放置在不同的網路環境,可以就近折返給客戶端,在請求物件不在Cache服務器本地命中的情況下,Cache服務器要向源服務器發送請求,將結果取回,最后將結果回傳給用戶,
LAN環境一般多采用DR模式,WAN環境雖然可以用TUN模式,但是一般在WAN環境下,請求轉發更多的被 haproxy/nginx/DNS 等實作,因此,TUN模式實際應用的很少,跨機房的應用一般專線光纖連接或DNS調度
3.1.4 LVS的FULLNAT模式
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xmkQHckA-1617386259172)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210401153955294.png)]](https://img.uj5u.com/2021/04/04/2332060413431315.png)
通過同時修改請求報文的源IP地址和目標P地址進行轉發
CIP --> DIP
VIP -->RIP
fullnat模式特點:
- VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網路;因此,RIP的網關一般不會指向DIP
- RS收到的請求報文源地址是DIP,因此,只需回應給DIP;但Director還要將其發往Client
- 請求和回應報文都經由Director
- 相對NAT模式,可以更好的實作LVS-RealServer間跨VLAN通訊
- 支持埠映射
注意:此型別kernel默認不支持
3.1.5 LVS作業模式總結和比較
| NAT | TUN | DR | |
|---|---|---|---|
| Real Server | any | Tunneling | Non-arp device |
| Real server network | private(私網) | LAN/WAN(跨公網) | LAN(局域網) |
| Real server number | low (10-20) | High (100) | High (100) |
| Real server gateway | load balancer | own router | own router |
| 優點 | 埠轉換 | WAN (跨廣域網) | 性能最好 |
| 缺點 | 性能瓶頸 | 啟用隧道(性能受影響) | 不支持跨網段 |
lvs-nat與lvs-fullnat:
- 請求和回應報文都經由Director
- lvs-nat: RIP的網關要指向DIP
- lvs-fullnat: RIP和DIP未必在同一IP網路,但要能通信
lvs-dr與lvs-tun:
- 請求報文要經由Director,但回應報文由RS直接發往Client
- lvs-dr:通過封裝新的MAC首部實作,通過MAC網路轉發
- lvs-tun:通過在原IP報文外封裝新IP頭實作轉發,支持遠距離通信
LVS 調度演算法
ipvs scheduler:根據其調度時是否考慮各RS當前的負載狀態
分為兩種:靜態方法和動態方法
4.1 靜態方法
僅根據演算法本身進行調度
-
RR: roundrobin,輪詢,較常用
- 將收到的訪問請求按照順序輪流分配給群集中的各節點(真實服務器),均等地對待每一臺服務器,而不管服務器實際的連接數和系統負載
-
WRR: Weighted RR,加權輪詢,較常用
- 根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可以自動查詢各節點的負載情況,并動態調整其權重
- 保證處理能力強的服務器承擔更多的訪問流量
-
SH:Source Hashing(源地址哈希),實作session sticky,源IP地址hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,從而實作會話系結
-
DH:Destination Hashing(目標地址哈希),第一次輪詢調度至RS,后續將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理快取場景中的負載均衡,如: Web快取
4.2 動態方法
主要根據每RS當前的負載狀態及調度演算法進行調度Overhead=value 較小的RS將被調度
-
LC: least connections(最少連接)適用于長連接應用
- 根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數最少的節點
overhead=activeconns*256+inactiveconns 活動的連接數*256+非活動連接數 -
WLC: Weighted LC(加權最少連接),默認調度方法,較常用
- 在服務器節點的性能差異較大的情況下,可以為真實服務器自動調整權重
- 權重較高的節點將承擔更大比例的活動連接負載
overhead=(activeconns*256+inactiveconns)/weight* -
SED: Shortest Expection Delay,初始連接高權重優先,只檢查活動連接,而不考慮非活動連接
overhead=(activeconns+1)*256/weight -
NQ: Never Queue,第一輪均勻分配,后續SED
-
LBLC: Locality-Based LC,動態的DH演算法,使用場景:根據負載狀態實作正向代理,實作Web Cache等
-
LBLCR: LBLC with Replication,帶復制功能的LBLC,解決LBLC負載不均衡問題,從負載重的復制到負載輕的RS,實作Web Cache等
4.3 內核版本4.15版本后新增調度演算法:FO和OVF
FO (Weighted Fail Over)調度演算法,在此FO演算法中,遍歷虛擬服務所關聯的真實服務器鏈表,找到還未過載(未設定IP_VS_DEST_F_OVERLOAD標志)的且權重最高的真實服務器,進行調度
OVF (Overflow-connection)調度演算法,基于真實服務器的活動連接數量和權重值實作,將新連接調度到權重值最高的真實服務器,直到其活動連接數量超過權重值,之后調度到下一個權重值最高的真實服務器,在此OVF演算法中,遍歷虛擬服務相關聯的真實服務器鏈表,找到權重值最高的可用真實服務器,一個可用的真實服務器需要同時滿足以下條件:
- 未過載(未設定IP_VS_DEST_F_OVERLOAD標志)
- 真實服務器當前的活動連接數量小于其權重值
- 其權重值不為零
LVS 相關軟體
5.1 程式包:ipvsadm
Unit File: ipvsadm.service
主程式:/usr/sbin/ipvsadm
規則保存工具:/usr/sbin/ipvsadm-save
規則多載工具:/usr/sbin/ipvsadm-restore
組態檔:/etc/sysconfig/ipvsadm-config
ipvs調度規則檔案: /etc/sysconfig/ipvsadm
5.2 ipvsadm 命令
ipvsadm 核心功能:
- 集群服務管理:增 刪 改
- 集群服務的RS管理:增 刪 改
- 查看
ipvsadm 工具用法:
# 管理集群服務
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-bsched-f1ags]
-A 增加一臺新的虛擬服務器
-E 編輯內核虛擬服務器表中的一條虛擬服務器記錄
-t 說明虛擬服務器提供的是tcp 的服務
-u 說明虛擬服務器提供的是udp 的服務
-f 使用防火墻標記表示虛擬服務
-s 調度演算法
ipvsadm -D -t|u|f service-addr ess #洗掉
-D 洗掉內核虛擬服務器表中的一條虛擬服務器記錄,并洗掉所有與該虛擬服務器相關聯的真實服務器
ipvsadm -C #清空
ipvsadm -R #多載,相當于ipvsadm-restore
ipvsadm -s [-n] #保存,相當于ipvsadm-save
# 管理集群中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-a 在一個虛擬服務器中增加一臺新的真實服務器
-e 編輯一條虛擬服務器記錄中的某條真實服務器記錄
ipvsadm -d -t|u|f service-address -r server-address
-d 洗掉一條虛擬服務器記錄中的某條真實服務器記錄
ipvsadm -L|l [options]
ipvsadm -z [-t|u|f service-address]
洗掉:
ipvsadm -D -t|u|f service-address
管理集群上的RS:增 刪 改
增,改:
ipvsadm -ale -t|u|f service-address -r server-address [-g|i|m][-w weight]
刪:
ipvsadm -d -t|u|f service-address -r server-address
server -address:
rip[ :port]如省略port,不作埠映射
選項:
1vs型別:
-g: gateway ,dr型別,默認
-i: ipip,tun型別
-m: masquerade,nat型別
-w weight:權重
ipvsadm -a -t 10.0.0.8:80 -r 192.168.188.188:8080 -m -w 3
清空定義的所有內容:
ipvsadm -C
清空計數器:
ipvsadm -Z [-t|u|f service-address]
查看:
ipvsadm -L|l [options]
-L -l 列出虛擬服務器表
一般ipvsadm -ln
--numeric, -n: 以數字形式輸出地址和埠號
--exact: 擴展資訊,精確值
--connection,-c: 當前IPVS連接輸出
--stats: 統計資訊
--rate : 輸出速率資訊
LVS實戰案例
6.1 LVS-NAT模式案例

我們使用四臺本地虛擬機做lvs-nat集群
| 主機 | 公網ip/私網ip | 私網網關 | 功能 |
|---|---|---|---|
| lvs調度器 | 192.168.188.100 / 192.168.79.100 | 不需要 | 負載均衡/路由轉發 |
| nfs | 192.168.79.10 | 192.168.79.100 | nfs共享存盤 |
| httpd | 192.168.79.20 | 192.168.79.100 | web服務器 |
| httpd | 192.168.79.21 | 192.168.79.100 | web服務器 |
每臺服務器關閉防火墻和selinux安全中心
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
getenforce
搭建nfs服務
添加一個新的磁盤
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rYy3zcWJ-1617386259174)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210401231411591.png)]](https://img.uj5u.com/2021/04/04/2332060413431317.png)
在nfs服務器上創建新的磁盤磁區
fdisd -l # 查看新加入的磁盤
fdisk /dev/sdb # 磁區
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 83 Linux
創建檔案系統(格式化)
mkfs.xfs /dev/sdb1
創建nfs掛載目錄
mkdir /mynfs
掛載
vim /etc/fstab
最后一行添加
/dev/sdb1 /mynfs xfs defaults 0 0
加載掛載資訊
mount -a
查看
df -hT
/dev/sdb1 xfs 5.0G 33M 5.0G 1% /mynfs
安裝nfs所需軟體
yum install -y nsf-utils rpcbind
配置nfs共享目錄
vim /etc/exports
# 添加
/mynfs 192.168.79.0/24(rw,sync,no_root_squash)
開啟服務
systemctl start nfs
systemctl start rpcbind
驗證
[root@nfs ~]# showmount -e
Export list for nfs:
/mynfs 192.168.79.0/24
[root@nfs ~]# exportfs -v
/mynfs 192.168.79.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
搭建httpd
測驗

然后配置網卡資訊 lvs上增加一塊新的網卡 其余服務器的網卡都改成僅主機模式的私網地址
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ivpXjLuS-1617386259175)(C:\Users\StanZ\AppData\Roaming\Typora\typora-user-images\image-20210401234641484.png)]](https://img.uj5u.com/2021/04/04/2332060413431319.png)
ip addr
查看發現多了一張ens37
查看網卡UUID
[root@lvs ~]# nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 640144f5-6ba4-3936-81e8-245ddfff309d ethernet ens37
ens33 0630fb8a-d714-40a6-92c2-3d4cb3d51901 ethernet ens33
配置ens37網卡
[root@lvs network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@lvs network-scripts]# vim ifcfg-ens37
修改NAME和DEVICE為ens37
同時修改UUID為nmcli con show查看的ens37 UUID
更改 IPADDR=192.168.79.100
只需要一個NETMASK=255.255.255.0
GATEWAY和DNS1刪掉
接著配置nfs和web服務器網卡ens33
IPADDR=192.168.79.
GATEWAY和DNS1都是192.168.79.100
ip addr檢查inet
如果調度器ens37沒有ip
則
systemctl stop NetworkManager
systemctl start NetworkManager

ping 192.168.79.100
測驗能不能ping通網關
如果不能ping通說明網卡設定錯誤
web服務器上配置nfs
yum install -y rpcbind nfs-utils
systemctl enable rpcbind
systemctl start rpcbind
[root@localhost ~]# showmount -e 192.168.79.10
Export list for 192.168.79.10:
/mynfs 192.168.79.0/24
永久掛載
vim /etc/fstab
192.168.79.10:/mynfs /var/www/html nfs defaults,_netdev 0 0
打開網頁測驗

搭建lvs-nat負載均衡集群
加載ip_vs模塊
modprobe ip_vs
查看ip_vs版本資訊
cat /proc/net/ip_vs
安裝ipvsadm工具
yum -y install ipvsadm
查看版本
ipvsadm -v
配置負載調度器
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 //開啟路由轉發規則
重新載入sysctl變數
sysctl -p
配置負載分配策略
清除原有策略
ipvsadm -C
添加虛擬服務器,VIP為192.168.188.100:80,負載調度演算法為rr(輪詢)
ipvsadm -A -t 192.168.188.100:80 -s rr
添加真實服務器
[root@lvs network-scripts]# ipvsadm -a -t 192.168.188.100:80 -r 192.168.79.20:80 -m -w 1
[root@lvs network-scripts]# ipvsadm -a -t 192.168.188.100:80 -r 192.168.79.21:80 -m -w 1
[root@lvs network-scripts]# 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.188.100:80 rr
-> 192.168.79.20:80 Masq 1 0 0
-> 192.168.79.21:80 Masq 1 0 0

重繪網頁之后
ipvsadm -ln來查看群集節點狀態

我們在測驗一遍 將/mynfs里面的網頁更改
清除瀏覽器快取之后再次重繪

6.2 LVS-DR模式案例
DR模型中各主機上均需要配置VIP,解決地址沖突的方式有三種:
- 在前端網關做靜態系結
- 在各RS使用arptables
- 在各RS修改內核引數,來限制arp回應和通告的級別
限制回應級別: arp_ignore
- 0: 默認值,表示可使用本地任意介面上配置的任意地址進行回應
- 1: 僅在請求的目標IP配置在本地主機的接收到請求報文的口上時,才給予回應
限制通告級別: arp_announce
- 0: 默認值,把本機所有介面的所有資訊向每個介面的網路進行通告
- 1: 盡量避免將介面資訊向非直接連接網路進行通告
- 2: 必須避免將介面資訊向非本網路進行通告
配置要點
- Director服務器采用雙IP橋接網路,一個是VIP,一個DIP
- Web服務器采用和DIP相同的網段和Director連接
- 每個Web服務器配置VIP
- 每個web服務器可以出外網

我們使用五臺本地虛擬機做lvs-dr集群
準備作業
在lvs服務器上面安裝所需軟體
yum install -y ipvsadm
在web服務器上面安裝所需軟體
yum install -y httpd
yum install -y rpcbind nfs-utils
在nfs服務器上面安裝所需軟體
yum install -y rpcbind nfs-utils
配置網卡
lvs服務器需要兩張網卡 一張網卡配置為NAT模式 一張網卡配置為僅主機模式
web服務器需要兩張網卡 一張網卡配置為NAT模式 一張網卡配置為僅主機模式
nfs服務器需要一張網卡 配置為僅主機模式

進入各個服務器配置網卡為實驗ip(如上面圖中所示)
在配置ens37網卡的時候需要注意 要將uuid改了
查看網卡UUID
[root@lvs ~]# nmcli con show
NAME UUID TYPE DEVICE
ens33 0630fb8a-d714-40a6-92c2-3d4cb3d51901 ethernet ens33
ens37 640144f5-6ba4-3936-81e8-245ddfff309d ethernet ens37
然后
cp ifcfg-ens33 ifcfg-ens37
修改
NAME=ens37
UUID=640144f5-6ba4-3936-81e8-245ddfff309d
DEVICE=ens37
IPADDR=192.168.79.10
NETMASK=255.255.255.0
修改完之后重啟網路
systemctl restart network
查看ip是否正確
如果ens37私網地址消失
執行這條命令 重啟網路管理
systemctl restart NetworkManager
一定要ip addr查看ip是否配置正確
配置nfs服務
詳細步驟在上面NAt的案例里面
我這里就寫一些重要的點
vim /etc/exports
/mynfs 192.168.79.0/24(rw,sync,no_root_squash)
[root@nfs ~]# showmount -e
Export list for nfs:
/mynfs 192.168.79.0/24
然后再web服務器上面
開啟rpc
systemctl start rpcbind
[root@localhost ~]# showmount -e 192.168.79.200
Export list for 192.168.79.200:
/mynfs 192.168.79.0/24
vim /etc/fstab
192.168.79.200:/mynfs /var/www/html nfs defaults,_netdev 0 0
添加完畢之后加載掛載
mount -a
df -hT 來查看掛載是否成功
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 1.8G 16G 11% /
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 9.5M 982M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 130M 885M 13% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
192.168.79.200:/mynfs nfs4 5.0G 44M 5.0G 1% /var/www/html
然后我們去nfs服務器的/mynf目錄下添加網頁
通過瀏覽器測驗

配置lvs調度器
- 在lvs服務器的ens33:0網卡上面配置VIP地址(虛擬地址)
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs network-scripts]# vim ifcfg-ens33:0
需要修改的就是NAME DEVICE IPADDR(寫虛擬地址) NETMASK
NAME=ens33:0
UUID=0630fb8a-d714-40a6-92c2-3d4cb3d51901
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.188.188
NETMASK=255.255.255.0
打開網卡
ifup ens33:0

- 加載模塊和修改引數
加載ip_vs模塊
modprobe ip_vs
查看lvs模塊的版本
cat /proc/net/ip_vs
LVS服務器關閉路由轉發,關閉重定向
[root@lvs network-scripts]# vim /etc/sysctl.conf
# net.ipv4.ip_forward = 1 注釋路由轉發
# DR模式,LVS負載調度器和各節點需要共用VIP地址,應該關閉Linux內核的重定向引數回應(不關閉重定向,調度器將把請求轉發到網關)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
重新載入sysctl變數
[root@lvs network-scripts]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
- 配置負載分配策略
首先清除原有策略
[root@lvs network-scripts]# ipvsadm -C
[root@lvs network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
添加虛擬服務器 VIP為192.168.188.188:80,負載調度演算法為rr(輪詢)
[root@lvs ~]# ipvsadm -A -t 192.168.188.188:80 -s rr
-A 添加虛擬服務器記錄 -t 設定VIP地址,-s 調度演算法 rr輪詢
添加真實服務器 作業模式為DR
[root@lvs ~]# ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.100:80 -g -w 1
-a 添加真實服務器記錄 -t 設定vip地址 -r 設定真實ip地址 -g選擇DR群集模式 -w權重
[root@lvs ~]# ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.101:80 -g -w 1
保存負載分配策略
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
開啟ivpsadm
systemctl enable ipvsadm
systemctl start ipvsadm
配置節點服務器
- 在節點服務器的lo:0網卡上面配置VIP地址(虛擬地址)
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
需要修改的是DEVICE IPADDR寫VIP BROADCAST也可以寫VIP NETMASK全寫255
DEVICE=lo:0
IPADDR=192.168.188.188
NETMASK=255.255.255.255
BROADCAST=192.168.188.188
ONBOOT=yes
NAME=loopback
打開網卡
ifup lo:0

- 配置路由和調整抑制ARP回應引數
先查看一下路由
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.188.2 0.0.0.0 UG 100 0 0 ens33
192.168.79.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
192.168.188.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
添加一條路由設定將發送192.168.188.188的請求轉給環回虛介面
[root@localhost network-scripts]# route add -host 192.168.188.188 dev lo:0
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.188.2 0.0.0.0 UG 100 0 0 ens33
192.168.79.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37
192.168.188.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.188.188 0.0.0.0 255.255.255.255 UH 0 0 0 lo
節點服務器配置抑制ARP回應
[root@localhost network-scripts]# vim /etc/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
重新載入sysctl變數
[root@localhost network-scripts]# sysctl -p
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
重啟各項服務
systemctl restart network
ifup lo:0
驗證:

查看ipvsadm活躍連接數

6.3 LVS-DR模式 使用腳本更簡單的實作方法
架構圖還是這樣

LVS配置
兩臺LVS服務器都開啟路由轉發,關閉重定向
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
多載配置,使之生效
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
配置lvs的網卡資訊
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs network-scripts]# vim ifcfg-ens33:0
需要修改的就是NAME DEVICE IPADDR(寫虛擬地址) NETMASK
NAME=ens33:0
UUID=0630fb8a-d714-40a6-92c2-3d4cb3d51901
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.188.188
NETMASK=255.255.255.0
兩臺LVS服務器都創建腳本
[root@lvs network-scripts]# vim /etc/init.d/dr.sh
#!/bin/bash
VIP=192.168.188.188 # 虛擬ip
RIP1=192.168.188.100 # 真實web服務器ip
RIP2=192.168.188.101
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm # 保存配置
systemctl start ipvsadm # 啟動服務
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up # 設定ens33:0地址,廣播地址,子網掩碼,并開啟
/sbin/route add -host $VIP dev ens33:0 # 添加路由網段資訊
/sbin/ipvsadm -A -t $VIP:80 -s rr # 指定虛擬服務訪問入口,指定輪詢演算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1 # -g 指定真實服務器,dr模式
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
echo "ipvsadm starting --------------------[ok]"
;;
stop)
/sbin/ipvsadm -C # 清空快取
systemctl stop ipvsadm # 關閉服務
ifconfig ens33:0 down # 關閉介面
route del $VIP # 洗掉路由資訊
echo "ipvsamd stoped----------------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then # 判斷檔案存在與否決定狀態
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
[root@lvs network-scripts]# chmod +x /etc/init.d/dr.sh
兩臺LVS服務器都重啟各項配置
[root@lvs network-scripts]# systemctl restart network
[root@lvs network-scripts]# ifup ens33:0
[root@lvs network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
節點配置
配置節點的網卡資訊
[root@web network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web network-scripts]# vim ifcfg-lo:0
需要修改的是DEVICE IPADDR寫VIP BROADCAST也寫VIP NETMASK全寫255
DEVICE=lo:0
IPADDR=192.168.188.188
NETMASK=255.255.255.255
BROADCAST=192.168.188.188
ONBOOT=yes
NAME=loopback
節點服務器配置抑制ARP回應
配置抑制ARP腳本
[root@web network-scripts]# vim /etc/init.d/web.sh
#!/bin/bash
VIP=192.168.188.188
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@web network-scripts]# chmod +x /etc/init.d/web.sh
重啟各項服務
[root@web network-scripts]# systemctl restart network
[root@web network-scripts]# ifup lo:0
[root@web network-scripts]# service web.sh start
RealServer Start OK
[root@web network-scripts]# systemctl start httpd
驗證:


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/272217.html
標籤:其他
上一篇:LAMP-2:配置php/整合資料庫/利用memcache實作nginx高效快取/nginx反向代理/平滑升級
下一篇:清明節,致敬兩位逝去的技術博主
