網站首頁 編程語言 正文
一、upstream模塊簡介
Nginx的負載均衡功能依賴于ngx_http_upsteam_module模塊,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。ngx_http_upstream_module模塊有允許Nginx定義一組或多組服務組,使用的可以通過proxy_pass代理方式把網站的請求發送到事先定義好的對應upstream組的名字上。upstream模塊可以實現負載均衡,其實隱含了一個重要功能那就是冗余,在一個web節點故障的時候,配置了upstream時可以自動切換到正常工作的節點。
二、負載均衡算法簡介
調度算法一般分為兩類:第一類為靜態調度算法,即負載均衡器根據自身設定的規則進行分配,不需要考慮后端節點服務器的情。第二類為動態調度算法,即負載均衡器會根據后端節點的當前狀態來決定是否分發請求。
1、輪詢
rr 輪循即round robin 默認調度算法,靜態調度算法。客戶端請求順序把客戶端的請求逐一分配到不同的后端節點服務器,這相當于 LVS 中的 rr 算法,如果后端節點服務器宕機(默認情況下nginx 只檢測80端口)。宕機的服務器會自動從節點服務器池中剔除,以便客戶端的用戶訪問不受影響。新的請求會分配給正產的服務器。
2、權重輪詢
wrr即weight 權重輪循,靜態調度算法。在 rr 輪循算法的基礎上加上權重,即為權重輪循算法,當使用該算法時,權重和用戶訪問成正比,權重值越大,被轉發的請求也就越多。可以根據服務器的配置和性能指定權重值大小,有效解決新舊服務器性能不均帶來的請求分配問題。
3、IP哈希
ip_hash是靜態調度算法,每個請求按客戶端 IP 的 hash 結果分配,當新的請求到達時,先將其客戶端IP通過哈希算法哈希出一個值,在隨后的客戶端請求中,客戶 IP 的哈希值只要相同,就會被分配至同一臺服務器,該調度算法可以解決動態網頁的 session 共享問題,但有時會導致請求分配不均,即無法保證 1:1 的負載均衡,因為在國內大多數公司都是 NAT 上網模式,多個客戶端會對應一個外部 IP,所以,這些客戶端都會被分配到同一節點服務器,從而導致請求分配不均。LVS 負載均衡的 -P 參數、keepalived 配置里的 persistence_timeout 50 參數都類似這個 Nginx 里的 ip_hash 參數,其功能均為解決動態網頁的 session 共享問題。
4、最小連接數
least_conn是動態調度算法,會根據后端節點的連接數來決定分配情況,哪個機器連接數少就分發。
5、最短響應時間
最短響應時間(fair)調度算法是動態調度算法,會根據后端節點服務器的響應時間來分配請求,響應時間端的優先分配。這是更加智能的調度算法。此種算法可以依據頁面大小和加載時間長短只能地進行負載均衡,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx 本身是不支持 fair 調度算法的,如果需要使用這種調度算法,必須下載 Nginx 的相關模塊 upstream_fair。
6、url_hash算法
url_hash算法是動態調度算法,按訪問 URL 的 hash 結果來分配請求,使每個 URL 定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率命中率。(多用于后端服務器為緩存時的場景下)Nginx 本身是不支持 rul_hash的,如果需要使用這種調度算法,必須安裝 Nginx 的hash 模塊軟件包。
三、配置示例
1、配置示例模板
upstream backend {
server backend1.example.com weight=5; #執行realserver,可以賦權重
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup; #backup表示該節點為熱備節點,激活節點失效時啟用
server backup2.example.com:8080 down; #下線服務器,可以在real服務器需要維護時配置
}
server {
listen 80; #listen、server_name這些正常配置
server_name www.test.com;
location / {
proxy_pass http://backend; ##反向代理執行定義的upstream名字
}
}
2、權重輪詢配置示例
upstream show {
server 192.168.0.141 weight=1;
server 192.168.0.142 weight=2;
}
3、ip_hash配置示例
upstream show {
ip_hash;
server 192.168.0.141 ;
server 192.168.0.142 ;
}
4、fair配置示例
upstream show {
fair;
server 192.168.0.141 ;
server 192.168.0.142 ;
}
5、least_conn配置示例
upstream show {
least_conn;
server 192.168.0.141 ;
server 192.168.0.142 ;
}
6、url_hash配置示例
upstream show {
server 192.168.0.141 ;
server 192.168.0.142 ;
hash $request_uri;
hash_method crc32;
}
四、負載均衡效果展示
1、部署2個web服務器
分別在s142主機和s142主機部署2個Tomcat服務,服務訪問頁面內容如下:
2、配置nginx服務
upstream show {
ip_hash ; #使用ip_hash負載均衡調度算法
server 192.168.10.141:8080 ;
server 192.168.10.142:8080 ;
}
server {
listen 80; #listen、server_name這些正常配置
server_name www.test.com;
access_log /var/log/nginx/test.access.log;
location / {
proxy_pass http://show; ##反向代理執行定義的upstream名字
}
}
3、配置域名解析
這是模擬測試,使用測試域名,通過修改hosts文件(C:\Windows\System32\drivers\etc\hosts)實現直接通過域名訪問,實際應用需要申請域名并解析。
4、訪問域名驗證
5、停止s142的web服務后再次訪問
停止s142的web服務后應用自動切換到了s141節點,其實upstream模塊可以作為負載均衡,更重要的是實現冗余,如果是單機部署的web應用在出現節點故障時服務即無法訪問,通過upstream可以實現多節點冗余。
6、修改調度算法為輪詢
總結?
原文鏈接:https://blog.csdn.net/carefree2005/article/details/121242227
相關推薦
- 2022-12-02 React?Hook中的useState函數的詳細解析_React
- 2022-05-29 react實現可播放的進度條_React
- 2022-06-25 Python利用format函數實現對齊打印(左對齊、右對齊與居中對齊)_python
- 2022-08-14 Python數據處理之pd.Series()函數的基本使用_python
- 2022-02-07 virtualenvwrapper 解決安裝報錯,virtualenvwrapper 永久生效
- 2023-02-03 python本地降級pip的方法步驟_python
- 2023-01-04 go?doudou應用中使用枚舉類型教程示例_Golang
- 2022-04-11 socket連接關閉問題分析_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支