1. 程式人生 > 實用技巧 >Nginx的負載均衡配置

Nginx的負載均衡配置

名詞解釋,網路搜尋結果

正向代理(Forward Proxy):

客戶端【使用者A】和原始伺服器(origin server)【伺服器B】之間的伺服器【代理伺服器Z】,為了從原始伺服器取得內容,使用者A向代理伺服器Z傳送一個請求並指定目標(伺服器B),然後代理伺服器Z向伺服器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。

wKioL1bP0saCQ8EzAAClgxTmapM901.jpg

反向代理(Reverse Proxy):

反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。

wKiom1bP0lWCLVhQAACtMnjUbTU921.jpg

使用者A始終認為它訪問的是原始伺服器B而不是代理伺服器Z,但實用際上反向代理伺服器接受使用者A的應答,從原始資源伺服器B中取得使用者A的需求資源,然後傳送給使用者A。


upstream節點的分配方式及配置說明

upstreamresinserver{#定義負載均衡裝置的Ip及裝置狀態
ip_hash;
server127.0.0.1:8000down;
server127.0.0.1:8080weight=10max_fails=3fail_timeout=10s;
server127.0.0.1:6801;
server127.0.0.1:6802backup;
}

裝置的狀態:
1.down表示單前的server暫時不參與負載
2.weight權重,預設為1。權值越高被分配到的機率越大
3.max_fails許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream模組定義的錯誤
4.fail_timeoutmax_fails次失敗後,暫停的時間。
5.backup其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

nginx支援同時設定多組的負載均衡,用來給不用的server來使用。
client_body_in_file_only設定為On可以講clientpost過來的資料記錄到檔案中用來做debug
client_body_temp_path設定記錄檔案的目錄可以設定最多3層目錄
location對URL進行匹配.可以進行重定向或者進行新的代理負載均衡


下面開始簡要的負載均衡配置:

負載均衡:多臺伺服器平均分擔負載,不會因某臺伺服器的負載宕機而某臺伺服器閒置的情況,也會不會因某臺宕機而影響業務。

實驗所需環境

準備三臺已安裝了nginx服務的伺服器:
A伺服器ip:10.10.10.10(Master)
B伺服器ip:10.10.10.11
C伺服器ip:10.10.10.12
測試域名:test.com
部署思路:A伺服器作為主伺服器,域名直接解析到A伺服器上,由A伺服器負載均衡到B和C伺服器上
域名解析:在要訪問的Windows的hosts檔案中加入:10.10.10.10test.com
首先確保三臺服務都安裝的相同版本或者版本差別不大的nginx服務並且啟動,預設的nginx.conf檔案

A主伺服器的nginx.conf在http節點中加入如下程式碼

http{
......
......
upstreamMyServer{#定義負載裝置ip及其裝置狀態
server10.10.10.11:80;#做負載均衡的伺服器地址B
server10.10.10.12:80;#做負載均衡的伺服器地址C
}
server{
listen80;
location/{
proxy_passhttp://MyServer;#指向上面設定反向代理轉發的伺服器
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
......
......
}

/usr/local/nginx/sbin/nginx-sreload#儲存後重啟nginx

B、C伺服器nginx.conf在http節點中加入如下程式碼

http{
......
......
server{
listen80;#和A伺服器中upstream中對應設定的server埠要相同
server_nametest.com;#域名
location/{
roothtml;
indexindex.htmlindex.htm;
}
......
......
}
/usr/local/nginx/sbin/nginx-sreload#儲存後重啟nginx

至此,簡要的nginx負載已配置完畢,在添加了hosts的Windows主機上開啟瀏覽器,輸入http://test.com,就可以看到預設的index.html頁面,重新整理會在B/C伺服器上負載輪詢。

為了可以直觀的檢視2臺負載,可以在修改B、C伺服器的index.html預設檔案,以此區別重新整理頁面的顯示。同時也可以通過B、C伺服器nginx的log日誌檢視訪問記錄

B伺服器

wKioL1bP6VLCFLDSAAAnhMy62NM595.png
C伺服器
wKiom1bP6OGyEGngAAAprtjuA4E628.png


可以測試,分別把B、C的nginx服務stop,重新整理頁面是否正常,達到負載需求。


此時會發現A伺服器只做了Master,負載分發,是否也可以提供服務呢。做如下設定後,就可以讓ABC三臺伺服器做負載均衡

在A服務的nginx.conf 做如下設定,將A服務加入到upstream節點中,其它B、C伺服器配置不變化

http{
.....
.....
upstreamMyServer{
server10.10.10.11:80;#做負載均衡的伺服器地址B
server10.10.10.12:80;#做負載均衡的伺服器地址C
server10.10.10.12:8081;#做負載均衡的伺服器地址A(新增A服務的地址)
}
server{
listen80;
location/{
proxy_passhttp://MyServer;#指向上面設定反向代理轉發的伺服器
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
}
server{
listen8081;#埠
server_nametest.com;#域名
location/{
roothtml;
indexindex.htmlindex.htm;
}
}
....
....
}
/usr/local/nginx/sbin/nginx-sreload#重啟nginx

再重新整理頁面,此時就可以發現三臺主機頁面都已分別顯示

A伺服器
wKioL1bP6PSDB9LEAAAm0Z2qjOo474.png
B伺服器
wKioL1bP6VLCFLDSAAAnhMy62NM595.png
C伺服器
wKiom1bP6OGyEGngAAAprtjuA4E628.png




轉載於:https://blog.51cto.com/liumissyou/1745239