1、LVS 介紹
(1)LVS 是Linux Virtual Server的簡稱,也就是 Linux 虛擬服務器, 是一個由章文嵩博士發(fā)起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現(xiàn)在LVS已經(jīng)是 Linux標準內(nèi)核的一部分,因此性能較高。
(2)LVS軟件作用:通過LVS提供的負載均衡技術和Linux操作系統(tǒng)實現(xiàn)一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現(xiàn)最優(yōu)的服務性能。
2、LVS 優(yōu)勢與不足
1、優(yōu)勢
高并發(fā)連接:LVS基于內(nèi)核網(wǎng)絡層面工作,有超強的承載能力和并發(fā)處理能力。單臺LVS負載均衡器,可支持上萬并發(fā)連接。
穩(wěn)定性強:是工作在網(wǎng)絡4層之上僅作分發(fā)之用,這個特點也決定了它在負載均衡軟件里的性能最強,穩(wěn)定性最好,對內(nèi)存和cpu資源消耗極低。
成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高。
配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。
支持多種算法:支持多種論調算法,可根據(jù)業(yè)務場景靈活調配進行使用
支持多種工作模型:可根據(jù)業(yè)務場景,使用不同的工作模式來解決生產(chǎn)環(huán)境請求處理問題。
應用范圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數(shù)據(jù)庫、DNS、ftp服務等等
2、不足
工作在4層,不支持7層規(guī)則修改,機制過于龐大,不適合小規(guī)模應用。
3、LVS 核心組件和專業(yè)術語
1、核心組件
LVS的管理工具和內(nèi)核模塊 ipvsadm/ipvs
ipvsadm:用戶空間的命令行工具,用于管理集群服務及集群服務上的RS等;
ipvs:工作于內(nèi)核上的程序,可根據(jù)用戶定義的集群實現(xiàn)請求轉發(fā);
2、專業(yè)術語
VS:Virtual Server #虛擬服務
Director, Balancer #負載均衡器、分發(fā)器
RS:Real Server #后端請求處理服務器
CIP: Client IP #用戶端IP
VIP:Director Virtual IP #負載均衡器虛擬IP
DIP:Director IP #負載均衡器IP
RIP:Real Server IP #后端請求處理服務器IP
3、具體圖解

4、LVS負載均衡四種工作模式
LVS/NAT:網(wǎng)絡地址轉換模式,進站/出站的數(shù)據(jù)流量經(jīng)過分發(fā)器(IP負載均衡,他修改的是IP地址) --利用三層功能
LVS/DR :直接路由模式,只有進站的數(shù)據(jù)流量經(jīng)過分發(fā)器(數(shù)據(jù)鏈路層負載均衡,因為他修改的是目的mac地址)--利用二層功能mac地址
LVS/TUN: 隧道模式,只有進站的數(shù)據(jù)流量經(jīng)過分發(fā)器
LVS/full-nat:雙向轉換:通過請求報文的源地址為DIP,目標為RIP來實現(xiàn)轉發(fā):對于響應報文而言,修改源地址為VIP,目標地址為CIP來實現(xiàn)轉發(fā)
5、LVS 四種工作模式原理、以及優(yōu)缺點比較
1、NAT模式(LVS-NAT)(網(wǎng)絡地址轉換模式)
原理:就是把客戶端發(fā)來的數(shù)據(jù)包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,并發(fā)至此RS來處理,RS處理完成后把數(shù)據(jù)交給經(jīng)過負載均衡器,負載均衡器再把數(shù)據(jù)包的原IP地址改為自己的IP,將目的地址改為客戶端IP地址即可?期間,無論是進來的流量,還是出去的流量,都必須經(jīng)過負載均衡器?
優(yōu)點:集群中的物理服務器可以使用任何支持TCP/IP操作系統(tǒng),只有負載均衡器需要一個合法的IP地址。
缺點:擴展性有限。當服務器節(jié)點(普通PC服務器)增長過多時,負載均衡器將成為整個系統(tǒng)的瓶頸,因為所有的請求包和應答包的流向都經(jīng)過負載均衡器。當服務器節(jié)點過多時,大量的數(shù)據(jù)包都交匯在負載均衡器那,速度就會變慢!

2、直接路由(Direct routing)模式(LVS-DR)
原理:負載均衡器和RS都使用同一個IP對外服務?但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP請求保持靜默?也就是說,網(wǎng)關會把對這個服務IP的請求全部定向給DR,而DR收到數(shù)據(jù)包后根據(jù)調度算法,找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)并將請求分發(fā)給這臺RS?這時RS收到這個數(shù)據(jù)包,處理完成之后,由于IP一致,可以直接將數(shù)據(jù)返給客戶,則等于直接從客戶端收到這個數(shù)據(jù)包無異,處理后直接返回給客戶端?
優(yōu)點:和TUN(隧道模式)一樣,負載均衡器也只是分發(fā)請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現(xiàn)方式不需要隧道結構,因此可以使用大多數(shù)操作系統(tǒng)做為物理服務器。
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網(wǎng)卡必須與物理網(wǎng)卡在一個物理段上。

3、IP隧道(Tunnel)模式(LVS-TUN)
原理:互聯(lián)網(wǎng)上的大多Internet服務的請求包很短小,而應答包通常很大。那么隧道模式就是,把客戶端發(fā)來的數(shù)據(jù)包,封裝一個新的IP頭標記(僅目的IP)發(fā)給RS,RS收到后,先把數(shù)據(jù)包的頭解開,還原數(shù)據(jù)包,處理后,直接返回給客戶端,不需要再經(jīng)過負載均衡器?注意,由于RS需要對負載均衡器發(fā)過來的數(shù)據(jù)包進行還原,所以說必須支持IPTUNNEL協(xié)議?所以,在RS的內(nèi)核中,必須編譯支持IPTUNNEL這個選項
優(yōu)點:負載均衡器只負責將請求包分發(fā)給后端節(jié)點服務器,而RS將應答包直接發(fā)給用戶。所以,減少了負載均衡器的大量數(shù)據(jù)流動,負載均衡器不再是系統(tǒng)的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多RS進行分發(fā)。而且跑在公網(wǎng)上就能進行不同地域的分發(fā)。
缺點:隧道模式的RS節(jié)點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”(IP Encapsulation)協(xié)議,服務器可能只局限在部分Linux系統(tǒng)上。

4、FULL-NAT模式
原理:客戶端對VIP發(fā)起請求,Director接過請求發(fā)現(xiàn)是請求后端服務。Direcrot對請求報文做full-nat,把源ip改為Dip,把目標ip轉換為任意后端RS的rip,然后發(fā)往后端,rs接到請求后,進行響應,相應源ip為Rip目標ip還是DIP,又內(nèi)部路由路由到Director,Director接到響應報文,進行full-nat。將源地址為VIP,目標地址改為CIP

請求使用DNAT,響應使用SNAT
6、四者的區(qū)別
| lvs-nat與lvs-fullnat: | 請求和響應報文都經(jīng)由Director |
| lvs-nat: | RIP的網(wǎng)關要指向DIP |
| lvs-fullnat: | RIP和DIP未必在同一IP網(wǎng)絡,但要能通信 |
| lvs-dr與lvs-tun: | 請求報文要經(jīng)由Director,但響應報文由RS直接發(fā)往Client |
| lvs-dr: | 通過封裝新的MAC首部實現(xiàn),通過MAC網(wǎng)絡轉發(fā) |
| lvs-tun: | 通過在原IP報文外封裝新IP頭實現(xiàn)轉發(fā),支持遠距離通信 |
6、LVS ipvsadm 命令的使用
1、LVS-server安裝lvs管理軟件
yum -y install ipvsadm
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
規(guī)則保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
2、命令選項
-A --add-service #在服務器列表中新添加一條新的虛擬服務器記錄
-s --scheduler #使用的調度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默認調度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr
-a --add-server #在服務器表中添加一條新的真實主機記錄
-t --tcp-service #說明虛擬服務器提供tcp服務
-u --udp-service #說明虛擬服務器提供udp服務
-r --real-server #真實服務器地址
-m --masquerading #指定LVS工作模式為NAT模式
-w --weight #真實服務器的權值
-g --gatewaying #指定LVS工作模式為直接路由器模式(也是LVS默認的模式)
-i --ip #指定LVS的工作模式為隧道模式
-p #會話保持時間,定義流量唄轉到同一個realserver的會話存留時間
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
-E -edit-service #編輯內(nèi)核虛擬服務器表中的一條虛擬服務器記錄。
-D -delete-service #刪除內(nèi)核虛擬服務器表中的一條虛擬服務器記錄。
-C -clear #清除內(nèi)核虛擬服務器表中的所有記錄。
-R -restore #恢復虛擬服務器規(guī)則
-S -save #保存虛擬服務器規(guī)則到標準輸出,輸出為-R 選項可讀的格式
-e -edit-server #編輯一條虛擬服務器記錄中的某條真實服務器記錄
-d -delete-server #刪除一條虛擬服務器記錄中的某條真實服務器記錄
-L|-l –list #顯示內(nèi)核虛擬服務器表
--numeric, -n:#以數(shù)字形式輸出地址和端口號
--exact: #擴展信息,精確值
--connection,-c: #當前IPVS連接輸出
--stats: #統(tǒng)計信息
--rate : #輸出速率信息
參數(shù)也可以從/proc/net/ip_vs*映射文件中查看
-Z –zero #虛擬服務表計數(shù)器清零(清空當前的連接數(shù)量等)
實現(xiàn)LVS持久連接(了解)
1、定義
由于HTTP是一種無狀態(tài)協(xié)議,每次請求完畢之后就立即斷開了,當用戶瀏覽購物網(wǎng)站挑選商品的時候,看到一件商品加入購物車,此過程被重定向到了REALSERVER1上面來,當把第二件商品加入購物車又被重定向到了REALSERVER2上面,最后結賬的時候在REALSERVER2上面,只有一件商品,這顯然是用戶無法接受的,此時就需要一種持久連接機制,來把同一用戶的HTTP請求在超時時間內(nèi)都重定向到同一臺REALSERVER,超時時間可以自己定義,比如說2個小時,在超時時間內(nèi)服務器會不斷追蹤用戶的訪問請求,把某一用戶的所有請求都轉發(fā)到同一臺REALSERVER上面
對于電子商務網(wǎng)站來說,用戶在挑選商品的時候使用的是80端口來瀏覽的,當付款的時候則是通過443的ssl加密的方式,當然當用戶挑選完商品付款的時候我們當然不希望https的443跳轉到另外一臺REALSERVER,很顯然應該是同一REALSERVER才對,這時候就要用到基于防火墻標記的持久連接,通過定義端口的姻親關系來實現(xiàn)
2、功能
無論ipvs使用何種scheduler,其都能夠實現(xiàn)在指定時間范圍內(nèi)始終將來自同一個ip地址的請求發(fā)往同一個RS;此功能是通過lvs持久連接模板實現(xiàn),其與調度方法無關;
iptables -t mangle -A PREROUTING -d 172.16.100.100 -p tcp --dport 80 -j MARK --set-mark 99
在iptables 打上標記,把80端口標記為99
iptables -t mangle -A PREROUTING -d 172.16.100.100-p tcp --dport 443 -j MARK --set-mark 99
在iptables打上標記,把443端口標記為99
ipvsadm -A -f 99 -s rr -p
在lvs上建立基于99號標記的虛擬服務
ipvsadm -a -f 99 -r 172.16.100.2 -g
設置后端服務地址
ipvsadm -a -f 99 -r 172.16.100.3 -g
7、LVS 負載均衡集群企業(yè)級應用實戰(zhàn)
業(yè)務需求
隨著業(yè)務的發(fā)展,網(wǎng)站的訪問量越來越大,網(wǎng)站訪問量已經(jīng)從原來的1000QPS,變?yōu)?000QPS,網(wǎng)站已經(jīng)不堪重負,響應緩慢,面對此場景,單純靠單臺LNMP的架構已經(jīng)無法承載更多的用戶訪問,此時需要用負載均衡技術,對網(wǎng)站容量進行擴充,來解決承載的問題。
考慮解決方案?
橫向:scale out 對磁盤等資源
縱向:scale up 增加新的機器
1、環(huán)境準備
準備 3 臺純凈的虛擬機,一臺LVS,兩臺 web 服務器
2、LVS-server 安裝lvs管理軟件
[root@lvs-server ~]# yum -y install ipvsadm
ipvsadm啟不啟動都可以,但建議還是啟動
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
規(guī)則保存工具:/usr/sbin/ipvsadm-save > /path/to/file( /etc/sysconfig/ipvsadm) (沒有配置的話后面啟動將會報錯)
配置文件:/etc/sysconfig/ipvsadm-config
3、LVS/NAT模式
實驗說明:
- 虛擬機網(wǎng)絡使用NAT模式
- client、調度器、Real Server都使用虛擬機或使用真實服務器
- 虛擬機上網(wǎng)卡使用半虛擬化驅動,如果半虛擬化驅動異常,可以使用default/rtl8139

1、LVS/NAT網(wǎng)絡拓樸
| 主機名 | ip | 系統(tǒng) | 用途 |
|---|---|---|---|
| client | 192.168.0.105 橋接 | Windows | 客戶端 |
| lvs-server | 192.168.0.108 橋接 | ||
| 192.168.72.130 僅主機 | centos7.5 | 分發(fā)器 | |
| real-server1 | 192.168.72.128 僅主機 | centos7.5 | web1 |
| real-server2 | 192.168.72.129 僅主機 | centos7.5 | web2 |
# 配置real-server (兩服務器相同)
[root@real-server1 ~]# yum install httpd -y
[root@real-server1 ~]# echo lvs-web1 > /var/www/html/index.html
[root@real-server1 ~]# systemctl start httpd
[root@real-server1 ~]# ip route add default via 192.168.72.130 # 配置默認路由
網(wǎng)卡配置文件中有一條GATEWAY 就是永久指定網(wǎng)關的配置
# 配置lvs-server 開啟路由轉發(fā)
[root@lvs-server ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs-server ~]# sysctl -p //確保打開路由轉發(fā)
[root@lvs-server ~]# yum install ipvsadm -y
設置集群調度算法,(便于驗證,此處使用輪詢算法):
[root@lvs-server ~]# ipvsadm -A -t 192.168.0.108:80 -s rr
設置后端服務器:
[root@lvs-server ~]# ipvsadm -a -t 192.168.0.108:80 -r 192.168.72.128:80 -m
[root@lvs-server ~]# ipvsadm -a -t 192.168.0.108:80 -r 192.168.72.129:80 -m
查看ipvsadm規(guī)則:
[root@lvs-server ~]# 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.0.108:80 rr
-> 192.168.72.128:80 Masq 1 0 7
-> 192.168.72.129:80 Masq 1 0 7
這些規(guī)則沒有保存在配置文件,重啟失效
# 做開啟啟動
[root@lvs-server ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@lvs-server ~]# ipvsadm -Ln
[root@lvs-server ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs-server ~]# systemctl start ipvsadm
# 測試
[root@client ~]# elinks -dump http://192.168.0.108/
[root@client ~]# ab -c 1000 -n 1000 http://192.168.0.108/
4、LVS/DR 模式

1、實驗說明:
1.DR模式要求Director DIP 和 所有RealServer RIP必須在同一個網(wǎng)段及廣播域
2.所有節(jié)點網(wǎng)關均指定真實網(wǎng)關
| 主機名 | ip | 系統(tǒng) | 用途 |
|---|---|---|---|
| client | 192.168.0.110 | centos7.5 | 客戶端 |
| lvs_server | 192.168.0.107 | centos7.5 | 分發(fā)器 |
| real_server1 | 192.168.0.108 | centos7.5 | web1 |
| real_server2 | 192.168.0.019 | centos7.5 | web2 |
| vip for dr | 192.168.0.200/32 | 生產(chǎn)中是公網(wǎng)ip |
2、LVS/DR模式實施
1、準備工作(集群中所有主機)關閉防火墻和selinux
[root@lvs-server ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.107 lvs_server
192.168.0.108 real_server1
192.168.0.109 real_server2
2、Director分發(fā)器配置
配置VIP
[root@lvs_server ~]# ip addr add dev ens32 192.168.0.200/32 #設置VIP
[root@lvs_server ~]# yum install -y ipvsadm #RHEL確保LoadBalancer倉庫可用
[root@lvs_server ~]# systemctl start ipvsadm #啟動
注意:啟動如果報錯: /bin/bash: /etc/sysconfig/ipvsadm: 沒有那個文件或目錄
需要手動生成文件
[root@lvs_server ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
啟動之后一定要查看ipvsadm狀態(tài)
[root@lvs_server ~]# systemctl status ipvsadm
確保是正常啟動的
定義LVS分發(fā)策略
-A:添加VIP
-t:用的是tcp協(xié)議
-a:添加的是lo的vip地址
-r:轉發(fā)到realserverip
-s:算法
-L|-l –list #顯示內(nèi)核虛擬服務器表
--numeric, -n:#以數(shù)字形式輸出地址和端口號
-g --gatewaying #指定LVS工作模式為直接路由器模式(也是LVS默認的模式)
-S -save #保存虛擬服務器規(guī)則到標準輸出,輸出為-R 選項可讀的格式
rr:輪循
如果添加ip錯了,刪除命令如下:
# ip addr del dev ens33 192.168.0.200/32
[root@lvs_server ~]# ipvsadm -C #清除內(nèi)核虛擬服務器表中的所有記錄。
[root@lvs_server ~]# ipvsadm -A -t 192.168.0.200:80 -s rr //wrr加權輪詢
[root@lvs_server ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.108:80 -g /-w 2 權重為2
[root@lvs_server ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.109:80 -g /-w 1
[root@lvs_server ~]# service ipvsadm save #保存方式一,使用下面的保存方式,版本7已經(jīng)不支持了
[root@lvs_server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式二,保存到一個文件中
[root@lvs_server ~]# 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.0.200:80 rr
-> 192.168.0.108:80 Route 1 0 0
-> 192.168.0.109:80 Route 1 0 0
[root@lvs_server ~]# ipvsadm -L -n
[root@lvs_server ~]# ipvsadm -L -n --stats #顯示統(tǒng)計信息
1. Conns (connections scheduled) 已經(jīng)轉發(fā)過的連接數(shù)
2. InPkts (incoming packets) 入包個數(shù)
3. OutPkts (outgoing packets) 出包個數(shù)
4. InBytes (incoming bytes) 入流量(字節(jié))
5. OutBytes (outgoing bytes) 出流量(字節(jié))
[root@lvs-server ~]# ipvsadm -L -n --rate #看速率
1. CPS (current connection rate) 每秒連接數(shù)
2. InPPS (current in packet rate) 每秒的入包個數(shù)
3. OutPPS (current out packet rate) 每秒的出包個數(shù)
4. InBPS (current in byte rate) 每秒入流量(字節(jié))
5. OutBPS (current out byte rate) 每秒出流量(字節(jié))
3、所有RS配置
配置好網(wǎng)站服務器,測試所有RS #為了測試效果,提供不同的頁面(以下兩臺real-server都操作)
[root@real_server1 ~]# yum install -y nginx
[root@real_server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
兩臺機器都安裝,按順序添加不同的主機名以示區(qū)分
[root@real_server1 ~]# ip addr add dev lo 192.168.0.200/32 #在lo接口上綁定VIP
#永久:rc.local 或者 復制ifcfg-lo文件,重新配置
[root@real_server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp廣播
[root@real_server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精確ip地址回包
[root@real_server1 ~]# systemctl start nginx
[root@real_server1 ~]# systemctl enable nginx
=============================================================================
因為:realServer的vip有了,接著就是同一個網(wǎng)段中擁有兩個vip, 客戶端在網(wǎng)關發(fā)送arp廣播需找vip時需要讓realServer不接受響應.
解決:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 設置為1,意味著當別人的arp請求過來的時候,如果接收的設備沒有這個ip,就不做出響應(這個ip在lo上,lo不是接收設備的進口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
使用最好的ip來回應,什么是最好的ip?同一個網(wǎng)段內(nèi)子網(wǎng)掩碼最長的
4、測試
[root@client ~]# curl 192.168.0.200
real-server1
[root@client ~]# curl 192.168.0.200
real-server2
LVS的調度算法
LVS的調度算法分為靜態(tài)與動態(tài)兩類。
1、靜態(tài)算法(4種)
只根據(jù)算法進行調度 而不考慮后端服務器的實際連接情況和負載情況
①.RR:輪叫調度(Round Robin)
調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數(shù)和系統(tǒng)負載?
②.WRR:加權輪叫(Weight RR)
調度器通過“加權輪叫”調度算法根據(jù)真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,并動態(tài)地調整其權值。
③.DH:目標地址散列調度(Destination Hash )
根據(jù)請求的目標IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空。
④.SH:源地址 hash(Source Hash)
源地址散列”調度算法根據(jù)請求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空?
2、動態(tài)算法(6種)
前端的調度器會根據(jù)后端真實服務器的實際連接情況來分配請求
①.LC:最少鏈接(Least Connections)
調度器通過”最少連接”調度算法動態(tài)地將網(wǎng)絡請求調度到已建立的鏈接數(shù)最少的服務器上。如果集群系統(tǒng)的真實服務器具有相近的系統(tǒng)性能,采用”最小連接”調度算法可以較好地均衡負載。
②.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)
在集群系統(tǒng)中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優(yōu)化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載?調度器可以自動問詢真實服務器的負載情況,并動態(tài)地調整其權值。
③.SED:最短期望延遲調度(Shortest Expected Delay )
在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態(tài),把當前處于活動狀態(tài)的數(shù)目+1來實現(xiàn),數(shù)目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處于無連接狀態(tài)。
A B C 服務器
1 2 3 權重
(1+1)/1=2 A
(1+2)/2=1.5 B
(1+3)/2=4/3 C (最小)
④.NQ:永不排隊/最少隊列調度(Never Queue Scheduling NQ)
無需隊列。如果有臺 realserver的連接數(shù)=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。
⑤.LBLC:基于局部性的最少鏈接(locality-Based Least Connections)
基于局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發(fā)送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發(fā)送到該服務器?
⑥. LBLCR:帶復制的基于局部性最少連接(Locality-Based Least Connections with Replication)
帶復制的基于局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射?該算法根據(jù)請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發(fā)送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發(fā)送到該服務器?同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。