使用nginx進(jìn)行負(fù)載均衡的搭建全過(guò)程
1. nginx負(fù)載均衡介紹
nginx應(yīng)用場(chǎng)景之一就是負(fù)載均衡。在訪問(wèn)量較多的時(shí)候,可以通過(guò)負(fù)載均衡,將多個(gè)請(qǐng)求分?jǐn)偟蕉嗯_(tái)服務(wù)器上,相當(dāng)于把一臺(tái)服務(wù)器需要承擔(dān)的負(fù)載量交給多臺(tái)服務(wù)器處理,進(jìn)而提高系統(tǒng)的吞吐率;另外如果其中某一臺(tái)服務(wù)器掛掉,其他服務(wù)器還可以正常提供服務(wù),以此來(lái)提高系統(tǒng)的可伸縮性與可靠性。
下圖為負(fù)載均衡示例圖,當(dāng)用戶請(qǐng)求發(fā)送后,首先發(fā)送到負(fù)載均衡服務(wù)器,而后由負(fù)載均衡服務(wù)器根據(jù)配置規(guī)則將請(qǐng)求轉(zhuǎn)發(fā)到不同的web服務(wù)器上。
2. nginx負(fù)載均衡策略
以下截圖為nginx官網(wǎng)文檔
nginx內(nèi)置負(fù)載均衡策略主要分為三大類,分別是輪詢、最少連接和ip hash
- 最少連接
請(qǐng)求分配給活動(dòng)連接數(shù)最少的服務(wù)器,哪臺(tái)服務(wù)器連接數(shù)最少,則把請(qǐng)求交給哪臺(tái)服務(wù)器,由nginx統(tǒng)計(jì)服務(wù)器連接數(shù)
- ip hash
基于客戶端ip的分配方式
2.1 輪詢
以循環(huán)方式分發(fā)對(duì)應(yīng)用服務(wù)器的請(qǐng)求,將請(qǐng)求平均分發(fā)到每臺(tái)服務(wù)器上。
2.1.1 普通輪詢方式
該方式是默認(rèn)方式,輪詢適合服務(wù)器配置相當(dāng),無(wú)狀態(tài)且短平快的服務(wù)使用。另外在輪詢中,如果服務(wù)器掛掉,會(huì)自動(dòng)剔除該服務(wù)器。
http { # 定義轉(zhuǎn)發(fā)分配規(guī)則 upstream myapp1 { server srv1.com; # 要轉(zhuǎn)發(fā)到的服務(wù)器,如ip、ip:端口號(hào)、域名、域名:端口號(hào) server srv2.com:8088; server 192.168.0.100:8088; } server { listen 80; # nginx監(jiān)聽(tīng)的端口 location / { # 使用myapp1分配規(guī)則,即剛自定義添加的upstream節(jié)點(diǎn) # 將所有請(qǐng)求轉(zhuǎn)發(fā)到myapp1服務(wù)器組中配置的某一臺(tái)服務(wù)器上 proxy_pass http://myapp1; } } }
2.1.2 權(quán)重輪詢方式
如果在 upstream 中配置的server參數(shù)后追加 weight 配置,則會(huì)根據(jù)配置的權(quán)重進(jìn)行請(qǐng)求分發(fā)。此策略可以與least_conn和ip_hash結(jié)合使用,適合服務(wù)器的硬件配置差別比較大的情況。
# 定義轉(zhuǎn)發(fā)分配規(guī)則 upstream myapp1 { server srv1.com weight=1; # 該臺(tái)服務(wù)器接受1/6的請(qǐng)求量 server srv2.com:8088 weight=2; # 該臺(tái)服務(wù)器接受2/6的請(qǐng)求量 server 192.168.0.100:8088 weight=3; # 該臺(tái)服務(wù)器接受3/6的請(qǐng)求量; }
2.2 最少連接
輪詢算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端,使它們的負(fù)載大致相同;但是,有些請(qǐng)求占用的時(shí)間很長(zhǎng),會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果,適合請(qǐng)求處理時(shí)間長(zhǎng)短不一造成服務(wù)器過(guò)載的情況。
# 定義轉(zhuǎn)發(fā)分配規(guī)則 upstream myapp1 { least_conn; # 把請(qǐng)求分派給連接數(shù)最少的服務(wù)器 server srv1.com; server srv2.com:8088; server 192.168.0.100:8088; }
2.3 ip hash
這個(gè)方法確保了相同的客戶端的請(qǐng)求一直發(fā)送到相同的服務(wù)器,這樣每個(gè)訪客都固定訪問(wèn)一個(gè)后端服務(wù)器。如用戶需要分片上傳文件到服務(wù)器下,然后再由服務(wù)器將分片合并,這時(shí)如果用戶的請(qǐng)求到達(dá)了不同的服務(wù)器,那么分片將存儲(chǔ)于不同的服務(wù)器目錄中,導(dǎo)致無(wú)法將分片合并,該場(chǎng)景則需要使用ip hash策略。
需要注意的是,ip_hash不能與backup同時(shí)使用,另外當(dāng)有服務(wù)器需要剔除,必須手動(dòng)down掉,此模式適合有狀態(tài)服務(wù),比如session。
# 定義轉(zhuǎn)發(fā)分配規(guī)則 upstream myapp1 { ip_hash; # #保證每個(gè)請(qǐng)求固定訪問(wèn)一個(gè)后端服務(wù)器 server srv1.com; server srv2.com:8088; server 192.168.0.100:8088; }
3. nginx負(fù)載均衡搭建示例
該示例使用一臺(tái)nginx作為負(fù)載均衡服務(wù)器,兩臺(tái)tomcat作為web服務(wù)器;可以把三個(gè)服務(wù)均在一臺(tái)機(jī)器進(jìn)行搭建,也可以使用虛擬機(jī)虛擬三臺(tái)機(jī)器,然后進(jìn)行測(cè)試。教程這里就只在一臺(tái)機(jī)器進(jìn)行搭建,采用默認(rèn)的權(quán)重方式進(jìn)行配置。
3.1 tomcat配置
將兩臺(tái)tomcat解壓出來(lái),配置完畢相應(yīng)的端口,然后在webapps目錄下創(chuàng)建test目錄,然后在test目錄中創(chuàng)建index.html文件,隨便寫(xiě)入一些內(nèi)容,兩臺(tái)tomcat中test目錄下的index.html文件內(nèi)容要區(qū)分開(kāi)來(lái),例如寫(xiě)入1111111 / 222222222,如下圖所示。
3.2 nginx配置
首先進(jìn)行nginx的安裝,安裝教程可以參考
http://www.dbjr.com.cn/article/231249.htm
安裝完畢后,進(jìn)入nginx目錄下的conf目錄,編輯 nginx.conf 文件,修改內(nèi)容為在http節(jié)點(diǎn)下增加
upstream tomcat { # 該部分內(nèi)容與 server 節(jié)點(diǎn)同級(jí) server tomcat服務(wù)的ip:tomcat服務(wù)的端口號(hào); server tomcat服務(wù)的ip:tomcat服務(wù)的端口號(hào); }
server節(jié)點(diǎn)下的location /節(jié)點(diǎn)中,把默認(rèn)的
location / { root html; index index.html index.htm; }
修改為
location / { proxy_pass http://tomcat; }
然后啟動(dòng) 兩臺(tái)tomcat與nginx服務(wù),在瀏覽器輸入nginx服務(wù)的地址:端口,不停刷新頁(yè)面,就可以看到每次請(qǐng)求的服務(wù)器發(fā)生了改變。
總結(jié)
到此這篇關(guān)于使用nginx進(jìn)行負(fù)載均衡的文章就介紹到這了,更多相關(guān)nginx負(fù)載均衡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- HAProxy和Nginx搭建負(fù)載均衡器的實(shí)現(xiàn)
- 使用Nginx?+?Keepalived?實(shí)現(xiàn)高可用?Web?負(fù)載均衡筆記(虛擬機(jī))
- Nginx負(fù)載均衡配置實(shí)例
- nginx?sticky實(shí)現(xiàn)基于cookie負(fù)載均衡示例詳解
- Nginx負(fù)載均衡之upstream模塊簡(jiǎn)介與使用詳解
- Nginx使用ngx_http_upstream_module實(shí)現(xiàn)負(fù)載均衡功能示例
- Nginx配置Tcp負(fù)載均衡的方法
- 教你如何使用 Nginx 進(jìn)行負(fù)載均衡
相關(guān)文章
nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法
這篇文章主要介紹了nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法,本文結(jié)論是空主機(jī)頭導(dǎo)致的大量400錯(cuò)誤日志,關(guān)閉默認(rèn)主機(jī)的日志記錄就可以解決問(wèn)題,需要的朋友可以參考下2015-01-01Nginx防止直接用IP訪問(wèn)Web服務(wù)器的設(shè)置方法
看了很多Nginx的配置,好像都忽略了ip直接訪問(wèn)Web的問(wèn)題,這樣理論上不利于SEO優(yōu)化,所以我們希望可以避免直接用IP訪問(wèn)網(wǎng)站,而是域名訪問(wèn),具體怎么做呢,看下面2012-09-09使用Nginx實(shí)現(xiàn)負(fù)載均衡的策略
本篇文章主要介紹了使用Nginx實(shí)現(xiàn)負(fù)載均衡的策略,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02詳解Nginx 被動(dòng)檢查服務(wù)器的存活狀態(tài)
Nginx 可以持續(xù)測(cè)試您的上游服務(wù)器,避免出現(xiàn)故障的服務(wù)器,并將恢復(fù)的服務(wù)器優(yōu)雅地添加到負(fù)載均衡組中。這篇文章主要介紹了Nginx 被動(dòng)檢查服務(wù)器的存活狀態(tài),需要的朋友可以參考下2021-10-10Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié)
nginx是一款自由的、開(kāi)源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器,本文主要介紹了Nginx的流式響應(yīng)配置實(shí)現(xiàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04服務(wù)器報(bào)錯(cuò)nginx?502?Bad?Gateway的原因及如何解決詳解
項(xiàng)目啟動(dòng)時(shí)莫名其妙網(wǎng)站訪問(wèn)不了,502 Bad Gateway,下面這篇文章主要給大家介紹了關(guān)于服務(wù)器報(bào)錯(cuò)nginx?502?Bad?Gateway的原因及如何解決的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06