創(chuàng)新互聯(lián)公司主營(yíng)潼關(guān)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),潼關(guān)h5微信平臺(tái)小程序開發(fā)搭建,潼關(guān)網(wǎng)站營(yíng)銷推廣歡迎潼關(guān)等地區(qū)企業(yè)咨詢
下文給大家?guī)鞮VS是如何實(shí)現(xiàn)web服務(wù)的負(fù)載均衡,希望能夠給大家在實(shí)際運(yùn)用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來做一個(gè)解答。
我們知道LVS項(xiàng)目已提供了一個(gè)實(shí)現(xiàn)可伸縮網(wǎng)絡(luò)服務(wù)的Linux Virtual Server框架。在LVS框架中,提供了含有三種"IP負(fù)載均衡技術(shù)"的IP虛擬 1)ipvsadm語法 2)Ipvsadm選項(xiàng)介紹ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [-b sched-flags]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid syncid]
ipvsadm --stop-daemon state
ipvsadm -h
選項(xiàng) | 說明 |
-A (--add-service) | 在內(nèi)核的虛擬服務(wù)器列表中添加一條新的虛擬IP記錄。也就是增加一臺(tái)新的虛擬服務(wù)器。虛擬IP也就是虛擬服務(wù)器的IP地址。 |
-E (--edit-service) | 編輯內(nèi)核虛擬服務(wù)器列表中的一條虛擬服務(wù)器記錄 |
-D (--delete-service) | 刪除內(nèi)核虛擬服務(wù)器列表中的一條虛擬服務(wù)器記錄 |
-C (--clear) | 清除內(nèi)核虛擬服務(wù)器列表中的所有規(guī)則 |
-R (--restore) | 恢復(fù)虛擬服務(wù)器規(guī)則 |
-S (--save) | 保存虛擬服務(wù)器規(guī)則,輸出為-R 選項(xiàng)可讀的格式 |
-a (--add-server) | 在內(nèi)核虛擬服務(wù)器列表的一條記錄里添加一條新的Real Server記錄。也就是在一個(gè)虛擬服務(wù)器中增加一臺(tái)新的Real Server |
-e (--edit-server) | 編輯一條虛擬服務(wù)器記錄中的某條Real Server記錄 |
-d (--delete-server) | 刪除一條虛擬服務(wù)器記錄中的某條Real Server記錄 |
-L|-l –list | 顯示內(nèi)核中虛擬服務(wù)器列 |
-t | 說明虛擬服務(wù)器提供的是tcp服務(wù),此選項(xiàng)后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] |
-u | 說明虛擬服務(wù)器提供的是udp服務(wù),此選項(xiàng)后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] |
-f fwmar | 說明是經(jīng)過iptables標(biāo)記過的服務(wù)類型 |
-s | 此選項(xiàng)后面跟LVS使用的調(diào)度算法;有這樣幾個(gè)選項(xiàng):rr|wrr|lc|wlc|lblc|lblcr|dh|sh。默認(rèn)的調(diào)度算法是: wlc |
-p [timeout] | 在某個(gè)Real Server上持續(xù)的服務(wù)時(shí)間。也就是說來自同一個(gè)用戶的多次請(qǐng)求,將被同一個(gè)Real Server處理。此參數(shù)一般用于有動(dòng)態(tài)請(qǐng)求的操作中,timeout的默認(rèn)值為360s(幫助文檔寫的是300s)。例如:-p 100,表示持續(xù)服務(wù)時(shí)間為00s。 |
-r | 指定Real Server的IP地址,此選項(xiàng)后面跟如下格式:[real-server-ip:port] |
-g (--gatewaying) | 指定LVS 的工作模式為直接路由模式(此模式是LVS 默認(rèn)工作模式) |
-i (-ipip) | 指定LVS 的工作模式為隧道模式 |
-m (--masquerading) | 指定LVS 的工作模式為NAT模式 |
-w (--weight) weight | 指定Real Server的權(quán)值 |
-c (--connection) | 顯示LVS目前的連接信息 例如:ipvsadm -L -c |
-L --timeout | 顯示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout |
-L --daemon | 顯示同步守護(hù)進(jìn)程狀態(tài),例如:ipvsadm -L –daemon |
-L --stats | 顯示統(tǒng)計(jì)信息,例如:ipvsadm -L –stats |
-L --rate | 顯示速率信息,例如:ipvsadm -L --rate |
3)說明: 保存添加的虛擬ip記錄和ipvsadm的規(guī)則可以使用service ipvsadm save,還可以用-S或--save。清除所有記錄和規(guī)則除了使用-C,還以使用--clear。
2 web服務(wù)的負(fù)載均衡
1)實(shí)驗(yàn)準(zhǔn)備:準(zhǔn)備4臺(tái)虛擬機(jī)
@@一臺(tái)作為VS服務(wù)器
@@一臺(tái)作為客戶端
@@兩臺(tái)主機(jī)作為web服務(wù)器,當(dāng)然了,不只是web服務(wù)器。這里只是為了實(shí)驗(yàn)方便,web服務(wù)最常見,
2)網(wǎng)絡(luò)拓?fù)浼暗刂芬?guī)劃
3)環(huán)境配置
為了實(shí)驗(yàn)?zāi)茼樌麑?shí)現(xiàn),關(guān)閉防火墻和selinux;注意這只是實(shí)驗(yàn)環(huán)境中。
[root@vin ~]# iptables -F # 清空防火墻規(guī)則 [root@vin ~]# setenforce 0 # 臨時(shí)禁用selinux [root@vin ~]#
4)web服務(wù)器配置
為了讓我們看清楚LVS是如何調(diào)度的,我們特意將兩臺(tái)web服務(wù)器的index.html頁(yè)面設(shè)置的不一樣。
@@安裝服務(wù):
[root@vin ~]# yum install httpd -y [root@vin ~]# echo "Linux web1" > /var/www/html/index.html # 修改主頁(yè),web2的主頁(yè)內(nèi)容修改為L(zhǎng)inux web2
@@設(shè)置路由:只留一個(gè)網(wǎng)卡并且將網(wǎng)關(guān)指向Director
[root@vin ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.14.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 0.0.0.0 192.168.14.77 0.0.0.0 UG 0 0 0 ens33
5)VS調(diào)度器設(shè)置
@@ 安裝ipvsadm工具
[root@vin ~]# yum install ipvsadm -y # yum安裝,不過我已經(jīng)安裝了 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Package ipvsadm-1.27-7.el7.x86_64 already installed and latest version Nothing to do [root@vin ~]# mount /dev/sr0 /mnt # 掛載光盤 mount: /dev/sr0 is write-protected, mounting read-only [root@vin ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm # rpm安裝 [root@vin ~]#
@@ 開啟核心轉(zhuǎn)發(fā)功能
[root@vin ~]# echo 1 > /proc/sys/net/ipv4/ip_forword
@@ 定義集群服務(wù)
[root@vin ~]# ipvsadm -A -t 172.18.14.100:80 -s wrr [root@vin ~]# ipvsadm -a -t 172.18.14.100:80 -r 192.168.14.55 -m -w 3 # 定義web1的權(quán)重為3 [root@vin ~]# ipvsadm -a -t 172.18.14.100:80 -r 192.168.14.66 -m -w 1 # 定義web2的權(quán)重為1(默認(rèn)也是1;可省略) [root@vin ~]# ipvsadm -Ln # 查看幾區(qū)服務(wù) IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.18.14.100:80 wrr -> 192.168.14.55:80 Masq 3 0 0 -> 192.168.21.66:80 Masq 1 0 0
6)測(cè)試
在客戶端使用for循環(huán)向VIP發(fā)起http訪問請(qǐng)求
[root@vint ~]# for i in {1..10};do curl Linux web1 Linux web1 Linux web2 Linux web2 Linux web2 Linux web1 Linux web2 Linux web2 Linux web2 Linux web1 Linux web2
7)結(jié)果分析
觀察訪問結(jié)果,我們發(fā)現(xiàn),LVS根據(jù)我們的算法WRR(加權(quán)輪詢)及對(duì)應(yīng)的權(quán)重(3,1)進(jìn)行了調(diào)度。
3 實(shí)現(xiàn)http與https同時(shí)調(diào)度
方案一:同過添加兩個(gè)集群服務(wù),分別針對(duì)http和https的訪問
1)原理剖析:
要實(shí)現(xiàn)http(上面我們已經(jīng)實(shí)現(xiàn)了)與https的調(diào)度,我們第一步要做的就是:為兩臺(tái)服務(wù)提供CA證書,而且這兩個(gè)服務(wù)器上的CA證書必須完全相同(可以采取先給一個(gè)授權(quán),在復(fù)制到另外一臺(tái)服務(wù)器上),這里我們可以使用Director作為根CA的頒發(fā)機(jī)構(gòu)來頒發(fā)證書,也可以使用web服務(wù)器的自簽名證書。然后我們?cè)赩S服務(wù)器上在添加一個(gè)用于https進(jìn)行調(diào)度的集群服務(wù),從而實(shí)現(xiàn)調(diào)度。
2)在web服務(wù)器上實(shí)現(xiàn)https服務(wù)
@@生成證書:這里就不在說怎么實(shí)現(xiàn)CA了,請(qǐng)參考博客:http://vinsent.blog.51cto.com/13116656/1964034
3)VS上添加集群服務(wù)
[root@vin ~]# ipvsadm -A -t 172.18.14.100:443 -s wrr [root@vin ~]# ipvsadm -a -t 172.18.14.100:443 -r 192.168.14.55 -m -w 3 # 定義web1的權(quán)重為3 [root@vin ~]# ipvsadm -a -t 172.18.14.100:443 -r 192.168.14.66 -m -w 1 # 定義web2的權(quán)重為1(默認(rèn)也是1;可省略) [root@vin ~]# ipvsadm -Ln # 查看幾個(gè)集群服務(wù) IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.18.14.100:80 wrr -> 192.168.14.55:80 Masq 3 0 0 -> 192.168.21.66:80 Masq 1 0 0 TCP 172.18.14.100:443 wrr -> 192.168.14.55:443 Masq 3 0 0 -> 192.168.21.66:443 Masq 1 0 0
4)測(cè)試
[root@vint ~]# for i in {1..10};do curl http://172.18.14.100;curl
方案二:使用防火墻標(biāo)記,實(shí)現(xiàn)http與https的統(tǒng)一調(diào)度。
1)明晰思路
上面實(shí)現(xiàn)了http與https通過LVS的調(diào)度分別按相應(yīng)算法調(diào)度,但是他們的調(diào)度依然各是各的,我們?cè)趺茨茏孷S服務(wù)將http與https能夠看成一個(gè)服務(wù)進(jìn)行調(diào)度呢,此時(shí)我們想到了Netfilter中的MANGLE表,我們可以在防火墻上做策略,讓訪問我的https和http服務(wù)的請(qǐng)求給他們打上標(biāo)記MARK,這樣,在調(diào)度的時(shí)候,我們只需要根據(jù)MARK實(shí)現(xiàn)調(diào)度即可,至于他是究竟是http還是https我們便不在關(guān)心。
2)在VS上配置iptables規(guī)則
[root@vint ~]# iptables -F [root@vint ~]# iptables -F -t nat # 保證防墻上沒有其他規(guī)則干擾;注意:這只是實(shí)驗(yàn)環(huán)境 [root@vint ~]# iptables -A -t mangle PREROUTING -p tcp -m multiport --dport 80,443 \ >-d 172.18.14.100 -j MARK --set-mark 10
3)設(shè)置LVS集群服務(wù)
由于我們將二者集合起來調(diào)度,在Director看來,http訪問與https訪問都是同一個(gè)服務(wù),所以我們想清空原有的集群服務(wù),在重新添加集群服務(wù)。
[root@vint ~]# ipvsadm -C [root@vint ~]# ipvsadm -Ln # 確保規(guī)則清除 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@vint ~]# ipvsadm -Z # 清空計(jì)數(shù)器 [root@vin ~]# ipvsadm -A -t -f 10 -s wrr [root@vin ~]# ipvsadm -a -t -f -r 192.168.14.55 -m -w 3 # 定義web1的權(quán)重為3 [root@vin ~]# ipvsadm -a -t -f -r 192.168.14.66 -m -w 1 # 定義web2的權(quán)重為1(默認(rèn)也是1;可省略)
4)測(cè)試
[root@vint ~]# for i in {1..10};do curl http://172.18.14.100;curl https://172.18.14.100;done
看了以上關(guān)于LVS是如何實(shí)現(xiàn)web服務(wù)的負(fù)載均衡,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。