大家好淫痰,我是IT修真院深圳分院第4期的學(xué)員病瞳,一枚正直純潔善良的JAVA程序員
今天給大家分享一下践惑,修真院官網(wǎng)JAVA任務(wù)六慎颗,深度思考中的知識(shí)點(diǎn)——nginx如何實(shí)現(xiàn)負(fù)載均衡乡恕。
1.背景介紹
什么是nginx
Nginx是俄羅斯人編寫的十分輕量級(jí)的HTTP服務(wù)器,Nginx,它的發(fā)音為“engine X”俯萎,是一個(gè)高性能的HTTP和反向代理服務(wù)器傲宜,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器。Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問(wèn)量第二的 Rambler.ru站點(diǎn)開發(fā)的夫啊,它已經(jīng)在該站點(diǎn)運(yùn)行超過(guò)兩年半了蛋哭。Igor Sysoev在建立的項(xiàng)目時(shí),使用基于BSD許可。
nginx主要為優(yōu)化性能涮母,是一種反向代理服谆趾、負(fù)載均衡務(wù)器躁愿。有報(bào)告表明能支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)。
工作原理
Nginx由內(nèi)核和模塊組成沪蓬,完成工作是通過(guò)查找配置文件將客戶端請(qǐng)求映射到一個(gè)location block(location是用于URL匹配的命令)彤钟,location配置的命令會(huì)啟動(dòng)不同模塊完成工作逸雹。? ? ? Nginx模塊分為核心模塊园欣,基礎(chǔ)模塊和第三方模塊日矫。
核心模塊:HTTP模塊、EVENT模塊(事件)、MAIL模塊褐奴。
基礎(chǔ)模塊:HTTP Access模塊唯沮、HTTP FastCGI模塊萌庆、HTTP Proxy模塊、HTTP Rewrite模塊彭则。
第三方模塊:HTTP Upstream Request Hash模塊瓦胎、Notice模塊、HTTP Access Key模塊漫蛔。
性能優(yōu)勢(shì)
web服務(wù)器,處理靜態(tài)文件、索引文件以及自動(dòng)索引效率高陪拘。
代理服務(wù)器,快速高效反向代理纤壁,提升網(wǎng)站性能左刽。
負(fù)載均衡器,內(nèi)部支持Rails和PHP,也可支持HTTP代理服務(wù)器酌媒,對(duì)外進(jìn)行服務(wù)欠痴。同時(shí)支持簡(jiǎn)單容錯(cuò)和利用算法進(jìn)行負(fù)載均衡。
性能方面秒咨,Nginx專門為性能設(shè)計(jì)喇辽,實(shí)現(xiàn)注重效率。采用Poll模型雨席,可以支持更多的并發(fā)連接菩咨,并在大并發(fā)時(shí)占用很低內(nèi)存。
穩(wěn)定性方面,采用分階段資源分配技術(shù)抽米,使CPU資源和內(nèi)存占用率低特占。當(dāng)遇到訪問(wèn)的峰值,或者有人惡意發(fā)起慢速連接時(shí)缨硝,不會(huì)導(dǎo)致像其他HTTP服務(wù)器因耗盡服務(wù)器物理內(nèi)存而失去響應(yīng)摩钙,導(dǎo)致只能重啟服務(wù)器。
高可用性方面查辩,支持熱部署胖笛,啟動(dòng)迅速,可以做到7*24不間斷運(yùn)行宜岛,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng)长踊。你還能夠在不間斷服務(wù)的情況下,對(duì)軟件版本進(jìn)行進(jìn)行升級(jí)萍倡。
一身弊、nginx負(fù)載均衡原理
單從字面上的意思來(lái)理解就可以解釋N臺(tái)服務(wù)器平均分擔(dān)負(fù)載,不會(huì)因?yàn)槟撑_(tái)服務(wù)器負(fù)載高宕機(jī)而某臺(tái)服務(wù)器閑置的情況列敲。那么負(fù)載均衡的前提就是要有多臺(tái)服務(wù)器才能實(shí)現(xiàn)阱佛,也就是兩臺(tái)以上即可。
我覺(jué)得他像是一個(gè)中轉(zhuǎn)站戴而,在形式上省略了客戶端輸入端口凑术,而他在幫我們填入端口號(hào)時(shí)會(huì)選擇不同的端口號(hào),只要你有設(shè)置所意,就像一個(gè)一個(gè)中轉(zhuǎn)站幫我們轉(zhuǎn)入地址淮逊。
2.知識(shí)剖析
nginx是通過(guò)upstream模塊來(lái)進(jìn)行負(fù)載均衡
upstream具有數(shù)據(jù)轉(zhuǎn)發(fā)功能,為nginx提供了跨越單機(jī)的橫向處理能力扶踊,使nginx擺脫只能為終端節(jié)點(diǎn)提供單一功能的限制泄鹏,而使它具備了網(wǎng)路應(yīng)用級(jí)別的拆分、封裝和整合的戰(zhàn)略功能秧耗。在云模型大行其道的今天备籽,數(shù)據(jù)轉(zhuǎn)發(fā)是nginx有能力構(gòu)建一個(gè)網(wǎng)絡(luò)應(yīng)用的關(guān)鍵組件。當(dāng)然分井,鑒于開發(fā)成本的問(wèn)題车猬,一個(gè)網(wǎng)絡(luò)應(yīng)用的關(guān)鍵組件一開始往往會(huì)采用高級(jí)編程語(yǔ)言開發(fā)。但是當(dāng)系統(tǒng)到達(dá)一定規(guī)模杂抽,并且需要更重視性能的時(shí)候诈唬,為了達(dá)到所要求的性能目標(biāo),高級(jí)語(yǔ)言開發(fā)出的組件必須進(jìn)行結(jié)構(gòu)化修改缩麸。此時(shí)铸磅,對(duì)于修改代價(jià)而言,nginx的upstream模塊呈現(xiàn)出極大的吸引力,因?yàn)樗焐涂煸淖小W鳛楦綆Т瞪ⅲ琻ginx的配置系統(tǒng)提供的層次化和松耦合使得系統(tǒng)的擴(kuò)展性也達(dá)到比較高的程度。
如何使用upstream進(jìn)行負(fù)載均衡
1.首先需要在服務(wù)器上生成兩個(gè)項(xiàng)目地點(diǎn)八酒,比如安裝兩個(gè)tomcat空民,各自部署一個(gè)項(xiàng)目。
2.更改nginx配置文件羞迷。添加upstream模塊界轩,在location中的pass改為upstream定義的字段。
tomcat部署兩個(gè)項(xiàng)目流程
要點(diǎn)為要在/etc/profile中輸入第二個(gè)tomcat的位置
然后再第二個(gè)是要更改catalina.sh中的路徑衔瓮,要export上面配置文件的地址浊猾,不然這個(gè)腳本會(huì)一直操作第一個(gè)tomcat,第二個(gè)就無(wú)法部署热鞍。
nginx負(fù)載均衡中的屬性
1.輪詢(默認(rèn))按時(shí)間順序分配葫慎,即如下
2.指定權(quán)重 weight和訪問(wèn)的成功率成正比
在端口后添加weight=n,這樣就能設(shè)置訪問(wèn)權(quán)重薇宠,n越大訪問(wèn)幾率越高偷办。
3.IP綁定 ip_hash 根據(jù)訪問(wèn)ip的hash結(jié)構(gòu)分配,這樣每個(gè)客戶端訪問(wèn)剃個(gè)服務(wù)器可以解決session的問(wèn)題
在upstream中另起一行輸入ip_hash澄港,這樣nginx會(huì)根據(jù)ip地址分配椒涯。
還有端口后添加的down表示當(dāng)前的server不參加分配,backup表示上面的server都掛了后用這個(gè)慢睡。
視頻
7.參考文獻(xiàn)
網(wǎng)絡(luò)
8.更多討論
歡迎大家交流和討論
鳴謝
感謝大家觀看
BY : 魏振恒