Nginx負載均衡原理簡介與負載均衡配置詳解html
by:授客 QQ:1033553122nginx
nginx-1.10.0web
客戶端向反向代理髮送請求,接着反向代理根據某種負載機制轉發請求至目標服務器(這些服務器都運行着相同的應用),並把得到的內容返回給客戶端,期中,代理請求可能根據配置被髮往不一樣的服務器。服務器
測試案例:app
以下,分別在兩臺服務器(192.168.1.103, 192.168.1.102)上部署了相同的應用,並經過8080端口訪問網站,以下負載均衡
http://192.168.1.xx:8080/webautotest/xxxxxxxide
同時在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
以下,訪問相同的頁面,展現來自不一樣服務器的頁面
nginx提供瞭如下三種負載均衡機制、方法:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
上例中,有3個應用實例分別運行在srv1-srv3。當不顯示指定負載均衡方法時,默認爲round-robin。全部請求都被代理轉發至myapp1服務器組,並根據負載均衡方法來分發請求。
另外一個負載均衡原則爲least-connected。當一些請求花費較長時間來完成時,least-connected更「公平」的控制應用程序實例上的負載。
配置了least-connected的負載均衡機制的狀況下,nginx會盡可能不讓負載繁忙的應用服務器上負載過多的請求,相反的,會把新的請求發送到比較不繁忙的服務器。
配置示例:
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
注意,round-robin或least-connected負載均衡下,每一個後續的客戶端可能被分發至不一樣服務器,不保證相同客戶端的請求老是被髮送到相同的服務器。
若是有必要把客戶端綁定至特定服務器,則可以使用ip-hash負載均衡機制。
ip-hash機制下,客戶端ip地址被用做hash key來判斷客戶端請求應該發送到哪一個服務器,這種方法保證了來自相同客戶端的請求老是發送到相同服務器(若是服務器可用的話)
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
可經過配置服務器權重來影響負載均衡機制。
上面的例子中,都未配置服務器權重,這意味着全部服務器都擁有相同的權重。
針對round-robin負載機制,權重意味着更多或更少的請求傳送至服務器---假設有足夠的請求,且按統一方式處理請求,且足夠快完成請求處理。
配置示例:
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
上例配置中,每發送至服務器實例的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:
參考連接:
http://nginx.org/en/docs/http/load_balancing.html
https://www.nginx.com/resources/admin-guide/?_ga=1.235398721.1182431122.1462539513