Interesting things
學習負載均衡技術埋泵。
What did you do today
什么是負載均衡?
一臺普通服務器的處理能力是有限的,假如能達到每秒幾萬個到幾十萬個請求徒欣,
但是卻無法再一秒鐘內處理上百萬個甚至更多的請求唧躲,但若能將多臺這樣的服務器組成一個系統(tǒng),并通過軟件技術將所有請求平均分配給所有服務器,那么這個系統(tǒng)就完全擁有每秒鐘處理幾百萬個甚至更多請求的能力满俗。這就是負載均衡最初的基礎設計思想。
基于DNS的負載均衡
DNS(Domain Name System作岖,域名系統(tǒng))唆垃。因特網上作為域名和ip地址相互映射的一個分布式數據庫,能夠使用戶更加方便的訪問互聯網痘儡,而不用去記住能夠被機器直接讀取的ip數串辕万。通過主機名,最終得到該主機名對應的ip地址的過程叫做域名解析沉删。
DNS協(xié)議運行在UDP協(xié)議之上渐尿,使用端口號53.
DNS負載均衡技術是最早的負載均衡解決方案,它是通過DNS服務中的隨機名字解析來實現的丑念,在DNS服務器中涡戳,可以為多個不同的地址配置同一名字,而最終查詢這個名字的客戶機將在解析這個名字時得到其中的一個地址脯倚。對于同一名字渔彰,不同的客戶會得到不同的地址嵌屎,他們也就訪問不同地址上的web服務器,從而達到負載均衡的目的恍涂。
image.png
優(yōu)點:實現簡單宝惰、實施容易,成本低再沧,適用于大多數TCP/IP應用尼夺。
缺點:
1.負載分配不均勻,DNS服務器將Http請求平均的分配到后臺的Web服務器上炒瘸,而不是考慮每個Web服務器當前的負載情況淤堵。如果后臺的Web服務器的配置和處理能力不同,最慢的Web服務器將成為系統(tǒng)的瓶頸顷扩,處理能力強的服務器不能充分發(fā)揮作用拐邪。
2.可靠性低,如果后臺的某臺web服務器出現故障隘截,DNS服務器仍然會把DNS請求分配到這條故障服務器上扎阶,導致不能響應客戶端。
3.變更生效時間長婶芭,如果更改DNS有可能造成相當一部分用戶不能享受到web服務东臀,并且由于DNS緩存的原因,所造成的后果要持續(xù)相當長一段時間(一般DNS的刷新周期約為24h)
基于四層交換技術的負載均衡
基于四層交換技術的負載均衡是通過報文中的目標地址和端口犀农,再加上負載均衡設備設置的服務器選擇方式惰赋,決定最終選擇的內部服務器與請求客戶端建立TCP連接,然后發(fā)送Client請求的數據井赌。
Client發(fā)送請求至4層負載均衡器谤逼,4層負載均衡器根據負載策略把client發(fā)送的報文目標地址(原來是負載均衡設備的ip地址)修改為后端服務器ip地址,這樣client就可以直接跟后端服務器建立TCP連接并發(fā)送數據仇穗。
具有代表意義的產品:LVS流部、F5(硬件)
優(yōu)點:性能高、支持各種網絡協(xié)議纹坐。
缺點:對網絡依賴較大枝冀,負載智能化方面沒有7層負載好(比如不支持對url個性化負載),F5硬件性能很高耘子,但成本也高果漾,需要人民幣幾十萬,對于小公司就望而卻步谷誓。
基于七層交換技術的負載均衡
基于七層交換技術的負載均衡也稱內容交換绒障,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式捍歪,決定最終選擇的服務器户辱。
image.png
七層負載均衡服務器起了一個代理服務器的作用鸵钝,client要訪問WebServer要先與七層負載設備進行三次握手后建立TCP連接,把要訪問的報文信息發(fā)送給七層負載均衡設備庐镐。然后七層負載均衡設備再根據設備的均衡規(guī)則選擇特定的web服務器恩商,然后通過三次握手與此臺web服務器建立TCP連接,然后web服務器把需要的數據發(fā)送給七層負載均衡設備必逆,負載均衡設備再把數據發(fā)送給client怠堪。
具有代表意義的產品:Nginx、Apache
優(yōu)點:對網絡依賴少名眉,負載智能方案多(可以根據不同的url進行負載)
缺點:網絡協(xié)議有限粟矿,Nginx和Apache支持http負載,性能沒有4層負載高璧针。
Nginx優(yōu)缺點
優(yōu)點:
1.工作在網絡的7層之上嚷炉,可以針對http應用做一些分流策略,比如針對域名探橱,目錄結構,它的正則規(guī)則很強大靈活绘证,這也是它目前廣泛流行的主要原因之一隧膏,Nginx單憑這點可利用的場景就遠多于LVS了。
2.Nginx對網絡穩(wěn)定性的依賴非常小嚷那,理論上能ping通就能進行負載均衡功能胞枕,這個也是它的優(yōu)勢之一,相反LVS對網絡穩(wěn)定性依賴比較大魏宽。
3.Nginx安裝配置很簡單腐泻,測試起來很方便,它能把錯誤用日志打印出來队询。LVS的配置和測試就要花比較長的時間了派桩。
4.可以承擔高負載壓力且穩(wěn)定。
5.Nginx也可作為靜態(tài)網頁和圖片服務器蚌斩,這方面的性能很好铆惑,Nginx社區(qū)非常活躍送膳,第三方模塊也很多员魏。
6.Nginx可作為中層反向代理使用。
7.Nginx現在作為Web反向加速緩存越來越成熟了叠聋。
8.Nginx不僅僅是一款優(yōu)秀的負載均衡器/反向代理軟件撕阎,它同時也是功能強大的Web應用服務器。
9.Nginx可以通過端口檢測到服務器內部的故障碌补,比如根據服務器處理網頁返回的狀態(tài)碼虏束,超時等等名斟,并且會把返回錯誤的請求重新提交到另一個節(jié)點,不過其中的缺點就是不支持url來檢測魄眉。比如用戶正在上傳一個文件砰盐,而處理該上傳的節(jié)點剛好在上傳過程中出現故障,Nginx會把上傳切刀另一臺服務器重新處理坑律,而LVS就直接掛了岩梳。
缺點:
1.Nginx僅能支持http、https和Email協(xié)議晃择。
2.對后端服務器的健康檢查冀值,只能通過端口來檢測,不支持通過url來檢測宫屠。不支持session的直接保持列疗,但能通過ip_hash來解決。
LVS實現負載的三種方式
什么是LVS浪蹂?
LVS是Linux Virtual Server的簡寫抵栈,就是Linux虛擬服務器,是一個虛擬的服務器集群系統(tǒng)坤次。
LVS的優(yōu)點:
1.抗負載能力強古劲,是工作在網絡4層之上僅作分發(fā)之用,沒有流量的產生缰猴,這個特點決定了它在負載均衡軟件里的出色的性能产艾,對內存和cpu資源消耗比較低。
2.工作穩(wěn)定滑绒,因為其本身抗負載能力很強闷堡,自身有完整的雙機熱備方案,比如LVS+Keepalived.
3.無流量疑故,LVS只分發(fā)請求杠览,而流量并不從它本身出去,這點保證了均衡器IO的性能不會受到大流量的影響焰扳。
4.應用范圍比較廣倦零,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡吨悍,包括http扫茅、數據庫、在線聊天室育瓜。
5.配置比較低葫隙,這是一個缺點也是一個優(yōu)點,因為沒有太多配置的東西躏仇,所以并不需要太多接觸恋脚,大大減少了人為出錯的幾率腺办。
LVS缺點:
1.軟件本身不支持正則表達式處理,不能做動靜分離糟描。而現在很多網站在這方面都有較強的需求怀喉,這個是Nginx+Keepalived的優(yōu)勢所在。
2.如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了船响,相對而言躬拢,Nginx+Keepalived就簡單多了。
LVS中的調度方法有三種:NAT(NetWork Address Translation 網絡地址轉換)见间、TUN(tunnel隧道)聊闯、DR(direct route直接路由)
LVS-DR模式
請求由LVS接受,由真實提供服務的RealServer直接返回用戶米诉,返回的時候不經過LVS菱蔬。
DR模式需要LVS服務器和RealServer綁定同一個vip,一個請求過來時史侣,LVS只需要將網絡幀的MAC地址修改為某一臺RealServer的MAC地址拴泌,該包就會被轉發(fā)到相應的RealServer處理。注意此時的源ip和目標ip都沒變抵窒,RealServer收到LVS轉發(fā)來的包弛针,發(fā)現MAC是自己的,發(fā)現IP也是自己的李皇,于是這個包被合法的接受,而當RealServer返回響應時宙枷,只要直接向源ip也就是用戶ip返回即可掉房,不再經過LVS。
DR模式慰丛,LVS接受請求輸入卓囚,將請求轉發(fā)給RealServer,由RealServer輸出響應給用戶诅病,性能非常高哪亿。但是它美中不足的是要求負載均衡器與RealServer處于同一物理段。
image.png
LVS-NAT模式
NAT是一種外網和內網地址映射的技術贤笆。NAT模式下蝇棉,LVS需要作為RealServer的網關,當網絡包到達LVS時芥永,LVS要做DNAT(目標地址轉換)篡殷,將目標ip改為RealServer的ip。RealServer接收到包之后埋涧,處理完板辽,返回響應時奇瘦,RealServer的包通過LVS中轉,LVS會做SNAT(源地址轉換)劲弦,將包的源地址改為vip耳标,對于客戶端只知道是LVS直接返回給它的。
NAT模式請求和響應都需要經過LVS邑跪,性能沒有DR模式好次坡。
image.png
LVS-TUN模式
TUN模式是通過ip隧道技術減輕LVS調度服務器的壓力,很多internet服務的請求包很短小呀袱,而響應包通常很大贸毕,負載均衡器只負責將請求包分發(fā)給物理服務器,而物理服務器將響應包直接分發(fā)給用戶夜赵。所以負載均衡器能處理很巨大的請求量明棍。比NAT模式要高的很多,比DR模式的優(yōu)點是不限制負載均衡器與RealServer處于同一物理段上寇僧。但是它的不足需要所有的服務器(LVS,RealServer)支持“IP Tunneling”協(xié)議摊腋。
image.png
Summary
擼了一遍負載均衡的理論,美滋滋嘁傀。