淺析負(fù)載均衡及l(fā)vs實(shí)現(xiàn)

負(fù)載均衡

負(fù)載均衡(load balance 簡稱,LB)是一種網(wǎng)絡(luò)技術(shù),它在多個(gè)備選資源中做資源分配塞祈。這里有三個(gè)關(guān)鍵字:

  1. 網(wǎng)絡(luò)技術(shù)级解,LB要解決的問題本質(zhì)上是網(wǎng)絡(luò)問題,所以它實(shí)際上就是通過修改數(shù)據(jù)包中MAC地址斜友,IP地址段來實(shí)現(xiàn)數(shù)據(jù)包的“中轉(zhuǎn)”。
  2. 資源垃它,這里的資源不僅可以是計(jì)算機(jī)資源鲜屏,也可以是交換機(jī),存儲(chǔ)設(shè)備等国拇。
  3. 最優(yōu)洛史,它則是針對業(yè)務(wù)而言最優(yōu),所以一般負(fù)載均衡有很多算法酱吝;輪詢也殖、加權(quán)輪詢、最小負(fù)載等;

LB是網(wǎng)絡(luò)技術(shù)忆嗜,所以業(yè)內(nèi)就參考OSI模型用四層負(fù)載均衡七層負(fù)載均衡進(jìn)行分類己儒。四層負(fù)載均衡工作在OSI的第四層(傳輸層),這里的主要協(xié)議有TCP捆毫、UDP闪湾、SCTP協(xié)議,這種類型的負(fù)載均衡器不管數(shù)據(jù)包是什么绩卤,只是通過修改IP頭部或者以太網(wǎng)頭部的地址實(shí)現(xiàn)負(fù)載均衡途样。七層負(fù)載均衡工作在OSI的第七層(應(yīng)用層),這一層主要是HTTP濒憋,MySQL等應(yīng)用協(xié)議何暇,這種負(fù)載均衡一般會(huì)把數(shù)據(jù)包內(nèi)容解析出來后通過一定的算法找到合適的服務(wù)器轉(zhuǎn)發(fā)請求。它是針對某些特定的協(xié)議凛驮,所以不通用裆站。比如NGINX(1.9版本的nginx已經(jīng)支持四層轉(zhuǎn)發(fā)了)只能適用于HTTP而不適用于MySQL。

四層負(fù)載均衡是真正意義上的負(fù)載均衡黔夭,它通過修改網(wǎng)絡(luò)數(shù)據(jù)包遏插,然后“中轉(zhuǎn)”請求,一般工作在操作系統(tǒng)的內(nèi)核空間(kernel space),比如通過Linux的netfilter定義的hook改變數(shù)據(jù)包纠修。七層負(fù)載均衡并不是嚴(yán)格意義上的負(fù)載均衡,它必須解析出數(shù)據(jù)包的內(nèi)容厂僧,根據(jù)內(nèi)容做相關(guān)轉(zhuǎn)發(fā)(比如MySQL的讀寫分離)扣草;一般工作在用戶空間(user space),比如通過Nginx颜屠、Mysql Proxy辰妙、Apache它們都是實(shí)現(xiàn)某個(gè)具體協(xié)議,很多資料都稱這種軟件叫代理(Proxy)甫窟。

實(shí)現(xiàn)LB的問題
LVS01.png

任何負(fù)載均衡都要解決三個(gè)問題:

  1. 修改數(shù)據(jù)包密浑,使得數(shù)據(jù)包可以轉(zhuǎn)發(fā)到后端服務(wù)器。
  2. frontend server要維護(hù)一個(gè)算法粗井,可以選出最優(yōu)的backend server尔破。
  3. frontend server要維護(hù)一張表記錄client和backend server的關(guān)系(比如tcp請求是一系列數(shù)據(jù)包,所以在tcp關(guān)閉之前所有的數(shù)據(jù)包都應(yīng)該發(fā)送到同一個(gè)backend浇衬,可以參考tcp的三次握手四次斷開來理解這段話)懒构。

以nginx為例,frontend server收到http請求數(shù)據(jù)包后會(huì)通過負(fù)載均衡算法選擇出一臺(tái)backend server耘擂;然后從本地重新構(gòu)建一個(gè)http請求發(fā)送給backend server胆剧,backend server收到frontend server的http請求后完成數(shù)據(jù)解析并返數(shù)據(jù)給frontend server,最后frontend server重新封裝此數(shù)據(jù)返回給client醉冤。在這個(gè)過程中forntend server的Nginx是工作在用戶空間的它代替Client訪問backend server秩霍。

LVS的實(shí)現(xiàn)

它是一款四層負(fù)載均衡軟件篙悯,在它的實(shí)現(xiàn)中forntend server稱為director;backend server稱為real server铃绒,它支持UDP鸽照、TCP、SCTP匿垄、IPSec( AH 移宅、ESP兩種數(shù)據(jù)包 )四種傳輸層協(xié)議的負(fù)載。


LVS02.png

LVS以內(nèi)核模塊的形式加載到內(nèi)核空間椿疗,通過netfilter定義的hook來實(shí)現(xiàn)數(shù)據(jù)包的控制漏峰。 它用到了三個(gè)hook(以Linux 4.8.15為例)主要“掛在”:local_in、inet_forward届榄、local_out浅乔;所有發(fā)送給本機(jī)的數(shù)據(jù)包都會(huì)經(jīng)過local_in,所有非本機(jī)的數(shù)據(jù)包都會(huì)經(jīng)過forward铝条,所有從本機(jī)發(fā)出的數(shù)據(jù)包都會(huì)經(jīng)過local_out靖苇。

LVS由兩部分組成(很像iptables),用戶空間提供了一個(gè)ipvsadm的命令行工具班缰,通過它定義負(fù)載均衡的“規(guī)則”贤壁;內(nèi)核模塊是系統(tǒng)的主要模塊它包括:

  1. IP包處理模塊,用于截取/改寫IP報(bào)文埠忘;
  2. 連接表管理脾拆,用于記錄當(dāng)前連接的Hash表;
  3. 調(diào)度算法模塊莹妒,提供了八種負(fù)載均衡算法——輪詢名船、加權(quán)輪詢、最少鏈接旨怠、加權(quán)最少鏈接渠驼、局部性最少鏈接、帶復(fù)制的局部性最少鏈接鉴腻、目標(biāo)地址哈希迷扇、源地址哈希;
  4. 連接狀態(tài)收集爽哎,回收已經(jīng)過時(shí)的連接谋梭;
  5. 統(tǒng)計(jì),IPVS的統(tǒng)計(jì)信息
LVS實(shí)戰(zhàn)

LVS術(shù)語定義:

  • DS: Director Server,前端負(fù)載均衡節(jié)點(diǎn)(后文用Director稱呼)
  • RS: Real Server,后端真實(shí)服務(wù)器
  • VIP: 用戶請求的真實(shí)IP倦青,一般是公網(wǎng)IP
  • DIP: Director Server IP瓮床,Director和Real Server通訊的內(nèi)網(wǎng)IP地址
  • RIP: Real Server IP,Director和Real Server通訊的內(nèi)網(wǎng)IP地址

總結(jié)起來,LVS的三種模式只有一個(gè)區(qū)別隘庄,也就是“誰來返回?cái)?shù)據(jù)給客戶端”踢步,在LB架構(gòu)中,客戶端請求一定是先到達(dá)forentend Server(LVS中是Director Server)丑掺,那么返回?cái)?shù)據(jù)給client不一定經(jīng)過Director Server获印。

  • NAT模式中,RS返回?cái)?shù)據(jù)包是給DS的街州,DS再返回給client兼丰。
  • DR(Dicter Routing)模式中,RS是直接返回給client數(shù)據(jù)給client的(通過額外的路由)唆缴。Direct通過修改請求中目標(biāo)MAC地址為選定的RS的MAC地址來實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)鳍征,這就要求DS和RS在同一個(gè)廣播域內(nèi)了。
  • TUN(IP Tunneling)模式中面徽,RS返回的數(shù)據(jù)也是直接返回給客戶端艳丛,這種模式通過Overlay協(xié)議(把一個(gè)IP數(shù)據(jù)包封裝到另一個(gè)數(shù)據(jù)包內(nèi)部叫Overlay)避免了DR的限制。

以上就是LVS三種模式真正的區(qū)別趟紊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氮双,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霎匈,更是在濱河造成了極大的恐慌戴差,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铛嘱,死亡現(xiàn)場離奇詭異暖释,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弄痹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嵌器,“玉大人肛真,你說我怎么就攤上這事∷剑” “怎么了蚓让?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讥珍。 經(jīng)常有香客問我历极,道長,這世上最難降的妖魔是什么衷佃? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任趟卸,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锄列。我一直安慰自己图云,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布邻邮。 她就那樣靜靜地躺著竣况,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筒严。 梳的紋絲不亂的頭發(fā)上丹泉,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鸭蛙,去河邊找鬼摹恨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛规惰,可吹牛的內(nèi)容都是我干的睬塌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歇万,長吁一口氣:“原來是場噩夢啊……” “哼揩晴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贪磺,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤硫兰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后寒锚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劫映,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年刹前,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泳赋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喇喉,死狀恐怖祖今,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拣技,我是刑警寧澤千诬,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站膏斤,受9級(jí)特大地震影響徐绑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莫辨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一傲茄、第九天 我趴在偏房一處隱蔽的房頂上張望毅访。 院中可真熱鬧,春花似錦烫幕、人聲如沸俺抽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磷斧。三九已至,卻和暖如春捷犹,著一層夾襖步出監(jiān)牢的瞬間弛饭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工萍歉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侣颂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓枪孩,卻偏偏與公主長得像憔晒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蔑舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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