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

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

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

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

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

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

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