Nginx怎麼使用ngx_http_upstream_module實現負載平衡功能
負載平衡介紹
什麼是負載平衡
負載平衡(Load Balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上執行。
為什麼需要負載平衡
當單一web伺服器直接面向用戶,可能要承載著大量的並發請求,單一伺服器可能難以負荷,我們需要使用多台web伺服器組成一個集群,利用Nginx負載平衡功能,將請求分發給不同的後端伺服器,實現負載的流量分發,提升整體效能、以及系統的容災能力。
負載平衡與代理有什麼區別
#代理程式是代理一台伺服器基於URI調度,調度到不同功能的應用節點
負載平衡是將客戶端請求透過proxy_pass代理到一組upstream資源池
#實作負載平衡場景
- proxy_pass:代理模組
- upstream:虛擬資源池
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
upstream node { server 192.168.10.3:80; server 192.168.10.4:80; } server { listen 80; server_name www.yyang.com; location / { proxy_pass http://node; include prxoy_params; } }
輪詢調度
依序逐一分配到不同的後端節點,也是預設演算法。 (簡單來說就是1:1:1)加權輪詢考慮到不同伺服器的效能不同,給予節點不同的權值,使其接收對應的權值請求數
server 192.168.10.3:80 weight=3; server 192.168.10.4:80 weight=1;
ip_hash
根據使用者請求的IP,對該IP進行hash運算,根據運算的值將請求指派給後端特定的一台節點進行處理。 取值範圍為ipv4位址的前三個8位元或ipv6的整個位址作為雜湊鍵,確保來自從一個客戶端的IP始終傳遞給同一台伺服器,除非次伺服器不可用。簡單點說,172.16.20.1和172.16.20.2的前三組數字是一樣的(都是172.16.20)ip_hash運算公式:hash(ip)%node_counts=index ip_hash帶來的問題:大量相同IP的請求會造成某個節點流量過大
如果暫時下線一台節點,會重新計算hash值,建議使用down狀態
ip_hash; server 192.168.10.3:80; server 192.168.10.4:80;
一致性hash
為了避免上述問題,所以誕生了一致性hash,使用取模的方式,但不對伺服器節點數量取模,而是對2的32次方取模,hash函數值為0~2^32-1。 (形成一個虛擬圓環,用戶請求會發給順時針相鄰的節點)有一個問題:如果後端節點較少可能會造成資料傾斜,所以一致性hash引入了虛擬節點機制,即對每個伺服器計算多個哈希,每個計算結果位置都放置一個虛擬節點。
如果我們想使用ip_hash,但計算公式使用一致性hash,該怎麼做?
hash $remote_addr consistent; server 192.168.10.3:80; server 192.168.10.4:80;
url_hash
根據使用者的url進行hash取模,根據運算值,將請求分配給特定的後端伺服器。 1.用戶請求nginx負載均衡,透過url演算法,請求調度至cache12.cache1沒有數據,會向後端獲取,返回數據,並將數據緩存
3.當其他使用者存取相同url時,調度器仍會調度到cache1節點
4.cache1會直接將資料傳回
hash $request_uri consistent; server 192.168.10.3:80; server 192.168.10.4:80;
least_conn
#哪台伺服器的連線數最少,就將請求調度到這台伺服器least_conn; server 192.168.10.3:80; server 192.168.10.4:80;
down##將伺服器節點標記為不可用狀態,一般用於停機維護。
server 192.168.10.3:80 down; server 192.168.10.4:80;
備用節點,正常情況不會調度到此節點;當正常工作節點全部不可用時,會啟用此節點;當節點恢復時此節點會繼續恢復備用狀態。
server 192.168.10.3:80; server 192.168.10.4:80; server 192.168.10.5:80 backup;
用來限制每個後端節點接收到的最大的TCP連線數,如果超出限制就會拋出錯誤。
server 192.168.10.3:80 max_conns=10; server 192.168.10.4:80 max_conns=10;
一台可以連接10.兩台是20,超過20就會出錯。
keepalived與後端伺服器啟動緩存,也就是長鏈接,提升網站吞吐量。
預設不啟用此功能,當有請求時,會建立連接,維護連接,關閉連接,所以會存在網路消耗;但是如果所有連接都快取了,當連接空閒了又會佔用其他系統資源,所以可以使用keepalived參數。server 192.168.10.3:80; server 192.168.10.4:80; keepalived 32; # 最大空闲连接数的个数 keepalived_timeout 100s; # 空闲连接的超时时间 # 需要配合以下两个参数使用 proxy_http_version 1.1; proxy_set_header connection "";
max_fails與fail_timeout
max_fails=2:服务器通信失败两次,认为服务器不可用
fail_timeout=5s:服务器通信失败后,每5秒探测一次服务器是否恢复正常。
在fail_timeout设定时间内,与服务器连接失败次数达到max_fails数量,则认为服务器不可用。
如果不设置的话默认是探测一次,间隔10s。server 192.168.10.3:80 max_fails=2 fail_timeout=5s;
server 192.168.10.4:80 max_fails=2 fail_timeout=5s;
以上是Nginx怎麼使用ngx_http_upstream_module實現負載平衡功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP
