大型网站的负载均衡器、db proxy和db
大型網(wǎng)站的負(fù)載均衡器、db proxy和db
本文主要分析網(wǎng)站后臺架構(gòu)中的負(fù)載均衡器,企業(yè)常用的硬件負(fù)載均衡器軟件負(fù)載均衡器、數(shù)據(jù)庫代理服務(wù)器和數(shù)據(jù)庫。
1.1 負(fù)載均衡
在大型網(wǎng)站部署中,負(fù)載均衡至少有三層部署。第一層為web server或者緩存代理之上的負(fù)載均衡,第二層為數(shù)據(jù)庫之上的負(fù)載均衡,第三層為存儲設(shè)備之上的負(fù)載均衡。
在第一層部署中,最常使用的是硬件負(fù)載均衡器有F5 BIG-IP、Citrix NetScaler、Radware、Cisco CSS、Foundry等產(chǎn)品。這些產(chǎn)品價格不菲,高達(dá)幾十萬人民幣。在中國大陸,采用F5Network公司的BIG-IP負(fù)載均衡交換機的網(wǎng)站有新浪網(wǎng)、雅虎、百度、搜狐、鳳凰網(wǎng)、央視國際、中華英才網(wǎng)、貓撲、暢游等。之前淘寶采用 NetScaler作為其硬件負(fù)載均衡器。后來用軟件負(fù)載均衡器LVS和HAproxy混合使用來代替硬件負(fù)載均衡器。硬件負(fù)載均衡器可以提供OSI參考模型的第四/七層進行負(fù)載均衡。在第七層實現(xiàn)負(fù)載均衡的原理是,通過檢查流經(jīng)的HTTP報頭,根據(jù)報頭內(nèi)的信息來執(zhí)行負(fù)載均衡任務(wù)。在第四層(網(wǎng)絡(luò)層)實現(xiàn)負(fù)載均衡的DR模式的原理是,通過更改請求包的目的MAC地址來進行負(fù)載均衡。
在第一層部署中,最常用的軟件負(fù)載均衡器為LVS(LinuxVirtual Server)和HAproxy。其中LVS采用基于IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。最常用的LVS負(fù)載均衡技術(shù)為DR負(fù)載均衡。
在第二層部署中,最常用的為mysql-proxy(后端部署必須為MySQL數(shù)據(jù)庫),該代理服務(wù)器可以監(jiān)測、分析或改變客戶端的通信。最常用途為負(fù)載均衡,讀寫分離等。
在第三層部署中,最常用的存儲設(shè)備都要做RAID,其中RAID0便為最基本的存儲層的負(fù)載均衡。RAID0通過分帶技術(shù),將數(shù)據(jù)分割,然后并行的讀寫于各個磁盤上。這樣實現(xiàn)底層存儲一級的負(fù)載均衡。
?
1.2 LVS軟件負(fù)載均衡器
LVS(LinuxVirtual Server)是由章文嵩博士主導(dǎo)開發(fā)的一款開源軟件,可以實現(xiàn)Linux平臺下的基于網(wǎng)絡(luò)層的負(fù)載均衡軟件。典型的基本架構(gòu)圖如圖6-2-1所示。
???????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖6-2-1
LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。
如圖6-2-1所示,LVS集群采用基于IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。當(dāng)客戶端有請求時,首先將請求包傳送到Load Balance,然后Load Balance從后面的Real Servers中按照一定的算法策略選取一臺Real Server,比如Real Server1,然后把請求包發(fā)送給Real Server1進行處理。對所有用戶而言,面向用戶的服務(wù)器端IP地址,只有一臺,稱之為VirtualIP Address。
?
1.2.1 LVS集群中實現(xiàn)的三種IP負(fù)載均衡技術(shù)
VS/NAT、 VS/TUN 和VS/DR技術(shù)是LVS集群中實現(xiàn)的三種IP負(fù)載均衡技術(shù)。
1.2.1.1 VS/NAT技術(shù)
VS/NAT(VirtualServer via Network Address Translation)技術(shù),主要通過網(wǎng)絡(luò)地址轉(zhuǎn)換,將一組服務(wù)器構(gòu)成一個高性能的、高可用的虛擬服務(wù)器。NAT的工作原理是當(dāng)內(nèi)部網(wǎng)絡(luò)中的主機要訪問Internet或被Internet訪問時,就需要采用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT,將內(nèi)部地址轉(zhuǎn)化為Internet上可用的外部地址。NAT的工作原理是報文頭(目標(biāo)地址、源地址和端口等)被正確改寫后,客戶端相信他們連接到了一個IP地址,而不同的IP地址服務(wù)器組也認(rèn)為他們與客戶直接相連的。由此,可以用NAT方法將不同IP地址的并行網(wǎng)絡(luò)服務(wù)變成一個IP地址上的虛擬服務(wù)。VS/NAT的體系結(jié)構(gòu)如圖6-2-1-1所示。
???????????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖6-2-1-1
客戶端訪問服務(wù)器的請求包和響應(yīng)包變化情況如下所示:
訪問Web服務(wù)的報文可能有以下的源地址和目標(biāo)地址:
| SOURCE | 202.100.1.2:3456 | DEST | 202.103.106.5:80 |
調(diào)度器從調(diào)度列表中選出一臺服務(wù)器,例如是172.16.0.3:8000。該報文會被改寫為如下地址,并將它發(fā)送給選出的服務(wù)器。
| SOURCE | 202.100.1.2:3456 | DEST | 172.16.0.3:8000 |
從服務(wù)器返回到調(diào)度器的響應(yīng)報文如下:
| SOURCE | 172.16.0.3:8000 | DEST | 202.100.1.2:3456 |
響應(yīng)報文的源地址會被改寫為虛擬服務(wù)的地址,再將報文發(fā)送給客戶:
| SOURCE | 202.103.106.5:80 | DEST | 202.100.1.2:3456 |
這樣,客戶認(rèn)為是從202.103.106.5:80服務(wù)得到正確的響應(yīng),而不會知道該請求是服務(wù)器172.16.0.2還是服務(wù)器172.16.0.3處理的。
1.2.1.2 VS/TUN技術(shù)
VS/TUN 的工作原理:它的連接調(diào)度和管理與VS/NAT中的一樣,只是它的報文轉(zhuǎn)發(fā)方法不同。調(diào)度器根據(jù)各個服務(wù)器的負(fù)載情況,動態(tài)地選擇一臺服務(wù)器,將請求報文封裝在另一個IP報文中,再將封裝后的IP報文轉(zhuǎn)發(fā)給選出的服務(wù)器;服務(wù)器收到報文后,先將報文解封獲得原來目標(biāo)地址為VIP的報文,服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上,所以就處理這個請求,然后根據(jù)路由表將響應(yīng)報文直接返回給客戶。如圖6-2-1-2所示。
?????????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖6-2-1-2
1.2.1.3 VS/DR技術(shù)
在VS/DR中,調(diào)度器根據(jù)各個服務(wù)器的負(fù)載情況,動態(tài)地選擇一臺服務(wù)器,不修改也不封裝IP報文,而是將數(shù)據(jù)幀的MAC地址改為選出服務(wù)器的MAC地址,再將修改后的數(shù)據(jù)幀在與服務(wù)器組的局域網(wǎng)上發(fā)送。因為數(shù)據(jù)幀的MAC地址是選出的服務(wù)器,所以服務(wù)器肯定可以收到這個數(shù)據(jù)幀,從中可以獲得該IP報文。當(dāng)服務(wù)器發(fā)現(xiàn)報文的目標(biāo)地址VIP是在本地的網(wǎng)絡(luò)設(shè)備上,服務(wù)器處理這個報文,然后根據(jù)路由表將響應(yīng)報文直接返回給客戶。如圖6-2-1-3所示。
???????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖6-2-1-3
?
1.2.1.4 LVS的調(diào)度算法
前面幾節(jié),介紹了LVS的三種基于IP的負(fù)載均衡技術(shù),下面簡單介紹一下調(diào)度算法。調(diào)度算法的目的是解決如何合理有效的從LVS后端的RealServers中,選擇一個RealServer來對請求包進行處理。在整個LVS項目中,共給出八種調(diào)度算法,主要有:
(1)輪詢調(diào)度。主要指按順序從RealServers中選擇一臺RealServers。
(2) 加權(quán)輪叫調(diào)度。給Real Servers設(shè)置一定權(quán)值,進行調(diào)度。
(3)最小連接調(diào)度。按照RealServers的連接情況進行調(diào)度。
(4)加權(quán)最小連接。根據(jù)設(shè)置的權(quán)值和現(xiàn)有的連接數(shù)進行調(diào)度。
(5)基于局部性的最小連接。主要用于增大Cache命中。
(6)代復(fù)制的基于局部性的最小連接。
(7)目標(biāo)地址散列調(diào)度。
(8)源地址散列調(diào)度。
在上述八種調(diào)度算法中,最常用的調(diào)度算法是輪詢調(diào)度。
?
1.3 db proxy
在大型互聯(lián)網(wǎng)站的數(shù)據(jù)庫部署中,部署最多的數(shù)據(jù)庫為MySQL。隨著MySQL中Innodb存儲引擎對事物的支持,MySQL在互聯(lián)網(wǎng)公司部署中,應(yīng)用量越來越多。典型應(yīng)用MySQL的公司有Google、Baidu、Taobao等大型互聯(lián)網(wǎng)公司。MySQL的優(yōu)勢在于其高擴展性和價格優(yōu)勢等。實際上,MySQL可以免費應(yīng)用于企業(yè)級的部署中。
在MySQL復(fù)制方式部署中,有兩種部署方式:同步復(fù)制和異步復(fù)制。同步復(fù)制采用NDB 存儲引擎,異步復(fù)制需要使用mysql-proxy結(jié)合master-slave實現(xiàn)。
異步復(fù)制主要為了解決讀寫分離的問題。因為用戶對網(wǎng)站的訪問有讀操作多,寫操作少的特點。甚至像taobao.com這樣的網(wǎng)站讀寫比例高達(dá)10:1,所以采用MySQL-Proxy結(jié)合主從異步復(fù)制實現(xiàn)讀寫分離是非常重要的增快訪問速度的方法。這樣如果有更高的用戶訪問需求,通過增加slave機器,不會對現(xiàn)有系統(tǒng)提供的服務(wù)產(chǎn)生影響而實現(xiàn)很好的、很靈活的業(yè)務(wù)擴展。
1.3.1 mysql-proxy
mysql-proxy是一個MySQL的代理服務(wù)器,用戶的請求先發(fā)向mysql-proxy,然后mysql-proxy對用戶的數(shù)據(jù)包進行分析,從下一層的mysql 數(shù)據(jù)庫中選擇一臺數(shù)據(jù)庫,將用戶的請求包交給mysql處理。
首先MySQL Proxy 以服務(wù)器的身份接受客戶端的請求,根據(jù)相應(yīng)配置對這些請求進行分析處理,然后以客戶端的身份轉(zhuǎn)發(fā)給相應(yīng)的后端數(shù)據(jù)庫服務(wù)器,再接受服務(wù)器的信息,然后返回給客戶端。所以MySQL Proxy需要同時實現(xiàn)客戶端和服務(wù)器的協(xié)議。由于要對客戶端發(fā)送過來的SQL語句進行分析,還需要包含一個SQL解析器。MySQL Proxy通過使用lua腳本,來實現(xiàn)復(fù)雜的連接控制和過濾,從而實現(xiàn)讀寫分離和負(fù)載平衡。所以部署MySQL-Proxy需要安裝運行Lua語言的環(huán)境。典型的MySQL-Proxy應(yīng)用為實現(xiàn)讀寫分離,如圖6-3-1所示。
????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖6-3-1
?
1.3.2 MySQL主從復(fù)制(Master-Slave Replication)
MySQL主從復(fù)制(Master-Slave Replication)是通過設(shè)置在Master MySQL上的binlog(使其處于打開狀態(tài)),Slave MySQL上通過一個I/O線程從Master MySQL上讀取binlog,然后傳輸?shù)絊lave MySQL的中繼日志中,然后Slave MySQL的SQL線程從中繼日志中讀取中繼日志,然后應(yīng)用到Slave MySQL的數(shù)據(jù)庫中。這樣實現(xiàn)了數(shù)據(jù)庫的復(fù)制功能。原理如圖6-3-2所示:
????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖6-3-2
MySQL主從復(fù)制的作用如下:
(1)????可以作為一種備份機制。
(2)????可以用來做讀寫分離。
1.3.3 MySQL主從復(fù)制結(jié)合MySQL Proxy實現(xiàn)讀寫分離
通過使用MySQL-Proxy來作為代理服務(wù)器,配置MySQL Proxy,將所有的寫操作,分流到master MySQL上,所有的讀操作分流到slave MySQLs。??????
這樣就實現(xiàn)了讀寫分離。如果有新的訪問需求,只需添加slave MySQL機器來解決問題。所以這樣的結(jié)構(gòu)擴展能力非常好。如圖6-3-3所示。
????????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖6-3-3
?
1.4 本文小結(jié)
本文主要論述了負(fù)載均衡在大型網(wǎng)站后臺架構(gòu)中的應(yīng)用。主要分析了應(yīng)用層的軟件負(fù)載均衡器LVS的三種負(fù)載均衡算法,簡單介紹了LVS的八種調(diào)度算法。詳細(xì)分析了MySQL的主從復(fù)制和讀寫分離的實現(xiàn)機制。給出了高可用網(wǎng)站后臺的部署中解決負(fù)載均衡的方案。
?
?
聲明:本文檔可以隨意更改,但必須署名原作者
作者:鳳凰舞者?qq:578989855
轉(zhuǎn)載于:https://blog.51cto.com/jawsy/633791
總結(jié)
以上是生活随笔為你收集整理的大型网站的负载均衡器、db proxy和db的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSPF DR选举的先后
- 下一篇: log4net使用详解 .