LVS、Nginx 及 HAProxy 的工作原理_第1頁
LVS、Nginx 及 HAProxy 的工作原理_第2頁
LVS、Nginx 及 HAProxy 的工作原理_第3頁
LVS、Nginx 及 HAProxy 的工作原理_第4頁
LVS、Nginx 及 HAProxy 的工作原理_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

當(dāng)前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù),集群是將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù),這些集群可以是Web應(yīng)用服務(wù)器集群,也可以是數(shù)據(jù)庫服務(wù)器集群,還可以是分布式緩存服務(wù)器集群等等。在實際應(yīng)用中,在Web服務(wù)器集群之前總會有一臺負(fù)載均衡服務(wù)器,負(fù)載均衡設(shè)備的任務(wù)就是作為Web服務(wù)器流量的入口,挑選最合適的一臺Web服務(wù)器,將客戶端的請求轉(zhuǎn)發(fā)給它處理,實現(xiàn)客戶端到真實服務(wù)端的透明轉(zhuǎn)發(fā)。最近幾年很火的云計算以及分布式架構(gòu),本質(zhì)上也是將后端服務(wù)器作為計算資源、存儲資源,由某臺管理服務(wù)器封裝成一個服務(wù)對外提供,客戶端不需要關(guān)心真正提供服務(wù)的是哪臺機器,在它看來,就好像它面對的是一臺擁有近乎無限能力的服務(wù)器,而本質(zhì)上,真正提供服務(wù)的,是后端的集群。LVS、Nginx、HAProxy是目前使用最廣泛的三種軟件負(fù)載均衡軟件。一般對負(fù)載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來使用不同的技術(shù)。具體的應(yīng)用需求還得具體分析,如果是中小型的Web應(yīng)用,比如日PV小于1000萬,用Nginx就完全可以了;如果機器不少,可以用DNS輪詢,LVS所耗費的機器還是比較多的;大型網(wǎng)站或重要的服務(wù),且服務(wù)器比較多時,可以考慮用LVS。目前關(guān)于網(wǎng)站架構(gòu)一般比較合理流行的架構(gòu)方案:Web前端采用Nginx/HAProxy+Keepalived作負(fù)載均衡器;后端采用MySQL數(shù)據(jù)庫一主多從和讀寫分離,采用LVS+Keepalived的架構(gòu)。LVSLVS是LinuxVirtualServer的簡稱,也就是Linux虛擬服務(wù)器?,F(xiàn)在LVS已經(jīng)是Linux標(biāo)準(zhǔn)內(nèi)核的一部分,從Linux2.4內(nèi)核以后,已經(jīng)完全內(nèi)置了LVS的各個功能模塊,無需給內(nèi)核打任何補丁,可以直接使用LVS提供的各種功能。LVS自從1998年開始,發(fā)展到現(xiàn)在已經(jīng)是一個比較成熟的技術(shù)項目了。1LVS的體系結(jié)構(gòu)LVS架設(shè)的服務(wù)器集群系統(tǒng)有三個部分組成:(1)最前端的負(fù)載均衡層,用LoadBalancer表示。(2)中間的服務(wù)器集群層,用ServerArray表示。(3)最底端的數(shù)據(jù)共享存儲層,用SharedStorage表示。2LVS負(fù)載均衡機制LVS不像HAProxy等七層軟負(fù)載面向的是HTTP包,所以七層負(fù)載可以做的URL解析等工作,LVS無法完成。LVS是四層負(fù)載均衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支持TCP/UDP的負(fù)載均衡。因為LVS是四層負(fù)載均衡,因此它相對于其它高層負(fù)載均衡的解決辦法,比如DNS域名輪流解析、應(yīng)用層負(fù)載的調(diào)度、客戶端的調(diào)度等,它的效率是非常高的。所謂四層負(fù)載均衡,也就是主要通過報文中的目標(biāo)地址和端口。七層負(fù)載均衡,也稱為“內(nèi)容交換”,也就是主要通過報文中的真正有意義的應(yīng)用層內(nèi)容。LVS的轉(zhuǎn)發(fā)主要通過修改IP地址(NAT模式,分為源地址修改SNAT和目標(biāo)地址修改DNAT)、修改目標(biāo)MAC(DR模式)來實現(xiàn)。3NAT模式:網(wǎng)絡(luò)地址轉(zhuǎn)換NAT(NetworkAddressTranslation)是一種外網(wǎng)和內(nèi)網(wǎng)地址映射的技術(shù)。NAT模式下,網(wǎng)絡(luò)數(shù)據(jù)報的進(jìn)出都要經(jīng)過LVS的處理。LVS需要作為RS(真實服務(wù)器)的網(wǎng)關(guān)。當(dāng)包到達(dá)LVS時,LVS做目標(biāo)地址轉(zhuǎn)換(DNAT),將目標(biāo)IP改為RS的IP。RS接收到包以后,仿佛是客戶端直接發(fā)給它的一樣。RS處理完,返回響應(yīng)時,源IP是RSIP,目標(biāo)IP是客戶端的IP。這時RS的包通過網(wǎng)關(guān)(LVS)中轉(zhuǎn),LVS會做源地址轉(zhuǎn)換(SNAT),將包的源地址改為VIP,這樣,這個包對客戶端看起來就仿佛是LVS直接返回給它的。4DR模式:直接路由DR模式下需要LVS和RS集群綁定同一個VIP(RS通過將VIP綁定在loopback實現(xiàn)),但與NAT的不同點在于:請求由LVS接受,由真實提供服務(wù)的服務(wù)器(RealServer,RS)直接返回給用戶,返回的時候不經(jīng)過LVS。詳細(xì)來看,一個請求過來時,LVS只需要將網(wǎng)絡(luò)幀的MAC地址修改為某一臺RS的MAC,該包就會被轉(zhuǎn)發(fā)到相應(yīng)的RS處理,注意此時的源IP和目標(biāo)IP都沒變,LVS只是做了一下移花接木。RS收到LVS轉(zhuǎn)發(fā)來的包時,鏈路層發(fā)現(xiàn)MAC是自己的,到上面的網(wǎng)絡(luò)層,發(fā)現(xiàn)IP也是自己的,于是這個包被合法地接受,RS感知不到前面有LVS的存在。而當(dāng)RS返回響應(yīng)時,只要直接向源IP(即用戶的IP)返回即可,不再經(jīng)過LVS。DR負(fù)載均衡模式數(shù)據(jù)分發(fā)過程中不修改IP地址,只修改mac地址,由于實際處理請求的真實物理IP地址和數(shù)據(jù)請求目的IP地址一致,所以不需要通過負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。因此,DR模式具有較好的性能,也是目前大型網(wǎng)站使用最廣泛的一種負(fù)載均衡手段。5LVS的優(yōu)點抗負(fù)載能力強、是工作在傳輸層上僅作分發(fā)之用,沒有流量的產(chǎn)生,這個特點也決定了它在負(fù)載均衡軟件里的性能最強的,對內(nèi)存和cpu資源消耗比較低。配置性比較低,這是一個缺點也是一個優(yōu)點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。工作穩(wěn)定,因為其本身抗負(fù)載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived。無流量,LVS只分發(fā)請求,而流量并不從它本身出去,這點保證了均衡器IO的性能不會受到大流量的影響。應(yīng)用范圍比較廣,因為LVS工作在傳輸層,所以它幾乎可以對所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫、在線聊天室等等。6LVS的缺點軟件本身不支持正則表達(dá)式處理,不能做動靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強的需求,這個是Nginx、HAProxy+Keepalived的優(yōu)勢所在。如果是網(wǎng)站應(yīng)用比較龐大的話,LVS/DR+Keepalived實施起來就比較復(fù)雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。NginxNginx是一個強大的Web服務(wù)器軟件,用于處理高并發(fā)的HTTP請求和作為反向代理服務(wù)器做負(fù)載均衡。具有高性能、輕量級、內(nèi)存消耗少,強大的負(fù)載均衡能力等優(yōu)勢。1Nignx的架構(gòu)設(shè)計相對于傳統(tǒng)基于進(jìn)程或線程的模型(Apache就采用這種模型)在處理并發(fā)連接時會為每一個連接建立一個單獨的進(jìn)程或線程,且在網(wǎng)絡(luò)或者輸入/輸出操作時阻塞。這將導(dǎo)致內(nèi)存和CPU的大量消耗,因為新起一個單獨的進(jìn)程或線程需要準(zhǔn)備新的運行時環(huán)境,包括堆和棧內(nèi)存的分配,以及新的執(zhí)行上下文,當(dāng)然,這些也會導(dǎo)致多余的CPU開銷。最終,會由于過多的上下文切換而導(dǎo)致服務(wù)器性能變差。反過來,Nginx的架構(gòu)設(shè)計是采用模塊化的、基于事件驅(qū)動、異步、單線程且非阻塞。Nginx大量使用多路復(fù)用和事件通知,Nginx啟動以后,會在系統(tǒng)中以daemon的方式在后臺運行,其中包括一個master進(jìn)程,n(n>=1)個worker進(jìn)程。所有的進(jìn)程都是單線程(即只有一個主線程)的,且進(jìn)程間通信主要使用共享內(nèi)存的方式。其中,master進(jìn)程用于接收來自外界的信號,并給worker進(jìn)程發(fā)送信號,同時監(jiān)控worker進(jìn)程的工作狀態(tài)。worker進(jìn)程則是外部請求真正的處理者,每個worker請求相互獨立且平等的競爭來自客戶端的請求。請求只能在一個worker進(jìn)程中被處理,且一個worker進(jìn)程只有一個主線程,所以同時只能處理一個請求。(原理同Netty很像)2Nginx負(fù)載均衡Nginx負(fù)載均衡主要是對七層網(wǎng)絡(luò)通信模型中的第七層應(yīng)用層上的http、https進(jìn)行支持。Nginx是以反向代理的方式進(jìn)行負(fù)載均衡的。反向代理(ReverseProxy)方式是指以代理服務(wù)器來接受Internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給Internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器。Nginx實現(xiàn)負(fù)載均衡的分配策略有很多,Nginx的upstream目前支持以下幾種方式:輪詢(默認(rèn)):每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除。weight:指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。ip_hash:每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題。fair(第三方):按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。url_hash(第三方):按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。3Nginx的優(yōu)點跨平臺:Nginx可以在大多數(shù)UnixlikeOS編譯運行,而且也有Windows的移植版本配置異常簡單:非常容易上手。配置風(fēng)格跟程序開發(fā)一樣,神一般的配置非阻塞、高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接,在實際生產(chǎn)環(huán)境中跑到2~3萬并發(fā)連接數(shù)事件驅(qū)動:通信機制采用epoll模型,支持更大的并發(fā)連接Master/Worker結(jié)構(gòu):一個master進(jìn)程,生成一個或多個worker進(jìn)程內(nèi)存消耗小:處理大并發(fā)的請求內(nèi)存消耗非常小。在3萬并發(fā)連接下,開啟的10個Nginx進(jìn)程才消耗150M內(nèi)存(15M*10=150M)內(nèi)置的健康檢查功能:如果Nginx代理的后端的某臺Web服務(wù)器宕機了,不會影響前端訪問節(jié)省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭穩(wěn)定性高:用于反向代理,宕機的概率微乎其微4Nginx的缺點Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個是它的缺點。對后端服務(wù)器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。HAProxyHAProxy支持兩種代理模式TCP(四層)和HTTP(七層),也是支持虛擬主機的。HAProxy的優(yōu)點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導(dǎo);同時支持通過獲取指定的url來檢測后端服務(wù)器的狀態(tài)。HAProxy跟LVS類似,本身就只是一款負(fù)載均衡軟件;單純從效率上來講HAProxy會比Nginx

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論