Nginx負載均衡原理簡介與負載均衡配置詳解
by:授客 QQ:1033553122
測試環境
nginx-1.10.0
負載均衡原理
用戶端向反向代理發送請求,接着反向代理根據某種負載機制轉發請求至目标伺服器(這些伺服器都運作着相同的應用),并把獲得的内容傳回給用戶端,期中,代理請求可能根據配置被發往不同的伺服器。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDMyYTO0cjM40SM1gzMzgTNyEzNwEDM5EDMy0iM1QTO2UTMvwVMwkTMwIzLcJTN0kjN1EzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
負載均衡配置
測試案例:
如下,分别在兩台伺服器(192.168.1.103, 192.168.1.102)上部署了相同的應用,并通過8080端口通路網站,如下
http://192.168.1.xx:8080/webautotest/xxxxxxx
同時在192.168.1.103上安裝了nginx反向代理,想通過192.168.1.103的80端口來實作對兩個站點的通路
編輯nginx配置檔案(例中為/usr/local/ngnix/conf/nginx.conf),找到http結點,如下,添加帶背景色部分的内容,
http {
upstream myapp1 {
server 192.168.1.103:8080;
server 192.168.1.104:8080;
}
……略
server {
listen 80;
server_name
localhost;
location /webautotest/ {
proxy_buffering off;
proxy_pass http://myapp1;
重新加載配置檔案
[root@localhost nginx-1.10.0]#
/usr/local/ngnix/sbin/nginx -s reload
通路測試url
如下,通路相同的頁面,展示來自不同伺服器的頁面
說明:
負載均衡方法
nginx提供了以下三種負載均衡機制、方法:
-
round-robin —
請求以循環、輪轉的方式分發到應用伺服器。
-
least-connected —
下一個請求被配置設定到擁有最少活動連接配接數的伺服器
-
ip-hash —
使用一個哈希函數,基于用戶端ip位址判斷下一個請求應該被分發到哪個伺服器。
預設的負載均衡配置
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
location / {
上例中,有3個應用執行個體分别運作在srv1-srv3。當不顯示指定負載均衡方法時,預設為round-robin。所有請求都被代理轉發至myapp1伺服器組,并根據負載均衡方法來分發請求。
最少連接配接負載均衡
另一個負載均衡原則為least-connected。當一些請求花費較長時間來完成時,least-connected更“公平”的控制應用程式執行個體上的負載。
配置了least-connected的負載均衡機制的情況下,nginx會盡量不讓負載繁忙的應用伺服器上負載過多的請求,相反的,會把新的請求發送到比較不繁忙的伺服器。
配置示例:
least_conn;
會話持久性
注意,round-robin或least-connected負載均衡下,每個後續的用戶端可能被分發至不同伺服器,不保證相同用戶端的請求總是被發送到相同的伺服器。
如果有必要把用戶端綁定至特定伺服器,則可使用ip-hash負載均衡機制。
ip-hash機制下,用戶端ip位址被用作hash key來判斷用戶端請求應該發送到哪個伺服器,這種方法保證了來自相同用戶端的請求總是發送到相同伺服器(如果伺服器可用的話)
ip_hash;
負載均衡權重
可通過配置伺服器權重來影響負載均衡機制。
上面的例子中,都未配置伺服器權重,這意味着所有伺服器都擁有相同的權重。
針對round-robin負載機制,權重意味着更多或更少的請求傳送至伺服器---假設有足夠的請求,且按統一方式處理請求,且足夠快完成請求處理。
upstream myapp1
{
server srv1.example.com weight=3;
上例配置中,每發送至伺服器執行個體的5個新的請求中,有3個發送到srv1,1個發送到srv2,另1個發送到srv3。
注:目前版本似乎隻實作了round-robin機制下的權重設定
健康檢測
nginx反向代理實作包含伺服器健康檢查。如果來自特定伺服器的響應失敗,報錯,nginx将标記該伺服器為failed,一段時間内盡量避免選擇此伺服器作為随後請求的分發伺服器。
max_fails機制設定fail_timeout期間,和伺服器溝通失敗的連續重試次數,預設為1.當設定為0時,不做伺服器健康檢測。fail_timeout定義了伺服器被标記為failed的時長。fail_timeout時間間隔過後,nginx将開始使用活動用戶端請求來探測伺服器,如果探測成功則标記伺服器為活動伺服器。
進一步閱讀
In addition, there are more directives and
parameters that control server load balancing in nginx, e.g.
proxy_next_upstream,
backup,
down, and
keepalive. For more information please check
our reference
documentation.
Last but not least,
application load balancing,
application health checks,
activity monitoring and
on-the-fly reconfiguration of server groups are available as part of our paid
NGINX Plus subscriptions.
The following articles describe load balancing
with NGINX Plus in more detail:
-
Load
Balancing with NGINX and NGINX Plus
- Balancing with NGINX and NGINX Plus part 2
參考連結:
http://nginx.org/en/docs/http/load_balancing.html
https://www.nginx.com/resources/admin-guide/?_ga=1.235398721.1182431122.1462539513
作者:授客
QQ:1033553122
全國軟體測試QQ交流群:7156436
Git位址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群