Nginx配置後端服務負載均衡
阿新 • • 發佈:2020-07-13
參考文章:https://www.cnblogs.com/lave/p/10477375.html
概念介紹
負載均衡建立在現有網路結構之上,提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬,增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。
配置修改
修改nginx配置檔案( /etc/nginx/conf.d/default.conf )
upstream balance { # 配置被轉發的伺服器,其中的 ip 推薦使用內網 ip,可以提高訪問速度,weight 為權重,數字越大,權越高,下面的配置代表請求中三分之一分發給第一臺伺服器,三分之二的請求分發給第二臺伺服器。 server 192.168.31.112:8080 weight=1; server 192.168.31.113:8080 weight=1; server 192.168.31.114:8080 weight=1; } server { # 監聽的埠 listen 80; # 域名,如果沒有域名可以使用ip進行訪問 server_name 192.168.31.110 #自己的域名獲取當前nginx伺服器的IP; location / { add_header X-Content-Type-Options nosniff; proxy_set_header X-scheme $scheme; # 作用是我們可以獲取到客戶端的真實ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_hide_header X-Powered-By; proxy_hide_header Vary; # 重點是這裡,將代理轉發給上方 upstream 中配置的兩臺伺服器去處理,這裡的 http:// 後的值必須和 upstream 後面的值一致 proxy_pass http://balance; } }
nginx負載均衡策略
nginx的負載均衡策略有4種:
輪詢(預設)
最基本的配置方法,它是upstream的預設策略,每個請求會按時間順序逐一分配到不同的後端伺服器。
具體引數有:
引數 | 描述 |
---|---|
fail_timeout | 與max_fails結合使用 |
max_fails | 設定在fail_timeout引數設定的時間內最大失敗次數,如果在這個時間內,所有針對該伺服器的請求都失敗了,那麼認為該伺服器會被認為是停機了 |
fail_time | 伺服器會被認為停機的時間長度,預設為10s。 |
backup | 標記該伺服器為備用伺服器。當主伺服器停止時,請求會被髮送到它這裡。 |
down | 標記伺服器永久停機了。 |
注意:
- 在輪詢中,如果伺服器down掉了,會自動剔除該伺服器。
- 預設配置就是輪詢策略。
- 此策略適合伺服器配置相當,無狀態且短平快的服務使用。
weight 權重
在輪詢策略的基礎上制定淪陷的機率。數字越大權重越高。例如:
upstream foo {
server localhost:8001 weight=2;
server localhost:8002;
server localhost:8003 backup;
server localhost:8004 max_fails=3 fail_timeout=20s;
}
這裡例子中,weight引數用於制定輪詢的機率,weight預設值為1;weight的數值和被訪問的機率成正比。
ip_hash IP雜湊
負載均衡器按照客戶端IP地址的分配方式,可以確保相同客戶端的請求一直髮送到相同的伺服器。這樣每個訪客都固定訪問一個後端伺服器。
upstream foo {
ip_hash;
server localhost:8001 weight=2;
server localhost:8002;
server localhost:8003;
server localhost:8004 max_fails=3 fail_timeout=20s;
}
注意:
- 在nginx版本1.3.1之前,不能在ip_hash中使用權重(weight)。
- ip_hash不能與backup同時使用。
- 此策略適合有狀態服務,比如session。
- 當有伺服器需要剔除,必須手動down掉。
least_conn 最小連線
把請求轉發給連線數較少的後端伺服器。輪詢演算法是把請求平均的轉發給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果
upstream foo {
least_conn;
server localhost:8001 weight=2;
server localhost:8002;
server localhost:8003 backup;
server localhost:8004 max_fails=3 fail_timeout=20s;
}
注意:此負載均衡策略適合請求處理時間長短不一造成伺服器過載的情況。