LVS集群之十種調度算法及負載均衡-理論
一、LVS概念
LVS(Linux Virtual Server):linux 虛擬服務器
LVS是個負載均衡設備,它不提供任何服務,用戶請求到這裏的時候,它是將客戶需求轉發至後端真正提供服務的服務,所以說後端的服務稱作real server。LVS分為兩段,前一段稱為ipvsadm(管理集群服務的命令行工具),後面一段叫做ipvs(內核模塊)【提示:LVS和iptables不能同時使用】。
二、LVS類型
LB(Load Balancing):負載均衡集群
特性:為了增加能力能力
HA(High Availability):高可用集群
特性:提供服務的可用性(一年在線時間達到99.999%才行)
計算方法:在線時間/(在線時間/故障處理時間)
HP([HPC]High Performance):高性能集群
特性:提供服務的性能
三、LVS組成結構(負載均衡實現方案)
基於DNS域名輪流解析的方法
基於客戶端調度訪問的方法
基於應用層系統負載的調度方法
基於IP地址的調度方法
其中基於IP的負載調度算法中,IP負載均衡技術是執行效率最高的
四、LVS十種調度算法
1、靜態調度:
①rr(Round Robin):輪詢調度,輪叫調度
輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然後重新開始循環。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。【提示:這裏是不考慮每臺服務器的處理能力】
②wrr:weight,加權(以權重之間的比例實現在各主機之間進行調度)
由於每臺服務器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。
③sh:source hashing,源地址散列。主要實現會話綁定,能夠將此前建立的session信息保留了
源地址散列調度算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的並且沒有超負荷,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法的相同。它的算法流程與目標地址散列調度算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址,所以這裏不一個一個敘述。
④Dh:Destination hashing:目標地址散列。把同一個IP地址的請求,發送給同一個server。
目標地址散列調度算法也是針對目標IP地址的負載均衡,它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
2、動態調度
①lc(Least-Connection):最少連接
最少連接調度算法是把新的連接請求分配到當前連接數最小的服務器,最小連接調度是一種動態調度短算法,它通過服務器當前所活躍的連接數來估計服務器的負載均衡,調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1,當連接中止或超時,其連接數減一,在系統實現時,我們也引入當服務器的權值為0時,表示該服務器不可用而不被調度。
簡單算法:active*256+inactive(誰的小,挑誰)
②wlc(Weighted Least-Connection Scheduling):加權最少連接。
加權最小連接調度算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權限,加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。
簡單算法:(active*256+inactive)/weight【(活動的連接數+1)/除以權重】(誰的小,挑誰)
③sed(Shortest Expected Delay):最短期望延遲
基於wlc算法
簡單算法:(active+1)*256/weight 【(活動的連接數+1)*256/除以權重】
④nq(never queue):永不排隊(改進的sed)
無需隊列,如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。
⑤LBLC(Locality-Based Least Connection):基於局部性的最少連接
基於局部性的最少連接算法是針對請求報文的目標IP地址的負載均衡調度,不簽主要用於Cache集群系統,因為Cache集群中客戶請求報文的布標IP地址是變化的,這裏假設任何後端服務器都可以處理任何請求,算法的設計目標在服務器的負載基本平衡的情況下,將相同的目標IP地址的請求調度到同一個臺服務器,來提高個太服務器的訪問局部性和主存Cache命中率,從而調整整個集群系統的處理能力。
基於局部性的最少連接調度算法根據請求的目標IP地址找出該目標IP地址最近使用的RealServer,若該Real Server是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。
⑥LBLCR(Locality-Based Least Connections withReplication):帶復制的基於局部性最少鏈接
帶復制的基於局部性最少鏈接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
五、IPVS實現負載均衡的方法
NAT:地址轉換(類似於DNAT)
1、集群點跟director必須工作在同一個IP的網絡中
2、RIP通常是私有地址,僅用於各集群節點間的的通信
3、director位於client和real server之間,並負責處理進出的所有通道。
4、realserver必須將網關執行DIP
5、director支持端口映射
6、realserver可以使用任何類型的操作系統(os)
7、較大規模應用場景中,director易成為系統瓶頸
DR:直接路由(及用於作為源地址)
1、各集群節點跟director必須在同一個物理網絡中;
2、RIP可以使用公網地址,實現便攜的遠程管理和監控;
3、director僅負責處理入站請求,形影報文則有realserver直接發往客戶端
4、realserver不能將網關指向DIP,而是直接指向前端網關;
5、director不支持端口映射
6、大多數操作系統能夠用在realserver
7、director能夠處理更多的realserver
TUN:隧道
1、集群節點可以跨越Internet
2、RIP必須是公網地址
3、director僅負責處理入站請求,形影報文則有realserver直接發往客戶端
4、realserver網關不能指向director
5、只有咫尺隧道功能的OS才能用於realserver
6、不支持端口映射
六、ipvsadm常用命令
ipvsadm:
1、管理集群服務
添加:-A -t|u|f service-address [-sscheduler]
-t:tcp協議的集群服務
-u:udp協議的集群
-f:FWM:防火墻標記
修改:-E
刪除:-D
-D -t|u|f service-address
例如:# ipvsadm -A -t 172.16.100.1:80 -s rr
2、管理集群服務中的RS
添加:-a -t|u|f service-address -rserver-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定義好的某集群服務
-r server-address:某RS的地址,在NAT模型中,可以使用IP:PORT事先端口映射
[-g|i|m]:LVS類型
-g:DR
-I:TUN
-m:NAT
[-w weight]:定義服務器權重
3、修改:-e
4、刪除:-d -t|u|f service-address -r server-address
例如:#ipvsadm -a -t 172.16.100.1:80 -r192.168.10.8 -m
例如:#ipvsadm-a -t 172.16.100.1:80 -r 192.168.10.9 -m
5、查看
-L|l[options]
-n:數字格式顯示主機地址和端口號
--stats:統計信息
--rate:速率
--timeout:顯示tcp、tcpfin和udp會話的超時時間值
--daemon
--sort:跟協議、地址、端口進行排序,默認為升序
-c:顯示當前ipvs連接狀況
6、刪除所有集群服務:
-C:清空ipvs規則
7、保存規則
-S:(用輸出重定向進行保存)
格式:#ipvsadm -s >/path/to/somefile
8、載入此前的規則:
-R
格式:#ipvsadm -R </path/to/somefile
原文:http://lzysg172.blog.51cto.com/6624306/1199412
LVS集群之十種調度算法及負載均衡-理論