Window Nginx 負載均衡


 案例一:負載均衡(輪循 默認weight = 1)

  准備:我這邊在同一台電腦上面啟動了兩個tomcat,端口分別為9601、9602,每個tomcat下面都放了一個nginx-test項目,項目里面有一個寫有當前tomcat端口的index.html

  修改:nginx.conf文件,在http里面增加:

1 upstream fzjhs {
2     server localhost:9601;
3     server localhost:9602;
4     server localhost:9603;
5 }

  修改:nginx.conf文件,在server里面增加:

1 location / {
2     proxy_pass http://fzjhs;
3 }

  測試:打開瀏覽器輸入Url地址 http://localhost/nginx-test/index.html 不停的刷新頁面,可以看見index.html上面的端口號一直在9601、9602中間切換、規律為ABABABAB

  說明:該策略指的是Nginx請求會把請求挨個、平等的分配到每台服務器。從上面測試可以看出,nginx.conf里面雖然配置了9603端口,但是我這邊沒有啟動9603這個端口,Nginx會自動把它踢下去,如果你這個時候把9603端口啟動起來,在上面的測試中就可以看見在9601、9602、9603中間切換

 

 案例二:負載均衡(權重)

  准備:我這邊在同一台電腦上面啟動了兩個tomcat,端口分別為9601、9602,每個tomcat下面都放了一個nginx-test項目,項目里面有一個寫有當前tomcat端口的index.html

  修改:nginx.conf文件,在http里面增加:

1 upstream fzjhs {
2     server localhost:9601 weight=3;
3     server localhost:9602 weight=6;
4     server localhost:9603 weight=1;
5 }

  修改:nginx.conf文件,在server里面增加:

1 location / {
2     proxy_pass http://fzjhs;
3 }

  測試:打開瀏覽器輸入Url地址 http://localhost/nginx-test/index.html 不停的刷新頁面,可以看見index.html上面的端口號一直在9601、9602中間切換,我這邊刷新了十次,9601出現3次,9602出現7次

  說明:該策略相當於是在輪循策略基礎上,人為控制出現的幾率。從上面測試可以看出,nginx.conf里面雖然也給9603端口配置了權重,但是他沒有啟動;所以9601端口出現的幾率為3/9,9602端口出現的幾率為6/9;如果這個時候把9603端口啟動起來,那么9601端口出現的幾率為3/10,9602端口出現的幾率為6/10,9603端口出現的幾率為1/10

 

 案例三:負載均衡(ip_hash)

  准備:我這邊在同一台電腦上面啟動了兩個tomcat,端口分別為9601、9602,每個tomcat下面都放了一個nginx-test項目,項目里面有一個寫有當前tomcat端口的index.html

  修改:nginx.conf文件,在http里面增加:

1 upstream fzjhs {
2     ip_hash; 
3     server localhost:9601 weight=5;
4     server localhost:9602 weight=5;
5 }

  修改:nginx.conf文件,在server里面增加:

1 location / {
2     proxy_pass http://fzjhs;
3 }

  測試:打開瀏覽器輸入Url地址 http://localhost/nginx-test/index.html 不停的刷新頁面,可以看見index.html上面的端口號要么一直是9601要么一直是9602

  說明:該策越可以讓某一用戶在很長的一個時間段里面只訪問固定的服務器;如果使用上面的輪循和權重模式,會出現用戶登錄之后,用戶session存儲在9601端口的服務器上面,然后用戶一刷新,Nginx又給用戶分配到9602端口上面了,這個時候系統又會讓用戶重新登錄

 

案例四:負載均衡(least_conn)

  准備:我這邊在同一台電腦上面啟動了三個tomcat,端口分別為9601、9602、9603,每個tomcat下面都放了一個nginx-test項目,項目里面有一個寫有當前tomcat端口的index.html

  修改:nginx.conf文件,在http里面增加:

1 upstream fzjhs {
2     ip_hash; 
3     server localhost:9601 weight=5;
4     server localhost:9602 weight=5;
5     server localhost:9603 weight=3;
6 }

  修改:nginx.conf文件,在server里面增加:

1 location / {
2     proxy_pass http://fzjhs;
3 }

  測試:打開瀏覽器輸入Url地址 http://localhost/nginx-test/index.html 不停的刷新頁面,可以看見index.html上面的端口號一直在9601、9602、9603中間切換

  說明:看到上面測試你會想,這tmd不是跟輪循模式一樣了?它里面其實有規律的,請看下面例子:

  說明例子:當前9601端口上有100個連接數、9602端口上有120個連接數、9603端口上有48個連接數,Nginx會選擇9603端口,因為9603的連接數/權重=16是最小的值,而9601的連接數/權重=20,9602的連接數/權重=24

  得出:least_conn = 連接數與權重的比值的最小者

 

負載均衡狀態參數配置

  weight權重
1 server localhost:9601 weight=2;
  down當前服務器下機、不參與負載均衡
1 server localhost:9601 down;
  backup:備份服務器、當其他服務器繁忙異常的時候才會使用此服務器
1 server localhost:9601 backup;
  max_fails:請求最大失敗次數、默認為1、當超過這個值得時候返回proxy_next_upstream錯誤
1 server localhost:9601 max_fails=2;
  fail_timeout:當請求錯誤達到max_fails配置值時、暫停服務的時間、默認為10s
1 server localhost:9601 fail_timeout=5s;

 

proxy_next_upstream怎么用?在什么情況下面會使用

  我這邊在同一台電腦上面啟動了兩個tomcat,端口分別為9601、9602,每個tomcat下面都放了一個nginx-test項目,但是只有9601端口下面的項目里面放了一個寫有當前tomcat端口的index.html,這個時候我按照負載均衡輪循配置,配置完成之后,去訪問http://localhost/nginx-test/index.html,有一半的幾率會出現404錯誤,如果

max_fails=2,納悶就會出現2次404錯誤后,9602端口的服務器才會被踢下去,這個時候想要避免這個問題,就需要通過proxy_next_upstream做如下配置:

1 location / {
2     proxy_pass http://fzjhs;
3     proxy_next_upstream http_404 error invalid_header;
4 }

  通過上面配置,如果訪問9602端口的服務器出現404錯誤,允許把當前請求轉發到其他服務器,這樣用戶就不會看見頁面上面出現404錯誤。

使用proxy_next_upstream會出現那些問題proxy_next_upstream注意事項?

  注意事項:必須和proxy_pass、upstream塊一起使用

  出現問題:重復請求

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM