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