Nginx(三)nginx實(shí)現(xiàn)負(fù)載均衡

一:為什么要實(shí)現(xiàn)負(fù)載均衡

當(dāng)一臺服務(wù)器的單位時(shí)間內(nèi)訪問量越大的時(shí)候矮瘟,服務(wù)器壓力會越大,當(dāng)一臺服務(wù)器壓力大得超過自身的承受壓力的時(shí)候灭返,服務(wù)器會崩潰景用。為了避免服務(wù)器崩潰涵叮,讓用戶更好的體驗(yàn),我們通常通過負(fù)載均衡的方式來分擔(dān)服務(wù)器的壓力伞插。那么什么是負(fù)載均衡呢割粮?我們可以建立很多個(gè)服務(wù)器,這些服務(wù)器組成一個(gè)服務(wù)器集群蜂怎,然后當(dāng)用戶訪問我們的網(wǎng)站的時(shí)候穆刻,先訪問一個(gè)中間服務(wù)器,再讓這個(gè)中間服務(wù)器在服務(wù)器群中選擇一個(gè)壓力較小的服務(wù)器杠步,然后將該訪問請求引入選擇的服務(wù)器氢伟。這樣,用戶每次的訪問幽歼,都會保證服務(wù)器集群中的每個(gè)服務(wù)器的壓力區(qū)域平衡朵锣,分擔(dān)了服務(wù)器的壓力,避免了服務(wù)器崩潰的情況甸私。

二:Nginx的優(yōu)勢

nginx是一款可以通過反向代理實(shí)現(xiàn)負(fù)載均衡的服務(wù)器诚些,使用nginx服務(wù)器實(shí)現(xiàn)負(fù)載均衡的時(shí)候,用戶首先會訪問到nginx服務(wù)器,然后nginx服務(wù)器再從服務(wù)器群中選擇壓力較小的服務(wù)器诬烹,把該訪問請求引入到該服務(wù)器砸烦。若服務(wù)器群中的某個(gè)服務(wù)器崩潰,那么從待選的服務(wù)器列表中刪除绞吁,也就是說如果一個(gè)服務(wù)器崩潰了幢痘,那么nginx肯定不會把訪問引入該服務(wù)器了。

三:負(fù)載均衡

當(dāng)使用了代理服務(wù)器時(shí)家破,一般代理服務(wù)器后面不僅僅只有一臺原始服務(wù)器颜说,而是有很多臺服務(wù)器一起在處理用戶發(fā)過來的請求,這時(shí)就要協(xié)調(diào)好多臺服務(wù)器怎樣合作共同處理用戶的請求

若所有的原始服務(wù)器配置相差不大的情況下汰聋,負(fù)載均衡的手段一般為輪詢门粪,即每臺服務(wù)器平等地處理用戶的請求,當(dāng)請求到來時(shí)會自動(dòng)交給當(dāng)前所負(fù)責(zé)事務(wù)最少的服務(wù)器去處理烹困;

若原始服務(wù)器的配置有一定差異時(shí)玄妈,則采用加權(quán)輪詢的方式,配置較好的服務(wù)器將負(fù)責(zé)更多的請求處理髓梅,反之亦然措近;

而一旦采取輪詢方式,而要考慮session共享的問題女淑,因?yàn)橐怯脩舻恼埱蟊环峙浣o不同的服務(wù)器處理而未實(shí)現(xiàn)session共享的話則需要用戶重復(fù)登陸操作瞭郑,當(dāng)前實(shí)現(xiàn)session共享的方式有寫入數(shù)據(jù)庫或者寫入memcached;

若不想處理session共享鸭你,則采用ip哈希的方式將某一用戶的請求指定分配給某一臺服務(wù)器屈张,在配置中加上 ip_hash 這句即可;

幾種常用的負(fù)載均衡方式

  • 最少連接:系統(tǒng)把新連接分配給當(dāng)前連接數(shù)目最少的服務(wù)器袱巨。該算法在各個(gè)服務(wù)器運(yùn)算能力基本相似的環(huán)境中非常有效阁谆。

  • 最快算法:最快算法基于所有服務(wù)器中的最快響應(yīng)時(shí)間分配連接。該算法在服務(wù)器跨不同網(wǎng)絡(luò)的環(huán)境中特別有用愉老。

  • 輪詢:輪詢算法按順序把每個(gè)新的連接請求分配給下一個(gè)服務(wù)器场绿,最終把所有請求平分給所有的服務(wù)器。輪詢算法在大多數(shù)情況下都工作的不錯(cuò)嫉入,但是如果負(fù)載均衡的設(shè)備在處理速度焰盗、連接速度和內(nèi)存等方面不是完全均等,那么效果會更好咒林。

  • 加權(quán)輪詢:該算法中熬拒,每個(gè)機(jī)器接受的連接數(shù)量是按權(quán)重比例分配的。這是對普通輪詢算法的改進(jìn)垫竞,比如你可以設(shè)定:第三臺機(jī)器的處理能力是第一臺機(jī)器的兩倍澎粟,那么負(fù)載均衡器會把兩倍的連接數(shù)量分配給第3臺機(jī)器。

Nginx負(fù)載均衡部署

測試環(huán)境:

由于沒有服務(wù)器,所以本次測試直接host指定域名活烙,然后在VMware里安裝了三臺CentOS徐裸。

測試域名 :a.com

A服務(wù)器IP :172.16.253.89 (主)

B服務(wù)器IP :172.16.253.88

C服務(wù)器IP :172.16.251.82

部署思路:

A服務(wù)器做為主服務(wù)器,域名直接解析到A服務(wù)器(172.16.253.89)上啸盏,由A服務(wù)器負(fù)載均衡到B服務(wù)器(172.16.253.88)與C服務(wù)器(172.16.251.82)上倦逐。

1: 域名解析

由于不是真實(shí)環(huán)境,域名就隨便使用一個(gè)a.com用作測試宫补,所以a.com的解析只能在hosts文件設(shè)置。

打開:C:\Windows\System32\drivers\etc\hosts
在末尾添加:

172.16.253.89    a.com

保存退出曾我,然后啟動(dòng)命令模式ping下看看是否已設(shè)置成功

從截圖上看已成功將a.com解析到172.16.253.89

2: A服務(wù)器nginx.conf設(shè)置

打開nginx.conf粉怕,文件位置在nginx安裝目錄的conf目錄下。(yum安裝的話在/etc/nginx/nginx.conf下)

在http段加入以下代碼:

upstream a.com {
      server  172.16.253.88:80;
      server  172.16.251.82:80;
}

server{
    listen 80;
    server_name a.com;
    location / {
        proxy_pass         http://a.com;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    }                 
}

3:B抒巢、C服務(wù)器nginx.conf設(shè)置:

打開nginx.conf贫贝,在http段加入以下代碼

server{ 
    listen 80; 
    server_name a.com; 
    index index.html; 
    root /var/www/html/; 
}

保存重啟nginx

我在重啟的過程中遇到了如下錯(cuò)誤提示,原來是80端口被占用蛉谜。使用下面命令就可以解決問題了稚晚。

4:測試

當(dāng)訪問a.com的時(shí)候,為了區(qū)分是轉(zhuǎn)向哪臺服務(wù)器處理我分別在B型诚、C服務(wù)器下寫一個(gè)不同內(nèi)容的index.html文件客燕,以作區(qū)分。

編輯各自的index.html文件
    vim /var/www/html/index.html

打開瀏覽器訪問a.com結(jié)果狰贯,刷新會發(fā)現(xiàn)所有的請求均分別被主服務(wù)器(172.16.253.89)分配到B服務(wù)器(172.16.253.88)與C服務(wù)器(172.16.251.82)上也搓,實(shí)現(xiàn)了負(fù)載均衡效果。

B服務(wù)器處理頁面

C服務(wù)器處理頁面(要是出不來此結(jié)果可以換個(gè)瀏覽器試試涵紊,因?yàn)樵L問過之后可能會有緩存)

5:假如其中一臺服務(wù)器宕機(jī)會怎樣傍妒?

當(dāng)某臺服務(wù)器宕機(jī)了,是否會影響訪問呢摸柄?

我們先來看看實(shí)例颤练,根據(jù)以上例子,假設(shè)C服務(wù)器172.16.251.82 這臺機(jī)子宕機(jī)了(由于無法模擬宕機(jī)驱负,所以我就把C服務(wù)器關(guān)機(jī))然后再來訪問看看嗦玖。

訪問結(jié)果:

我們發(fā)現(xiàn),雖然C服務(wù)器(172.16.251.82)宕機(jī)了跃脊,但不影響網(wǎng)站訪問踏揣。這樣,就不會擔(dān)心在負(fù)載均衡模式下因?yàn)槟撑_機(jī)子宕機(jī)而拖累整個(gè)站點(diǎn)了匾乓。

6: 主服務(wù)器不能提供服務(wù)嗎捞稿?

以上例子中,我們都是應(yīng)用到了主服務(wù)器負(fù)載均衡到其它服務(wù)器上,那么主服務(wù)器本身能不能也加在服務(wù)器列表中娱局,這樣就不會白白浪費(fèi)拿一臺服務(wù)器純當(dāng)做轉(zhuǎn)發(fā)功能彰亥,而是也參與到提供服務(wù)中來。

如以上案例三臺服務(wù)器:

A服務(wù)器IP :172.16.253.89(主)

B服務(wù)器IP :172.16.253.88

C服務(wù)器IP :172.16.251.82

我們把域名解析到A服務(wù)器衰齐,然后由A服務(wù)器轉(zhuǎn)發(fā)到B服務(wù)器與C服務(wù)器任斋,那么A服務(wù)器只做一個(gè)轉(zhuǎn)發(fā)功能,現(xiàn)在我們讓A服務(wù)器也提供站點(diǎn)服務(wù)耻涛。

我們先來分析一下废酷,如果添加主服務(wù)器到upstream中,那么可能會有以下兩種情況發(fā)生:

1抹缕、主服務(wù)器轉(zhuǎn)發(fā)到了其它IP上澈蟆,其它IP服務(wù)器正常處理;

2卓研、主服務(wù)器轉(zhuǎn)發(fā)到了自己IP上趴俘,然后又進(jìn)到主服務(wù)器分配IP那里,假如一直分配到本機(jī)奏赘,則會造成一個(gè)死循環(huán)寥闪。

怎么解決這個(gè)問題呢?因?yàn)?0端口已經(jīng)用來監(jiān)聽負(fù)載均衡的處理磨淌,那么本服務(wù)器上就不能再使用80端口來處理a.com的訪問請求疲憋,得用一個(gè)新的。于是我們把主服務(wù)器的/etc/nginx/nginx.conf加入以下一段代碼:

server{ 
    listen 8080; 
    server_name a.com; 
    index index.html; 
    root /var/www/html/; 
}

重啟nginx梁只,在瀏覽器輸入a.com:8080試試看能不能訪問柜某。結(jié)果可以正常訪問

既然能正常訪問,那么我們就可以把主服務(wù)器添加到upstream中敛纲,但是端口要改一下喂击,如下代碼(編輯主服務(wù)器的此文件vim /etc/nginx/nginx.html):

upstream a.com { 
      server  172.16.253.88:80; 
      server  172.16.251.82:80; 
      server  172.16.253.89:8080; 
}

由于這里可以添加主服務(wù)器IP172.16.253.89 或者127.0.0.1均可以,都表示訪問自己淤翔。

重啟Nginx翰绊,然后再來訪問a.com看看會不會分配到主服務(wù)器上。

主服務(wù)器也能正常加入服務(wù)了旁壮。

總結(jié):

一监嗜、負(fù)載均衡不是nginx獨(dú)有,著名鼎鼎的apache也有抡谐,但性能可能不如nginx裁奇。

二、多臺服務(wù)器提供服務(wù)麦撵,但域名只解析到主服務(wù)器刽肠,而真正的服務(wù)器IP不會被ping下即可獲得溃肪,增加一定安全性。

三音五、upstream里的IP不一定是內(nèi)網(wǎng)惫撰,外網(wǎng)IP也可以。不過經(jīng)典的案例是躺涝,局域網(wǎng)中某臺IP暴露在外網(wǎng)下厨钻,域名直接解析到此IP。然后又這臺主服務(wù)器轉(zhuǎn)發(fā)到內(nèi)網(wǎng)服務(wù)器IP中坚嗜。

四夯膀、某臺服務(wù)器宕機(jī)、不會影響網(wǎng)站正常運(yùn)行苍蔬,Nginx不會把請求轉(zhuǎn)發(fā)到已宕機(jī)的IP上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诱建,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子银室,更是在濱河造成了極大的恐慌,老刑警劉巖励翼,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈敢,死亡現(xiàn)場離奇詭異,居然都是意外死亡汽抚,警方通過查閱死者的電腦和手機(jī)抓狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來造烁,“玉大人否过,你說我怎么就攤上這事〔洋” “怎么了苗桂?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長告组。 經(jīng)常有香客問我煤伟,道長,這世上最難降的妖魔是什么木缝? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任便锨,我火速辦了婚禮,結(jié)果婚禮上我碟,老公的妹妹穿的比我還像新娘放案。我一直安慰自己,他們只是感情好矫俺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布吱殉。 她就那樣靜靜地躺著掸冤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪考婴。 梳的紋絲不亂的頭發(fā)上贩虾,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音沥阱,去河邊找鬼缎罢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛考杉,可吹牛的內(nèi)容都是我干的策精。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼崇棠,長吁一口氣:“原來是場噩夢啊……” “哼咽袜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枕稀,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤询刹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萎坷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凹联,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年哆档,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔽挠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓜浸,死狀恐怖澳淑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情插佛,我是刑警寧澤杠巡,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站雇寇,受9級特大地震影響忽孽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谢床,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一兄一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧识腿,春花似錦出革、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耳璧。三九已至,卻和暖如春展箱,著一層夾襖步出監(jiān)牢的瞬間旨枯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工混驰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攀隔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓栖榨,卻偏偏與公主長得像昆汹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子婴栽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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

  • 一:為什么要實(shí)現(xiàn)負(fù)載均衡 當(dāng)一臺服務(wù)器的單位時(shí)間內(nèi)訪問量越大的時(shí)候满粗,服務(wù)器壓力會越大,當(dāng)一臺服務(wù)器壓力大得超過自身...
    芷_念閱讀 419評論 0 0
  • 【摘要】 面對大量用戶訪問愚争、高并發(fā)請求映皆,海量數(shù)據(jù),可以使用高性能的服務(wù)器轰枝、大型數(shù)據(jù)庫捅彻,存儲設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,536評論 0 24
  • 摘要:面對大量用戶訪問狸膏、高并發(fā)請求沟饥,海量數(shù)據(jù)添怔,可以使用高性能的服務(wù)器湾戳、大型數(shù)據(jù)庫,存儲設(shè)備广料,高性能Web服務(wù)器砾脑,采...
    layjoy閱讀 13,783評論 3 93
  • 思考一: 為什么有的人做起事情來如石入大海、腦袋塞鉛艾杏、負(fù)重前行卻不見前路韧衣? 為什么有的人做事迅速鎖定目標(biāo),抓住蛛絲...
    游歷天地間一逍遙客閱讀 250評論 2 0
  • 關(guān)于喝水 “早上不能空腹喝水购桑,上午要少喝水畅铭,不渴不飲〔” 這是在做臟腑撥筋治療時(shí)我們對顧客的第一項(xiàng)要求∷敦現(xiàn)在所謂一...
    皮皮的豆豆閱讀 265評論 0 1