LVS荒典、Nginx 及 HAProxy 工作原理

【轉(zhuǎn)自】:https://forum.huawei.com/enterprise/zh/thread-478965.html

DR 模式:直接路由

DR 模式下需要 LVS 和 RS 集群綁定同一個 VIP(RS 通過將 VIP 綁定在 loopback 實現(xiàn)),但與 NAT 的不同點在于:請求由 LVS 接受竿报,由真實提供服務(wù)的服務(wù)器(RealServer句携,RS)直接返回給用戶疗锐,返回的時候不經(jīng)過 LVS衡载。

詳細來看搔耕,一個請求過來時,LVS 只需要將網(wǎng)絡(luò)幀的 MAC 地址修改為某一臺 RS 的 MAC痰娱,該包就會被轉(zhuǎn)發(fā)到相應(yīng)的 RS 處理弃榨,注意此時的源 IP 和目標 IP 都沒變,LVS 只是做了一下移花接木梨睁。RS 收到 LVS 轉(zhuǎn)發(fā)來的包時鲸睛,鏈路層發(fā)現(xiàn) MAC 是自己的,到上面的網(wǎng)絡(luò)層坡贺,發(fā)現(xiàn) IP 也是自己的官辈,于是這個包被合法地接受划咐,RS 感知不到前面有 LVS 的存在。而當 RS 返回響應(yīng)時钧萍,只要直接向源 IP(即用戶的 IP)返回即可,不再經(jīng)過 LVS政鼠。

13

DR 負載均衡模式數(shù)據(jù)分發(fā)過程中不修改 IP 地址风瘦,只修改 mac 地址,由于實際處理請求的真實物理 IP 地址和數(shù)據(jù)請求目的 IP 地址一致公般,所以不需要通過負載均衡服務(wù)器進行地址轉(zhuǎn)換万搔,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸官帘。因此瞬雹,DR 模式具有較好的性能,也是目前大型網(wǎng)站使用最廣泛的一種負載均衡手段刽虹。

LVS 的優(yōu)點

  • 抗負載能力強酗捌、是工作在傳輸層上僅作分發(fā)之用,沒有流量的產(chǎn)生涌哲,這個特點也決定了它在負載均衡軟件里的性能最強的胖缤,對內(nèi)存和 cpu 資源消耗比較低。

  • 配置性比較低阀圾,這是一個缺點也是一個優(yōu)點哪廓,因為沒有可太多配置的東西,所以并不需要太多接觸初烘,大大減少了人為出錯的幾率涡真。

  • 工作穩(wěn)定,因為其本身抗負載能力很強肾筐,自身有完整的雙機熱備方案哆料,如 LVS + Keepalived。

  • 無流量吗铐,LVS 只分發(fā)請求剧劝,而流量并不從它本身出去,這點保證了均衡器 IO 的性能不會受到大流量的影響抓歼。

  • 應(yīng)用范圍比較廣讥此,因為 LVS 工作在傳輸層,所以它幾乎可以對所有應(yīng)用做負載均衡谣妻,包括 http萄喳、數(shù)據(jù)庫、在線聊天室等等蹋半。

LVS 的缺點

  • 軟件本身不支持正則表達式處理他巨,不能做動靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強的需求,這個是 Nginx染突、HAProxy + Keepalived 的優(yōu)勢所在捻爷。

  • 如果是網(wǎng)站應(yīng)用比較龐大的話,LVS/DR + Keepalived 實施起來就比較復(fù)雜了份企,相對而言也榄,Nginx / HAProxy + Keepalived 就簡單多了。

Nginx

Nginx 是一個強大的 Web 服務(wù)器軟件司志,用于處理高并發(fā)的 HTTP 請求和作為反向代理服務(wù)器做負載均衡甜紫。具有高性能、輕量級骂远、內(nèi)存消耗少囚霸,強大的負載均衡能力等優(yōu)勢。

14

Nignx 的架構(gòu)設(shè)計

相對于傳統(tǒng)基于進程或線程的模型(Apache就采用這種模型)在處理并發(fā)連接時會為每一個連接建立一個單獨的進程或線程激才,且在網(wǎng)絡(luò)或者輸入/輸出操作時阻塞拓型。這將導(dǎo)致內(nèi)存和 CPU 的大量消耗,因為新起一個單獨的進程或線程需要準備新的運行時環(huán)境瘸恼,包括堆和棧內(nèi)存的分配吨述,以及新的執(zhí)行上下文,當然钞脂,這些也會導(dǎo)致多余的 CPU 開銷揣云。最終,會由于過多的上下文切換而導(dǎo)致服務(wù)器性能變差冰啃。

反過來邓夕,Nginx 的架構(gòu)設(shè)計是采用模塊化的、基于事件驅(qū)動阎毅、異步焚刚、單線程且非阻塞。

Nginx 大量使用多路復(fù)用和事件通知扇调,Nginx 啟動以后矿咕,會在系統(tǒng)中以 daemon 的方式在后臺運行,其中包括一個 master 進程狼钮,n(n>=1) 個 worker 進程碳柱。所有的進程都是單線程(即只有一個主線程)的,且進程間通信主要使用共享內(nèi)存的方式熬芜。

其中莲镣,master 進程用于接收來自外界的信號,并給 worker 進程發(fā)送信號涎拉,同時監(jiān)控 worker 進程的工作狀態(tài)瑞侮。worker 進程則是外部請求真正的處理者的圆,每個 worker 請求相互獨立且平等的競爭來自客戶端的請求。請求只能在一個 worker 進程中被處理半火,且一個 worker 進程只有一個主線程越妈,所以同時只能處理一個請求。(原理同 Netty 很像)

15

Nginx 負載均衡

Nginx 負載均衡主要是對七層網(wǎng)絡(luò)通信模型中的第七層應(yīng)用層上的 http钮糖、https 進行支持梅掠。

Nginx 是以反向代理的方式進行負載均衡的。反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受 Internet 上的連接請求藐鹤,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 Internet 上請求連接的客戶端赂韵,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器娱节。

Nginx 實現(xiàn)負載均衡的分配策略有很多,Nginx 的 upstream 目前支持以下幾種方式:

  • 輪詢(默認):每個請求按時間順序逐一分配到不同的后端服務(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ù)器為緩存時比較有效捏鱼。

Nginx 的優(yōu)點

  • 跨平臺:Nginx 可以在大多數(shù) Unix like OS編譯運行,而且也有 Windows 的移植版本

  • 配置異常簡單:非常容易上手酪耕。配置風(fēng)格跟程序開發(fā)一樣导梆,神一般的配置

  • 非阻塞、高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接迂烁,在實際生產(chǎn)環(huán)境中跑到2~3萬并發(fā)連接數(shù)

  • 事件驅(qū)動:通信機制采用 epoll 模型看尼,支持更大的并發(fā)連接

  • Master/Worker 結(jié)構(gòu):一個 master 進程,生成一個或多個 worker 進程

  • 內(nèi)存消耗忻瞬健:處理大并發(fā)的請求內(nèi)存消耗非常小狡忙。在3萬并發(fā)連接下,開啟的10個 Nginx 進程才消耗150M 內(nèi)存(15M*10=150M)

  • 內(nèi)置的健康檢查功能:如果 Nginx 代理的后端的某臺 Web 服務(wù)器宕機了址芯,不會影響前端訪問

  • 節(jié)省帶寬:支持 GZIP 壓縮灾茁,可以添加瀏覽器本地緩存的 Header 頭

  • 穩(wěn)定性高:用于反向代理窜觉,宕機的概率微乎其微

Nginx 的缺點

  • Nginx 僅能支 持http、https 和 Email 協(xié)議北专,這樣就在適用范圍上面小些啦粹,這個是它的缺點

  • 對后端服務(wù)器的健康檢查,只支持通過端口來檢測浑塞,不支持通過 ur l來檢測关筒。不支持 Session 的直接保持,但能通過 ip_hash 來解決

HAProxy

HAProxy 支持兩種代理模式 TCP(四層)和HTTP(七層)驶睦,也是支持虛擬主機的砰左。

HAProxy 的優(yōu)點能夠補充 Nginx 的一些缺點,比如支持 Session 的保持场航,Cookie 的引導(dǎo)缠导;同時支持通過獲取指定的 url 來檢測后端服務(wù)器的狀態(tài)。

HAProxy 跟 LVS 類似溉痢,本身就只是一款負載均衡軟件僻造;單純從效率上來講 HAProxy 會比 Nginx 有更出色的負載均衡速度,在并發(fā)處理上也是優(yōu)于 Nginx 的孩饼。

HAProxy 支持 TCP 協(xié)議的負載均衡轉(zhuǎn)發(fā)髓削,可以對 MySQL 讀進行負載均衡,對后端的 MySQL 節(jié)點進行檢測和負載均衡镀娶,大家可以用 LVS+Keepalived 對 MySQL 主從做負載均衡立膛。

HAProxy 負載均衡策略非常多:Round-robin(輪循)、Weight-round-robin(帶權(quán)輪循)梯码、source(原地址保持)旧巾、RI(請求URL)、rdp-cookie(根據(jù)cookie)忍些。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲁猩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罢坝,更是在濱河造成了極大的恐慌廓握,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘁酿,死亡現(xiàn)場離奇詭異隙券,居然都是意外死亡,警方通過查閱死者的電腦和手機闹司,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門娱仔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人游桩,你說我怎么就攤上這事牲迫∧推樱” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵盹憎,是天一觀的道長筛峭。 經(jīng)常有香客問我,道長陪每,這世上最難降的妖魔是什么影晓? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮檩禾,結(jié)果婚禮上挂签,老公的妹妹穿的比我還像新娘。我一直安慰自己盼产,他們只是感情好饵婆,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辆飘,像睡著了一般啦辐。 火紅的嫁衣襯著肌膚如雪谓传。 梳的紋絲不亂的頭發(fā)上蜈项,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音续挟,去河邊找鬼紧卒。 笑死,一個胖子當著我的面吹牛诗祸,可吹牛的內(nèi)容都是我干的跑芳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼直颅,長吁一口氣:“原來是場噩夢啊……” “哼博个!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起功偿,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤盆佣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后械荷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體共耍,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年吨瞎,在試婚紗的時候發(fā)現(xiàn)自己被綠了痹兜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡颤诀,死狀恐怖字旭,靈堂內(nèi)的尸體忽然破棺而出对湃,到底是詐尸還是另有隱情,我是刑警寧澤谐算,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布熟尉,位于F島的核電站,受9級特大地震影響洲脂,放射性物質(zhì)發(fā)生泄漏斤儿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一恐锦、第九天 我趴在偏房一處隱蔽的房頂上張望往果。 院中可真熱鬧,春花似錦一铅、人聲如沸陕贮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肮之。三九已至,卻和暖如春卜录,著一層夾襖步出監(jiān)牢的瞬間戈擒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工艰毒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留筐高,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓丑瞧,卻偏偏與公主長得像柑土,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绊汹,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容