LVS实现web服务的负载均衡
本節(jié)索引
Ipvsadm工具介紹
Web服務(wù)的負(fù)載均衡
實(shí)現(xiàn)http與https的同時(shí)調(diào)度
1 ipvsadm工具
我們知道LVS項(xiàng)目已提供了一個(gè)實(shí)現(xiàn)可伸縮網(wǎng)絡(luò)服務(wù)的Linux Virtual Server框架。在LVS框架中,提供了含有三種"IP負(fù)載均衡技術(shù)"的IP虛擬服務(wù)器軟件"IPVS"、"基于內(nèi)容請(qǐng)求分發(fā)的內(nèi)核Layer-7交 換機(jī)KTCPVS"和"集群管理軟件"。這里主要說(shuō)說(shuō)”IP負(fù)載均衡技術(shù)”他的管理工具就是ipvsadm。
1)ipvsadm語(yǔ)法
ipvsadm?-A|E?-t|u|f?service-address?[-s?scheduler]?[-p?[timeout]]?[-M?netmask]?[-b?sched-flags]ipvsadm?-D?-t|u|f?service-addressipvsadm?-Cipvsadm?-Ripvsadm?-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-addressipvsadm?-L|l?[options]ipvsadm?-Z?[-t|u|f?service-address]ipvsadm?--set?tcp?tcpfin?udpipvsadm?--start-daemon?state?[--mcast-interface?interface]?[--syncid?syncid]ipvsadm?--stop-daemon?stateipvsadm?-h2)Ipvsadm選項(xiàng)介紹
| 選項(xiàng) | 說(shuō)明 |
| -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 | 說(shuō)明虛擬服務(wù)器提供的是tcp服務(wù),此選項(xiàng)后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] |
| -u | 說(shuō)明虛擬服務(wù)器提供的是udp服務(wù),此選項(xiàng)后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] |
| -f fwmar | 說(shuō)明是經(jīng)過(guò)iptables標(biāo)記過(guò)的服務(wù)類(lèi)型 |
| -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í)間。也就是說(shuō)來(lái)自同一個(gè)用戶的多次請(qǐng)求,將被同一個(gè)Real Server處理。此參數(shù)一般用于有動(dòng)態(tài)請(qǐng)求的操作中,timeout的默認(rèn)值為360s(幫助文檔寫(xiě)的是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)說(shuō)明: 保存添加的虛擬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ù)最常見(jiàn),??
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ù):
@@設(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?ens335)VS調(diào)度器設(shè)置
@@ 安裝ipvsadm工具
[root@vin?~]#?yum?install?ipvsadm?-y????????#?yum安裝,不過(guò)我已經(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?????????????#?掛載光盤(pán) 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?~]#
@@ 開(kāi)啟核心轉(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??????????06)測(cè)試
在客戶端使用for循環(huán)向VIP發(fā)起http訪問(wèn)請(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?web27)結(jié)果分析
觀察訪問(wèn)結(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)度
方案一:同過(guò)添加兩個(gè)集群服務(wù),分別針對(duì)http和https的訪問(wèn)
1)原理剖析:
要實(shí)現(xiàn)http(上面我們已經(jīng)實(shí)現(xiàn)了)與https的調(diào)度,我們第一步要做的就是:為兩臺(tái)服務(wù)提供CA證書(shū),而且這兩個(gè)服務(wù)器上的CA證書(shū)必須完全相同(可以采取先給一個(gè)授權(quán),在復(fù)制到另外一臺(tái)服務(wù)器上),這里我們可以使用Director作為根CA的頒發(fā)機(jī)構(gòu)來(lái)頒發(fā)證書(shū),也可以使用web服務(wù)器的自簽名證書(shū)。然后我們?cè)赩S服務(wù)器上在添加一個(gè)用于https進(jìn)行調(diào)度的集群服務(wù),從而實(shí)現(xiàn)調(diào)度。
2)在web服務(wù)器上實(shí)現(xiàn)https服務(wù)
@@生成證書(shū):這里就不在說(shuō)怎么實(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??????????04)測(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通過(guò)LVS的調(diào)度分別按相應(yīng)算法調(diào)度,但是他們的調(diào)度依然各是各的,我們?cè)趺茨茏孷S服務(wù)將http與https能夠看成一個(gè)服務(wù)進(jìn)行調(diào)度呢,此時(shí)我們想到了Netfilter中的MANGLE表,我們可以在防火墻上做策略,讓訪問(wèn)我的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????#?保證防墻上沒(méi)有其他規(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?103)設(shè)置LVS集群服務(wù)
由于我們將二者集合起來(lái)調(diào)度,在Director看來(lái),http訪問(wèn)與https訪問(wèn)都是同一個(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筆者便簽
感謝您能讀到最后,如果這篇文章能讓你有所收獲,那將是我的榮幸,如果沒(méi)能幫到你,那就在送你一句話,與君共勉:If a thing is worth doing it is worth worth doing well ---- 事情值得做,就值得好好做。
轉(zhuǎn)載于:https://blog.51cto.com/vinsent/1975378
總結(jié)
以上是生活随笔為你收集整理的LVS实现web服务的负载均衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 配置kubernetes服务basic
- 下一篇: Servlet3.1规范翻译 - 应用生