實現基於LVS負載均衡集羣的電商網站架構

背景php

上一期咱們搭建了小米網站,隨着業務的發展,網站的訪問量愈來愈大,網站訪問量已經從原來的1000QPS,變爲3000QPS,網站已經不堪重負,響應緩慢,面對此場景,單純靠單臺LNMP的架構已經沒法承載更多的用戶訪問,此時須要用負載均衡技術,對網站容量進行擴充,來解決承載的問題。scale out? scale up?

技術說明

集羣(cluster)技術是一種較新的技術,經過集羣技術,能夠在付出較低成本的狀況下得到在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集羣系統中的核心技術。
集羣是一組相互獨立的、經過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互做用時,集羣像是一個獨立的服務器。
集羣組成後,能夠利用多個計算機和組合進行海量請求處理( 負載均衡),從而得到很高的處理效率,也能夠用多個計算機作備份 高可用),使得任何一個機器壞了整個系統仍是能正常運行。集羣在目前互聯網公司是必備的技術,極大提升互聯網業務的可用性和可縮放性。

負載均衡集羣技術

負載均衡(Load Balance)負載均衡集羣爲企業需求提供了可解決容量問題的有效方案。負載均衡集羣使負載能夠在計算機集羣中儘量平均地分攤處理。
負載一般包括應用程序處理負載和網絡流量負載。這樣的系統很是適合向使用同一組應用程序的大量用戶提供服務。每一個節點均可以承擔必定的處理負載,而且能夠實現處理負載在節點之間的動態分配,以實現負載均衡。對於網絡流量負載,當網絡服務程序接受了高入網流量,以至沒法迅速處理,這時,網絡流量就會發送給在其它節點上運行的網絡服務程序。也可根據服務器的承載能力,進行服務請求的分發,從而使用戶的請求獲得更快速的處理。

負載均衡集羣技術實現

負載均衡(Load Balance)
負載均衡技術類型: 基於4層負載均衡技術和基於7層負載均衡技術
負載均衡實現方式: 硬件負載均衡設備或者軟件負載均衡
硬件負載均衡產品: F5 BIG-IP 、Citrix Netscaler 、深信服 、Array 、Radware
軟件負載均衡產品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

負載均衡技術演示圖

 lvs是實現負載均衡技術的一種,下面來介紹一下lvs前端

LVS是什麼

LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。如今LVS已是 Linux標準內核的一部分,在Linux2.4內核之前,使用LVS時必需要從新編譯內核以支持LVS功能模塊,可是從Linux2.4內核之後,已經徹底內置了LVS的各個功能模塊,無需給內核打任何補丁,能夠直接使用LVS提供的各類功能。
LVS自從1998年開始,發展到如今已是一個比較成熟的技術項目了。能夠利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集羣系統,例如:Linux的門戶網(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。
LVS軟件做用:經過LVS提供的負載均衡技術和Linux操做系統實現一個高性能、高可用的服務器羣集,它具備良好可靠性、可擴展性和可操做性。從而以低廉的成本實現最優的服務性能。

LVS特性

高併發鏈接:LVS基於內核網絡層面工做,有超強的承載能力和併發處理能力。單臺LVS負載均衡器,可支持上萬併發鏈接。穩定性強:是工做在網絡4層之上僅做分發之用,這個特色也決定了它在負載均衡軟件裏的性能最強,穩定性最好,對內存和cpu資源消耗極低。
成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高。
配置簡單:LVS配置很是簡單,僅需幾行命令便可完成配置,也可寫成腳本進行管理。
支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用
支持多種工做模型:可根據業務場景,使用不一樣的工做模式來解決生產環境請求處理問題。
應用範圍廣:由於LVS工做在4層,因此它幾乎能夠對全部應用作負載均衡,包括http、數據庫、DNS、ftp服務等等
缺點:工做在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。

LVS工做流程圖

LVS工做內核模型

1.當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
2.當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
3.LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工做,IPVS工做在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,若是數據包裏面的目的地址及端口沒有在規則裏面,那麼這條數據包將被放行至用戶空間。
4.若是數據包裏面的目的地址及端口在規則裏面,那麼這條數據報文將被修改目的地址爲事先定義好的後端服務器,並送往POSTROUTING鏈。
5.最後經由POSTROUTING鏈發日後端服務器。
 

LVS負載均衡NAT工做流程

(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c). IPVS比對數據包請求的服務是否爲集羣服務,如果,修改數據包的目標IP地址爲後端服務器IP,而後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP
(d). POSTROUTING鏈經過選路,將數據包發送給Real Server
(e). Real Server比對發現目標爲本身的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP
(f). Director Server在響應客戶端前,此時會將源IP地址修改成本身的VIP地址,而後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP

 

實驗:負載均衡集羣企業級應用實戰-LVS-nat模式

實驗環境:
一臺DR負載均衡器,兩塊網卡,一塊橋接172.17.253.132,一塊僅主機192.168.10.200
兩臺後端服務器,一塊網卡僅主機192.168.10.188和192.168.10.189,實現過基於lnmp的電子商務網站的服務器

一.在DR負載均衡器配置

1.yum install ipvsadm -y
2.grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64,#查看內核是否支持ipvs模塊
3.iptables -F ;setenf orce 0清空防火牆策略,關閉selinux策略
4.ipvsadm -A -t 172.17.253.132:80 -s wrr #開啓一個基於80端口的虛擬web服務,調度算法爲wrr
5.ipvsadm -a -t 172.17.253.132:80 -r 192.168.10.188:80 -m -w1 #配置web服務後端服務器爲nat工做方式,權重爲1
ipvsadm -a -t 172.17.253.132:80 -r 192.168.10.189:80 -m -w1
6.修改內核配置,開啓路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使修改的內和配置參數生效

二.在real server配置

iptables -F ;setenforce 0清空防火牆策略,關閉selinux策略
配置網關指向192.168.10.200,開啓nginx,php-fpm,mariadb服務
route add defult gw 192.168.10.200

三,驗證

在瀏覽器上訪問172.17.253.132
 

LVS負載均衡DR工做模式

Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬服務器。當參與集羣的計算機和做爲控制管理的計算機在 同一個網段時能夠用此方法,控制管理的計算機接收到請求包時直接送到參與集羣的節點。直接路由模式比較特別,很難說和什麼方面類似,前種模式基本上都是工做在網絡層上(三層),而直接路由模式則應該是工做在數據鏈路層上(二層)。
工做原理 :DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,全部REAL SERVER對自己這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求所有定向給DR,而DR收到數據包後根據調度算法,找出對應的 REAL SERVER,把目的MAC地址改成REAL SERVER的MAC併發給這臺REAL SERVER。這時REAL SERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。因爲DR要對二層包頭進行改換,因此DR和REAL SERVER之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上。

數據包到後端服務器時通過負載均衡器,回來的時候,直接發送到客戶端,不通過負載均衡器,大大提升了效率。mysql

LVS負載均衡DR工做流程

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,而後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
(d) 因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是本身的MAC地址,就接收此報文。處理完成以後,將響應報文經過lo接口傳送給eth0網卡而後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端

特色:

一、保證前端路由將目標地址爲VIP報文通通發給Director Server,而不是RS
二、RS可使用私有地址;也能夠是公網地址,若是使用公網地址,此時能夠經過互聯網對RIP進行直接訪問
三、RS跟Director Server必須在同一個物理網絡中
四、全部的請求報文經由Director Server,但響應報文必須不能進過Director Server
五、不支持地址轉換,也不支持端口映射
六、RS能夠是大多數常見的操做系統
七、RS的網關毫不容許指向DIP(由於咱們不容許他通過director)
八、RS上的lo接口配置VIP的IP地址

實驗:負載均衡集羣企業級應用實戰-LVS-DR模式:

實驗環境:一臺DR負載均衡器,一塊網卡172.17.253.132,橋接,兩臺臺後端服務器172.17.251.236和172.17.253.253,各一塊網卡,橋接

一,在DR負載均衡器上

1.yum install ipvsadm -y
2.grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64,#查看內核是否支持ipvs模塊
3.iptables -F ;setenf orce 0清空防火牆策略,關閉selinux策略
4. ifconfig ens33:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up #配置VIP到本地網卡別名ens33:0上(vip地址能夠是隨意的),而且只廣播本身,不然,未來會和後端服務器上回環網卡上配置的vip衝突,因此在後端服務器上配置的vip也只廣播本身
5.route add -host 172.17.253.100 dev ens33:0 #配置vip路由
6.ipvsadm -A -t 172.17.253.100:80 -s wrr #開啓一個基於80端口的虛擬web服務,調度方式爲wrr
7.ipvsadm -a -t 172.17.253.100:80 -r 172.17.253.132:80 -g -w 1 #配置web服務後端real server 爲DR工做方式 權重爲1
ipvsadm -a -t 172.17.253.100:80 -r 172.17.253.253:80 -g -w 1
8.修改內核配置,開啓路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使修改的內核配置參數生效

二,在RS後端服務器上

iptables -F ;setenforce 0清空防火牆策略,關閉selinux策略
1.ifconfig lo:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up #配置VIP到本地迴環網卡lo上,並只廣播本身
2.route add -host 172.17.253.100 lo:0 #配置本地迴環網卡路由
3.
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
#1 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
#2 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#關閉arp應答
(1): 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應
(2):必須避免將接口信息向非本網絡進行通告
4.開啓web、php-fpm、mysql服務

三,驗證

在瀏覽器上訪問172.17.253.100(vip)
好了,這期的內容就到這裏,下期再見。
相關文章
相關標籤/搜索