LVS概念、類型、調度方法、命令操作與實際配置
字數2134 閱讀4 評論0 喜歡1
LVS
(一)LVS概念
LVS( Linux Virtual Server)是一種負載均衡(LB,Laod Balance)技術,采用IP負載均衡技術和基于內容請求分發技術。具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行。LVS是一套組件(ipvs與ipvsadm),類似與iptables,ipvs相當于netfilter,是能將用戶請求轉發的框架,需要依賴以規則完成轉發,工作于內核中的INPUT鏈上,并依賴于規則進行轉發,而ipvsadm是用來定義規則的工具。LVS工作在TCP/UDP協議的四層,能根據用戶請求的IP與PROT進行轉發,即LVS能實現四層交換、四層路由。
LVS組成
Director:負載均衡器
RS:服務器池(RealServer)
CIP:客戶端IP(Client IP)
VIP: Client所請求的,提供虛擬服務的IP,可以用Keepalive做高可用
DIP:在Director實現與RS通信的IP
RIP:RealServer IP
(二)LVS類型
LVS類型有四種:NAT、DR、TUN、FULLNAT
2.1 LVS/NAT
多目標IP的DNAT,通過將請求報文中的目標地址和目標端口改為某挑出的RS的RIP和PORT實現轉發
模型:
NAT
LVS NAT的特性
1.RS應該使用私有地址
2.RS的網關必須指向DIP
3.RIP和DIP必須在同一網段內
4.請求和響應的報文都得經過Director,在高負載場景中,Director很可能成為性能瓶頸
5.支持端口映射
6.RS可以使用任意支持集群服務的OS
2.2 LVS/DR
通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變,請求報文經過Dirctor但響應報文不再經過Dirctor
模型:
DR
IP說明
DR類型工作流程
如上圖所示:當客戶端請求VIP時,通過互聯網到達前端路由Route1,再通過交換機到達Dirctor上;而Dirctor在收到請求報文后,通過定義在ipvs規則中的各rip去獲得各RS的MAC地址,并在此報文外再封裝一個MAC地址,源MAC為Dirctor的dip端口的MAC而目標MAC改為其中一個RS的MAC,但該報文的目標ip(VIP)不變,最后通過dip接口發送給RS;為了RS能接收Dirctor發來的報文,需要在各RS上也配置VIP,但RS上的VIP是需要隔離前端arp廣播的,所以需要將各RS上的VIP隱藏(通常配置到lo網卡接口的別名上,并配合修改linux內核參數來實現);而RS封裝響應報文時,源IP為VIP,目標ip為CIP,并通過RIP的網絡接口直接向外發送響應,不再經過Dirctor。
需要注意的是:因為Route1的A點的IP和Dirctor的VIP在同一網段內,VIP通常是公網IP;而DIP、RIP通常是私有IP,且這兩個IP通常也應在同一物理網絡內;假設RIP響應時指向的網關為Route1的A點,這就意味著RIP與A點不在同一網段內,因此將無法響應給客戶端,所以需要另加一個路由route2,Route2能夠通過D接口訪問互聯網,且Route2的C點的IP需要與RIP在同一網段內,此時RIP響應的報文就通過Route2發送。
上文黑色斜體部分的實現及確保前端路由器將目標IP為VIP的請求報文發往Director,方法c是最佳的選擇:
(a) 在前端網關即Dirctor做靜態綁定
(b) 在RS上使用arptables
(c) 在RS上修改內核參數以限制arp通告及應答級別:
arp_announce 定義arp通告級別
arp_ignore 定義arp應答級別
Linux kernel從2.4.26與2.6.4以后引入了兩個設備標識,即上面提到的arp_announce arp_ignore來調整arp模式 arp_announce:0:默認的,通告時告之本機所使用的所有地址、配置、接口1: 盡量只通告接入的網絡一端的接口地址(不絕對保證)2: 必需避免向非本機網絡通告 # DR模式需要 地址/proc/sys/net/ipv4/conf/enoXXX/arp_announcearp_ingore: 0: 默認的,響應本機接口上配置的所有的目標IP地址1: 只響應入棧報文的那個接口 # DR模式需要 地址同上描述
LVS DR類型的特性
1.RS可以使用私有地址,也可以使用公網地址,此時可以直接通過互聯網連入RS,以實現配置、監控等
2.RS的網關一定不能指向DIP
3.RS跟Dirctory要在同一物理網絡內(不能有路由器分隔)
4.請求報文必須經過Dirctory,但響應報文不能經過Director而是由RS直接發往Client以釋放Directory的壓力。
5.不支持端口映射(因為響應報文不經過Drictor)
6.RS可以使用大多數的操作系統
7.Dirctor的VIP對外可見,RS的VIP對外不可見
2.3 LVS/TUN
模型:
TUN
TUN類型工作流程
LVS TUN類型特性
1.RIP,DIP,VIP都得是公網地址
2.RS的網關不會指向也不可能指向DIP
3.請求報文經過Directory,但響應報文一定不經過Director
4.不支持端口映射
5.RS的OS必須得支持隧道功能 ??
2.4 LVS/FULLNAT (LVS默認不支持此類型)
通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP–>DIP
VIP–>RIP
特點
VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡,因此,RIP的網關一般不會指向DIP
RS收到的請求報文源地址是DIP,因此只需響應給DIP, 但Dirctor還要將其發往Client
請求和響應報文都經由Dirctor
支持端口映射.
(三)LVS調度方法(Scheduler)
LVS的調度方法分為兩類(靜態算法、動態算法),共10種
靜態方法:僅根據算法本身進行調度(注重起點公平)
① rr:Round Robin 輪詢,按順序輪流分配到集群中的RS服務器上,不支持權重。
② wrr:Weighted RR 權重輪詢,根據RS的不同處理能力來調度訪問請求??杀WC處理能力強的服務器能處理更多的訪問流量。
③ sh:source hashing 源地址hash,對請求的客戶端IP進行hash計算,可實現session綁定,但可能會破壞負載均衡。Director在本地維護一張hash表,此表保存有每一個源IP及其第一次調度哪一個Server,每一條記錄都有默認時長。
④ dh:destination hashing 目標地址hash,請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。Director在本地維護一張散列表,此表保存有每一次請求的目標IP及其對應調度的目標服務器(RS) 。將發往同一個目標地址的請求始終轉發至第一次挑中的RS。
動態方法:根據算法及RS當前的負載狀態(注重結果公平)
⑤ lc:Least Connection 最少連接,計算當前的負載Overhead=Active*256+Inactive來實現,采用計算值最小的RS,不支持權重。
⑥ wlc: Weighted LC 權重最少連接,具有較高權重的服務器將承受較大比例的活動連接負載計算方法:Overhead=(Active*256+Inactive)/weight
⑦ sed:Shortest Expect Delay 最短期望延遲,wlc的改進算法,先選擇權重較大的服務器計算方法:Overhead=(Active+1)*256/weight
⑧ nq:Nerver Queus: sed算法的改進,永不排隊
⑨ lblc:Locality-based least connection 基于本地的最少連接,相當于dh+lc
⑩ lblcr:基于復制的基于本地的最少連接 Replicated and Locality-based least connection
(四)ipvsadm命令
grep -i -C "ipvs" /boot/config-3.10.0-327.el7.x86_64
查看ipvs支持的協議與調度方法
① 對集群的操作
-
首先要確定好需要使用哪種拓撲類型(NAT DR TUN)的集群
-A -t|u|f service-address [-s scheduler] [-p [timeout]] -A:添加一個集群服務 # Add -E:修改一個集群服務 # Edit -D:刪除集群服務 # Delete ipvsadm -D -t 10.1.0.5:80 -t:tcp協議服務 -u:udp協議服務 -f:firewall make通常應用于將兩個或以上的服務綁定為一個服務進行處理時使用 示例:ipvsadm -A -f 11 -s wrr # 這個11為通過iptables xxxx -j MARK --set-mark 11 得到 service-address # 即LVS服務器的IP地址加之前選項指明的協議類型端口 -t IP:port # tcp協議 -u ip:port # udp協議 -f firewall_mark # 后接一個標記數字,將多個端口組織成一個集群進行統一調度 -s 調度算法,默認為wlc -p: persistence # LVS的持久連接功能,沒有接數字則默認為300秒
② 對RS的操作
-a -t|u|f service-address -r server-address -[g|i|m] [-w weight] # LVS的類型在這里定義 -a:添加RS -e:修改 -d:刪除 -r: 后接 RS的ip[:port] -g:gateway, DR默認DR模型 -m:masquerade, NAT模型 -i:ipip, TUN模型 -w:權重
③ 查看、清空、保存、導入規則
-L|l:顯示規則 -n, --numeric: 不反解析IP地址和端口,數值格式顯示主機地址和端口號 --exact: 顯示精確值 --stats: 統計數據 --rate: 速率 --timeout: 顯示tcp、tcpfin和udp的會話超時時長 --sort: 顯示當前的ipvs連接狀況 -c, --connection: 查看連接數清空規則 ipvsadm -C # Clear 保存規則(一般都保存在/etc/sysconfig/ipvsadm) * service ipvsadm save * ipvsadm -S 重定向至其他文件中 * ipvsadm-save 重定向到標準輸出 * systemctl stop ipvsadm.service # 停止時會自動保存 導入規則 ipvsadm -R < /save_file
(五)LVS實際配置
5.1 配置一個NAT類型(2臺RS)的集群
LVS: if1=10.1.252.206 if2=172.16.50.129/24
RS1: 172.16.50.130/24
RS2: 172.16.50.131/24
原創文章,作者:sjfbjs,如若轉載,請注明出處:http://www.www58058.com/55043