網站首頁 編程語言 正文
1. nginx負載均衡介紹
nginx應用場景之一就是負載均衡。在訪問量較多的時候,可以通過負載均衡,將多個請求分攤到多臺服務器上,相當于把一臺服務器需要承擔的負載量交給多臺服務器處理,進而提高系統的吞吐率;另外如果其中某一臺服務器掛掉,其他服務器還可以正常提供服務,以此來提高系統的可伸縮性與可靠性。
下圖為負載均衡示例圖,當用戶請求發送后,首先發送到負載均衡服務器,而后由負載均衡服務器根據配置規則將請求轉發到不同的web服務器上。
2. nginx負載均衡策略
以下截圖為nginx官網文檔
nginx內置負載均衡策略主要分為三大類,分別是輪詢、最少連接和ip hash
- 最少連接
請求分配給活動連接數最少的服務器,哪臺服務器連接數最少,則把請求交給哪臺服務器,由nginx統計服務器連接數
- ip hash
基于客戶端ip的分配方式
2.1 輪詢
以循環方式分發對應用服務器的請求,將請求平均分發到每臺服務器上。
2.1.1 普通輪詢方式
該方式是默認方式,輪詢適合服務器配置相當,無狀態且短平快的服務使用。另外在輪詢中,如果服務器掛掉,會自動剔除該服務器。
http {
# 定義轉發分配規則
upstream myapp1 {
server srv1.com; # 要轉發到的服務器,如ip、ip:端口號、域名、域名:端口號
server srv2.com:8088;
server 192.168.0.100:8088;
}
server {
listen 80; # nginx監聽的端口
location / {
# 使用myapp1分配規則,即剛自定義添加的upstream節點
# 將所有請求轉發到myapp1服務器組中配置的某一臺服務器上
proxy_pass http://myapp1;
}
}
}
2.1.2 權重輪詢方式
如果在 upstream 中配置的server參數后追加 weight 配置,則會根據配置的權重進行請求分發。此策略可以與least_conn和ip_hash結合使用,適合服務器的硬件配置差別比較大的情況。
# 定義轉發分配規則
upstream myapp1 {
server srv1.com weight=1; # 該臺服務器接受1/6的請求量
server srv2.com:8088 weight=2; # 該臺服務器接受2/6的請求量
server 192.168.0.100:8088 weight=3; # 該臺服務器接受3/6的請求量;
}
2.2 最少連接
輪詢算法是把請求平均的轉發給各個后端,使它們的負載大致相同;但是,有些請求占用的時間很長,會導致其所在的后端負載較高。這種情況下,least_conn這種方式就可以達到更好的負載均衡效果,適合請求處理時間長短不一造成服務器過載的情況。
# 定義轉發分配規則
upstream myapp1 {
least_conn; # 把請求分派給連接數最少的服務器
server srv1.com;
server srv2.com:8088;
server 192.168.0.100:8088;
}
2.3 ip hash
這個方法確保了相同的客戶端的請求一直發送到相同的服務器,這樣每個訪客都固定訪問一個后端服務器。如用戶需要分片上傳文件到服務器下,然后再由服務器將分片合并,這時如果用戶的請求到達了不同的服務器,那么分片將存儲于不同的服務器目錄中,導致無法將分片合并,該場景則需要使用ip hash策略。
需要注意的是,ip_hash不能與backup同時使用,另外當有服務器需要剔除,必須手動down掉,此模式適合有狀態服務,比如session。
# 定義轉發分配規則
upstream myapp1 {
ip_hash; # #保證每個請求固定訪問一個后端服務器
server srv1.com;
server srv2.com:8088;
server 192.168.0.100:8088;
}
3. nginx負載均衡搭建示例
該示例使用一臺nginx作為負載均衡服務器,兩臺tomcat作為web服務器;可以把三個服務均在一臺機器進行搭建,也可以使用虛擬機虛擬三臺機器,然后進行測試。教程這里就只在一臺機器進行搭建,采用默認的權重方式進行配置。
3.1 tomcat配置
將兩臺tomcat解壓出來,配置完畢相應的端口,然后在webapps目錄下創建test目錄,然后在test目錄中創建index.html文件,隨便寫入一些內容,兩臺tomcat中test目錄下的index.html文件內容要區分開來,例如寫入1111111 / 222222222,如下圖所示。
3.2 nginx配置
首先進行nginx的安裝,安裝教程可以參考
https://www.jb51.net/article/231249.htm
安裝完畢后,進入nginx目錄下的conf目錄,編輯 nginx.conf 文件,修改內容為在http節點下增加
upstream tomcat { # 該部分內容與 server 節點同級
server tomcat服務的ip:tomcat服務的端口號;
server tomcat服務的ip:tomcat服務的端口號;
}
server節點下的location /節點中,把默認的
location / {
root html;
index index.html index.htm;
}
修改為
location / {
proxy_pass http://tomcat;
}
然后啟動 兩臺tomcat與nginx服務,在瀏覽器輸入nginx服務的地址:端口,不停刷新頁面,就可以看到每次請求的服務器發生了改變。
總結
原文鏈接:https://blog.csdn.net/guo_ridgepole/article/details/124517113
相關推薦
- 2022-08-17 VMWare虛擬機為Windows?Server?2008設置靜態IP的方法_VMware
- 2023-04-03 python中super().__init__()作用詳解_python
- 2022-11-14 C#中的委托、事件與接口
- 2022-03-19 解析OpenXml?Pptx的邊框虛線轉為WPF的邊框虛線問題_C#教程
- 2022-06-02 CKAD認證中部署k8s并配置Calico插件_云和虛擬化
- 2022-07-29 C++超詳細講解數組操作符的重載_C 語言
- 2022-02-13 Flutter在showModalBottomSheet中使用StatefulWidget
- 2022-08-23 Python可視化模塊altair的使用詳解_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同步修改后的遠程分支