一 負載均衡概述
1.1 負載均衡介紹
負載均衡是將負載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給使用者更好的體驗。對於Web應用,通過負載均衡,可以將一臺伺服器的工作擴充套件到多臺伺服器中執行,提高整個網站的負載能力。其本質採用一個排程者,保證所有後端伺服器都將效能充分發揮,從而保持伺服器叢集的整體效能最優,這就是負載均衡。
二 Nginx負載均衡
2.1 優點
2.2 主要均衡機制
2.3 負載均衡策略
nginx的負載均衡策略可以劃分為兩大類:內建策略和擴充套件策略,擴充套件策略為第三方提供。
內建策略
擴充套件策略
提示:預設輪詢可能存在一個問題,假如使用者在某臺伺服器上登入了,那麼該使用者第二次請求的時候,其登入資訊會丟失。因為在負載均衡系統中,每次請求都會重新定位到伺服器叢集中的某一個,那麼就會導致已經登入某一個伺服器的使用者在重新定位到另一個伺服器了,所以就會導致丟失登入資訊。
因此針對如上問題,可以採用ip_hash方式解決,如果客戶已經訪問了某個伺服器,當使用者再次訪問時,會將該請求通過雜湊演算法,自動定位到該伺服器。
2.4 負載均衡內建變數
nginx負載均衡器內建變數(Embedded Variables),nginx負載均衡模組ngx_http_upstream_module支援下列內建變數:
2.5 負載均衡健康檢查
nginx反向代理包含內建的或第三方擴充套件來實現伺服器健康檢測的。如果後端某臺伺服器響應失敗,nginx會標記該臺伺服器失效,在特定時間內,請求不分發到該臺上。
fail_timeout:該指令定義了多長時間伺服器將被標記為失敗。在fail_timeout後,伺服器還是failed,nginx將檢測該伺服器是否存活,如果探測成功,將標記為活的。
max_fails:該指令設定在fail_timeout期間內連續的失敗嘗試。預設情況下,max_fails為1。如果被設定為0,該伺服器的健康檢測將禁用。
2.6 負載均衡狀態碼
三 預設輪詢負載均衡
3.1 環境預設
所有節點安裝Nginx:略
配置RS測試頁面:
1 [root@nginx02 ~]# mkdir /usr/share/nginx/balanc/ 2 [root@nginx02 ~]# echo '<h1>Rs_172.24.10.22</h1>' > /usr/share/nginx/balanc/index.html
1 [root@nginx02 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF 2 server { 3 listen 9090; 4 server_name 172.24.10.22; 5 location / { 6 root /usr/share/nginx/balanc; 7 index index.html; 8 access_log /var/log/nginx/rs.access.log main; 9 error_log /var/log/nginx/rs.error.log warn; 10 } 11 } 12 EOF
1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@nginx02 ~]# nginx -s reload #過載配置檔案
1 [root@nginx03 ~]# mkdir /usr/share/nginx/balanc/ 2 [root@nginx03 ~]# echo '<h1>Rs_172.24.10.23</h1>' > /usr/share/nginx/balanc/index.html
1 [root@nginx03 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF 2 server { 3 listen 9090; 4 server_name 172.24.10.23; 5 location / { 6 root /usr/share/nginx/balanc/; 7 index index.html; 8 access_log /var/log/nginx/rs.access.log main; 9 error_log /var/log/nginx/rs.error.log warn; 10 } 11 } 12 EOF
1 [root@nginx03 ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@nginx03 ~]# nginx -s reload #過載配置檔案
1 [root@nginx04 ~]# mkdir /usr/share/nginx/balanc/ 2 [root@nginx04 ~]# echo '<h1>Rs_172.24.10.24</h1>' > /usr/share/nginx/balanc/index.html
1 [root@nginx04 ~]# cat > /etc/nginx/conf.d/rs.conf <<EOF 2 server { 3 listen 9090; 4 server_name 172.24.10.24; 5 location / { 6 root /usr/share/nginx/balanc/; 7 index index.html; 8 access_log /var/log/nginx/rs.access.log main; 9 error_log /var/log/nginx/rs.error.log warn; 10 } 11 } 12 EOF
1 [root@nginx04 ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@nginx04 ~]# nginx -s reload #過載配置檔案 3 [root@client ~]# curl 172.24.10.22:9090 4 <h1>Rs_172.24.10.22</h1> 5 [root@client ~]# curl 172.24.10.23:9090 6 <h1>Rs_172.24.10.23</h1> 7 [root@client ~]# curl 172.24.10.24:9090 8 <h1>Rs_172.24.10.24</h1>
3.2 預設輪詢方式配置
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 server 172.24.10.22:9090; 4 server 172.24.10.23:9090; 5 server 172.24.10.24:9090; 6 } 7 8 server { 9 listen 80; 10 server_name balance.linuxds.com; 11 access_log /var/log/nginx/mybalance.access.log main; 12 error_log /var/log/nginx/mybalance.error.log warn; 13 location / { 14 proxy_pass http://mybalance01; 15 index index.html; 16 proxy_redirect off; 17 proxy_set_header Host $host; 18 proxy_set_header X-Real-IP $remote_addr; 19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 20 client_max_body_size 10m; #允許客戶端請求的最大單檔案位元組數 21 client_body_buffer_size 128k; #緩衝區代理緩衝使用者端請求的最大位元組數 22 proxy_connect_timeout 300; #nginx跟後端伺服器連線超時時間(代理連線超時) 23 proxy_send_timeout 300; #後端伺服器資料回傳時間(代理髮送超時) 24 proxy_read_timeout 300; #連線成功後,後端伺服器響應時間(代理接收超時) 25 proxy_buffer_size 4k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小 26 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定 27 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 28 proxy_temp_file_write_size 64k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳 29 } 30 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
3.3 確認測試
瀏覽器訪問:http://balance.linuxds.com/,並且重新整理3次測試效果。
四 加權輪詢負載均衡
4.1 環境預設
參考3.1。
4.2 加權輪詢方式配置
1 [root@balance ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 server 172.24.9.11:9090 weight=1 max_fails=1 fail_timeout=2; 4 server 172.24.9.12:9090 weight=8 max_fails=2 fail_timeout=2; 5 server 172.24.9.13:9090 backup; #配置為備份伺服器 6 } 7 8 server { 9 listen 80; 10 server_name balance.linuxds.com; 11 access_log /var/log/nginx/mybalance.access.log main; 12 error_log /var/log/nginx/mybalance.error.log warn; 13 location / { 14 proxy_pass http://mybalance01; 15 index index.html; 16 proxy_redirect off; 17 proxy_set_header Host $host; 18 proxy_set_header X-Real-IP $remote_addr; 19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 20 client_max_body_size 10m; 21 client_body_buffer_size 128k; 22 proxy_connect_timeout 300; 23 proxy_send_timeout 300; 24 proxy_read_timeout 300; 25 proxy_buffer_size 4k; 26 proxy_buffers 4 32k; 27 proxy_busy_buffers_size 64k; 28 proxy_temp_file_write_size 64k; 29 } 30 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
配置釋義:
weight:引數值越高則被分配到的概率越大。
4.3 確認測試
瀏覽器訪問:http://balance.odocker.com/,並且重新整理3次測試效果。此時測試172.24.9.12更容易被分配,172.24.9.13在其他RS正常的時候不會參與響應。
五 最小連線負載均衡
5.1 環境預設
參考3.1。
5.2 最小連線方式配置
1 [root@balance ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 least_conn; 4 server 172.24.10.21:9090; 5 server 172.24.10.22:9090; 6 server 172.24.10.23:9090; 7 } 8 9 server { 10 listen 80; 11 server_name balance.linuxds.com; 12 access_log /var/log/nginx/mybalance.access.log main; 13 error_log /var/log/nginx/mybalance.error.log warn; 14 location / { 15 proxy_pass http://mybalance01; 16 index index.html; 17 } 18 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
5.3 確認測試
瀏覽器訪問:http://balance.linuxds.com/。
提示:此方式主要應用於請求處理時間長短不一造成伺服器過載的情況。
六 IP hash負載均衡
6.1 環境預設
參考3.1。
6.2 ip hash方式配置
1 [root@balance ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 ip_hash; 4 server 172.24.10.21:9090; 5 server 172.24.10.22:9090; 6 server 172.24.10.23:9090; 7 } 8 9 server { 10 listen 80; 11 server_name balance.linuxds.com; 12 access_log /var/log/nginx/mybalance.access.log main; 13 error_log /var/log/nginx/mybalance.error.log warn; 14 location / { 15 proxy_pass http://mybalance01; 16 index index.html; 17 } 18 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
6.3 確認測試
瀏覽器訪問:http://balance.linuxds.com/。
提示:此方式主要應用於會話保持。
七 fair負載均衡
7.1 環境預設
參考3.1。
7.2 fair方式配置
1 [root@balance ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 fair; 4 server 172.24.10.21:9090; 5 server 172.24.10.22:9090; 6 server 172.24.10.23:9090; 7 } 8 9 server { 10 listen 80; 11 server_name balance.linuxds.com; 12 access_log /var/log/nginx/mybalance.access.log main; 13 error_log /var/log/nginx/mybalance.error.log warn; 14 location / { 15 proxy_pass http://mybalance01; 16 index index.html; 17 } 18 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
7.3 確認測試
瀏覽器訪問:http://balance.linuxds.com/。
提示:該方式下響應快的伺服器都會優先分配,接著才會分配響應速度較慢的伺服器。因此此方式主要應用於後端伺服器效能不均一。
八 url_hash負載均衡
8.1 環境預設
參考3.1。
8.2 ip hash方式配置
1 [root@balance ~]# vi /etc/nginx/conf.d/balance.conf 2 upstream mybalance01 { 3 hash $request_uri; 4 hash_method crc32; 5 server 172.24.10.21:9090; 6 server 172.24.10.22:9090; 7 server 172.24.10.23:9090; 8 } 9 10 server { 11 listen 80; 12 server_name balance.linuxds.com; 13 access_log /var/log/nginx/mybalance.access.log main; 14 error_log /var/log/nginx/mybalance.error.log warn; 15 location / { 16 proxy_pass http://mybalance01; 17 index index.html; 18 } 19 }
1 [root@balance ~]# nginx -t -c /etc/nginx/nginx.conf #檢查配置檔案 2 [root@balance ~]# nginx -s reload #過載配置檔案
8.3 確認測試
瀏覽器訪問:http://balance.linuxds.com/。
提示:此方式主要應用於後端伺服器為快取時比較適用。
參考文件:
https://ifeve.com/nginx-http/
https://www.cnblogs.com/lcword/p/11800474.html