nginx負(fù)載均衡策略:ip_hash雳旅、url_hash

nginx負(fù)載均衡策略:ip_hash、url_hash

轉(zhuǎn)發(fā):https://blog.csdn.net/dengjiexian123/article/details/53105918

前言:

目前舷胜,許多的web應(yīng)用,或者web接口,都會(huì)在服務(wù)器的入口處卵酪,使用一個(gè)服務(wù)器容器來(lái)監(jiān)聽端口,然后進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)谤碳,例如nginx Apache等溃卡。

服務(wù)器容器對(duì)應(yīng)整個(gè)web服務(wù)有著至關(guān)重要的作用,包括:可以很好的管理服務(wù)進(jìn)程蜒简,進(jìn)行代理瘸羡,對(duì)請(qǐng)求的預(yù)處理,以及負(fù)載均衡搓茬。

今天要討論的重點(diǎn)為在服務(wù)器集群中犹赖,合理使用nginx的hash策略做更有意義的負(fù)載均衡。

概要:

當(dāng)我們的服務(wù)是由一臺(tái)服務(wù)器支撐時(shí)卷仑,就絲毫不存在負(fù)載均衡的概念冷尉。只有當(dāng)服務(wù)由多臺(tái)服務(wù)器(也就是服務(wù)器集群)支撐時(shí),才會(huì)使用到負(fù)載均衡系枪。

負(fù)載均衡顧名思義雀哨,是一種策略,用于防止一臺(tái)服務(wù)器過(guò)載,而其他服務(wù)器閑置情況發(fā)生的策略雾棺。通過(guò)該策略可以使得提供相同服務(wù)的服務(wù)器負(fù)載基本相同膊夹。說(shuō)得直白一點(diǎn),就是當(dāng)客戶端發(fā)起一個(gè)請(qǐng)求之后捌浩,負(fù)載均衡會(huì)通過(guò)預(yù)先設(shè)定好的策略將該請(qǐng)求轉(zhuǎn)發(fā)給上游的一臺(tái)服務(wù)器進(jìn)行處理放刨。

如圖所示:

image

負(fù)載均衡是一個(gè)很成熟的技術(shù),其中對(duì)后端服務(wù)器進(jìn)行輪詢(默認(rèn))尸饺;通過(guò)客戶端請(qǐng)求IP進(jìn)行hash进统;對(duì)后端服務(wù)器指定權(quán)重等,是較為常見的負(fù)載均衡策略浪听。這里不再贅述螟碎。

對(duì)服務(wù)盲目的采用負(fù)載均衡策略,是不太合理的迹栓。負(fù)載均衡默認(rèn)情況下是輪詢策略掉分,這在一些場(chǎng)景下并不高效。

更有意義的負(fù)載均衡:

今天講解的重點(diǎn)是克伊,兩種常見的負(fù)載均衡hash策略酥郭,以及對(duì)應(yīng)的使用場(chǎng)景。

1愿吹、ip_hash(通過(guò)客戶端請(qǐng)求ip進(jìn)行hash不从,再通過(guò)hash值選擇后端server):

當(dāng)你服務(wù)端的一個(gè)特定url路徑會(huì)被同一個(gè)用戶連續(xù)訪問(wèn)時(shí),如果負(fù)載均衡策略還是輪詢的話犁跪,那該用戶的多次訪問(wèn)會(huì)被打到各臺(tái)服務(wù)器上椿息,這顯然并不高效(會(huì)建立多次http鏈接等問(wèn)題)。甚至考慮一種極端情況耘拇,用戶需要分片上傳文件到服務(wù)器下撵颊,然后再由服務(wù)器將分片合并宇攻,這時(shí)如果用戶的請(qǐng)求到達(dá)了不同的服務(wù)器惫叛,那么分片將存儲(chǔ)于不同的服務(wù)器目錄中,導(dǎo)致無(wú)法將分片合并逞刷。所以嘉涌,此類場(chǎng)景可以考慮采用nginx提供的ip_hash策略。既能滿足每個(gè)用戶請(qǐng)求到同一臺(tái)服務(wù)器夸浅,又能滿足不同用戶之間負(fù)載均衡仑最。

配置代碼如下:

upstream backend{    ip_hash;    server 192.168.128.1:8080 ;    server 192.168.128.2:8080 ;    server 192.168.128.3:8080 down;    server 192.168.128.4:8080 down; }server {    listen 8081;    server_name test.csdn.net;    root /home/system/test.csdn.net/test;    location ^~ /Upload/upload {    proxy_pass http://backend;     } }

上述是一個(gè)極簡(jiǎn)的監(jiān)聽8081端口的的nginx服務(wù),其中當(dāng)請(qǐng)求url 為/Upload/upload時(shí)帆喇,會(huì)走ip_hash策略; upstream是nginx的負(fù)載均衡模塊警医,此處,配置了策略為ip_hash,參與負(fù)載均衡的機(jī)器有四臺(tái)预皇,其中后兩臺(tái)末尾添加了down關(guān)鍵字侈玄,表示下線的意思。

2吟温、url_hash(通過(guò)請(qǐng)求url進(jìn)行hash序仙,再通過(guò)hash值選擇后端server):

一般來(lái)講,要用到urlhash鲁豪,是要配合緩存命中來(lái)使用潘悼。舉一個(gè)我遇到的實(shí)例:有一個(gè)服務(wù)器集群A,需要對(duì)外提供文件下載爬橡,由于文件上傳量巨大治唤,沒法存儲(chǔ)到服務(wù)器磁盤中,所以用到了第三方云存儲(chǔ)來(lái)做文件存儲(chǔ)堤尾。服務(wù)器集群A收到客戶端請(qǐng)求之后肝劲,需要從云存儲(chǔ)中下載文件然后返回,為了省去不必要的網(wǎng)絡(luò)帶寬和下載耗時(shí)郭宝,在服務(wù)器集群A上做了一層臨時(shí)緩存(緩存一個(gè)月)辞槐。由于是服務(wù)器集群,所以同一個(gè)資源多次請(qǐng)求粘室,可能會(huì)到達(dá)不同的服務(wù)器上榄檬,導(dǎo)致不必要的多次下載,緩存命中率不高衔统,以及一些資源時(shí)間的浪費(fèi)鹿榜。在此類場(chǎng)景下,為了使得緩存命中率提高锦爵,很適合使用url_hash策略舱殿,同一個(gè)url(也就是同一個(gè)資源請(qǐng)求)會(huì)到達(dá)同一臺(tái)機(jī)器,一旦緩存住了資源险掀,再此收到請(qǐng)求沪袭,就可以從緩存中讀取,既減少了帶寬樟氢,也減少的下載時(shí)間冈绊。

配置代碼如下:

upstream somestream {    hash $request_uri;    server 192.168.244.1:8080;    server 192.168.244.2:8080;    server 192.168.244.3:8080;    server 192.168.244.4:8080; }server {    listen 8081 default;    server_name test.csdn.net;    charset utf-8;    location /get {    proxy_pass http://somestream;     }  }

上述同樣也是一個(gè)極簡(jiǎn)的監(jiān)聽8081端口的nginx服務(wù),當(dāng)請(qǐng)求url為/get時(shí)埠啃,會(huì)走url_hash死宣;同樣配置了upstream模塊,hash $request_uri表明了是按照url規(guī)則進(jìn)行hash策略碴开。

總結(jié):

以上就是本文要介紹的全部?jī)?nèi)容毅该,本文側(cè)重講解了ip_hash和url_hash的使用場(chǎng)景和基本配置博秫,另外,在進(jìn)行nginx server 配置時(shí)眶掌,可以靈活一些台盯,不同的location采用不同的策略,可以使得服務(wù)策略更加的合理畏线。希望此文能為各位帶來(lái)些許幫助静盅。

</article>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寝殴,隨后出現(xiàn)的幾起案子蒿叠,更是在濱河造成了極大的恐慌,老刑警劉巖蚣常,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市咽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡抵蚊,警方通過(guò)查閱死者的電腦和手機(jī)施绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贞绳,“玉大人谷醉,你說(shuō)我怎么就攤上這事「员眨” “怎么了俱尼?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萎攒。 經(jīng)常有香客問(wèn)我遇八,道長(zhǎng),這世上最難降的妖魔是什么耍休? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任刃永,我火速辦了婚禮,結(jié)果婚禮上羊精,老公的妹妹穿的比我還像新娘斯够。我一直安慰自己,他們只是感情好园匹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布雳刺。 她就那樣靜靜地躺著劫灶,像睡著了一般裸违。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上本昏,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天供汛,我揣著相機(jī)與錄音,去河邊找鬼。 笑死怔昨,一個(gè)胖子當(dāng)著我的面吹牛雀久,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趁舀,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赖捌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了矮烹?” 一聲冷哼從身側(cè)響起越庇,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奉狈,沒想到半個(gè)月后卤唉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仁期,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年桑驱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跛蛋。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡熬的,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赊级,到底是詐尸還是另有隱情悦析,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布此衅,位于F島的核電站强戴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挡鞍。R本人自食惡果不足惜骑歹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望墨微。 院中可真熱鬧道媚,春花似錦、人聲如沸翘县。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锈麸。三九已至镀脂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忘伞,已是汗流浹背薄翅。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工沙兰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翘魄。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓鼎天,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親暑竟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斋射,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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