nginx負載均衡配置

測試環境

  • centos7.5
  • nginx-1.14.2
  • nginx安裝目錄:/usr/local/nginx
  • nginx源代碼目錄:/root/setup/nginx-1.14.2

介紹

跨多個應用程序實例的負載平衡是一種經常使用的技術,用於優化資源利用率、最大化吞吐量、減小延遲和確保容錯配置。html

可使用nginx做爲一個很是有效的HTTP負載均衡器,將流量分配到多個應用服務器,並使用nginx提升web應用程序的性能、可伸縮性和可靠性。nginx

nginx負載均衡機制

nginx默認支持4種負載均衡機制:web

  1. 循環機制(round-robin),對應用服務器的請求以循環的方式進行分發
  2. 最少鏈接機制(least-connected),對應用服務的請求分發給當前鏈接數最少的服務器
  3. ip-hash機制(ip-hash),經過hash算法,將請求分發給固定的服務器
  4. 權重機制(weighted load balancing),按照權重大小,對請求進行分發,權重大的服務器處理的請求佔比多

建立/root/web/app1,/root/web/app2,/root/web/app3目錄,分別模擬三個應用程序。在三個目錄中分別上傳index.html文件,index.html分別輸出app一、app二、app3。修改"/usr/local/nginx/conf/nginx.conf"配置文件,在http節點下添加三個server節點:算法

 

 1 # app1
 2 server {
 3        listen 8080;
 4        server_name localhost;
 5        location / {
 6             root /root/web/app1;
 7        }    
 8 }
 9 
10 # app2
11 server {
12         listen 8081;
13         server_name localhost;
14 
15         location / {
16                 root /root/web/app2;
17         }
18 }
19 
20 # app3
21 server {
22         listen 8082;
23         server_name localhost;
24 
25         location / {
26                 root /root/web/app3;
27         }
28 }

循環機制(round-robin)

在http節點下添加以下配置節點centos

 1 upstream app  {
 2            server localhost:8080; //app1
 3         server localhost:8081; //app2
 4         server localhost:8082; //app2
 5 }
 6 
 7 server {
 8     listen       80;
 9     server_name  localhost;
10     location / {
11         proxy_pass http://app; //app是upstream節點後的key取值
12     }
13 }

保存nginx.conf配置文件,從新加載配置文件服務器

1 /usr/local/nginx/sbin/nginx -t;
2 /usr/local/nginx/sbin/nginx -s reload;

當訪問http://server_name時,請求會大致均衡的分發給:localhost:8080,localhost:8081,localhost:8082。app

最少鏈接機制(least-connected)

nginx中使用最少鏈接機制須要"least_conn"指令來激活,負載均衡

1 upstream app  {
2         least_conn;
3            server localhost:8080; //app1
4         server localhost:8081; //app2
5         server localhost:8082; //app2
6 }

當接收到請求後,請求會被分發給當前負載量最少的服務器性能

ip-hash機制(ip-hash)

循環機制、最少鏈接機制針對同一個客戶端發送的請求可能會被分發給不一樣的服務器,可是在一些場景中須要將同一個客戶端的請求分發給固定的服務器,那個可使用ip-hash機制來實現此功能。測試

1 upstream app  {
2         ip_hash;
3            server localhost:8080; //app1
4         server localhost:8081; //app2
5         server localhost:8082; //app2
6 }

當接收到請求後,請求會被分發給當前負載量最少的服務器

權重機制(weighted load balancing)

在實際場景中,應用程序所在的服務器集羣的配置性能可能差距很大,那麼配置好的服務器天然也須要處理較多的請求才能發揮出價值,此時就能夠經過「權重機制」來完成

1 upstream app  {
2            server localhost:8080 weight=3; //app1
3         server localhost:8081; //app2
4         server localhost:8082; //app2
5 }

如上配置,若是5個請求,3個請求分發給localhost:8080,另外兩個分發給localhost:808一、localhost:8082. 對於"最少鏈接機制"、"ip-hash機制"的權重機制配置語法如上配置同樣。

健康檢查

nginx健康檢查主要是經過「max_fails"和「fail_timeout」指令來控制。

1 upstream app  {
2            server localhost:8080 weight=3 fail_timeout=10 max_fails=1; //app1
3         server localhost:8081; //app2
4         server localhost:8082; //app2
5 }

若是fail_timeout的次數超過了max_fails的值,nginx則認爲該服務不可達,後續的請求則不會分發給該服務。後面nginx會定時檢測不可達的服務是否可達,若是可達,則將其激活,分發請求。 保存nginx.conf配置文件,從新加載配置文件 

1 /usr/local/nginx/sbin/nginx -t;
2 /usr/local/nginx/sbin/nginx -s reload;

參考文章

http://nginx.org/en/docs/http/load_balancing.html

相關文章
相關標籤/搜索