首頁 運維 Nginx 在Nginx伺服器中怎麼配置針對TCP的負載平衡

在Nginx伺服器中怎麼配置針對TCP的負載平衡

May 13, 2023 pm 11:58 PM
nginx tcp

一、安裝nginx
1.下載nginx

# wget http://nginx.org/download/nginx-1.2.4.tar.gz
登入後複製

2.下載tcp模組修補程式

# wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master
登入後複製

原始碼主頁:https ://github.com/yaoweibin/nginx_tcp_proxy_module

#3.安裝nginx

# tar xvf nginx-1.2.4.tar.gz
# tar xvf yaoweibin-nginx_tcp_proxy_module-v0.4-45-ga40c99a.tar.gz
# cd nginx-1.2.4
# patch -p1 < ../yaoweibin-nginx_tcp_proxy_module-a40c99a/tcp.patch
#./configure --prefix=/usr/local/nginx --with-pcre=../pcre-8.30 --add-module=../yaoweibin-nginx_tcp_proxy_module-ae321fd/
# make
# make install
登入後複製

二、修改設定檔
修改nginx.conf設定檔修改nginx.conf設定檔

# cd /usr/local/nginx/conf
# vim nginx.conf
登入後複製
worker_processes 1;
events {
worker_connections 1024;
}

tcp {
upstream mssql {
server 10.0.1.201:1433;
server 10.0.1.202:1433;
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 1433;
server_name 10.0.1.212;
proxy_pass mssql;
}
}
登入後複製

三、啟動nginx

# cd /usr/local/nginx/sbin/
# ./nginx
登入後複製

查看1433埠:

#lsof :1433
登入後複製

#四、測試

# telnet 10.0.1.201 1433
登入後複製

五、使用sql server client工具測試

在Nginx伺服器中怎麼配置針對TCP的負載平衡

六、 tcp負載平衡的執行原理
當nginx從監聽埠收到一個新的客戶端連結時,立刻執行路由調度演算法,取得指定需要連接的服務ip,然後建立一個新的上游連接,連接到指定伺服器。

在Nginx伺服器中怎麼配置針對TCP的負載平衡

tcp負載平衡支援nginx原有的調度演算法,包括round robin(默認,輪詢調度),雜湊(選擇一致)等。同時,調度資訊資料也會和健全性偵測模組一起協作,為每個連線選擇適當的目標上游伺服器。如果使用hash負載平衡的調度方法,你可以使用$remote_addr(客戶端ip)來達成簡單持久化會話(同一個客戶端ip的連接,總是落在同一個服務server上)。

和其他upstream模組一樣,tcp的stream模組也支援自訂負載均和的轉發權重(配置「weight=2」),還有backup和down的參數,用來踢掉失效的上游伺服器. max_conns參數可以限制一台伺服器的tcp連線數量,根據伺服器的容量來設定適當的配置數值,尤其在高並發的場景下,可以達到過載保護的目的。

nginx監控客戶端連接和上游連接,一旦接收到數據,則nginx會立刻讀取並且推送到上游連接,不會做tcp連接內的數據檢測。 nginx維護一份記憶體緩衝區,用於客戶端和上游資料的寫入。如果客戶端或服務端傳輸了量很大的數據,緩衝區會適當增加記憶體的大小。

在Nginx伺服器中怎麼配置針對TCP的負載平衡

當nginx收到任何一方的關閉連線通知,或是tcp連線閒置超過了proxy_timeout配置的時間,連線將會關閉。對於tcp長連接,我們更應該選擇適當的proxy_timeout的時間,同時,專注於監聽socke的so_keepalive參數,防止過早地斷開連接。

ps:服務健壯性監控

tcp負載平衡模組支援內建健壯性偵測,一台上游伺服器如果拒絕tcp連線超過proxy_connect_timeout配置的時間,將會被認為已經失效。在這種情況下,nginx立刻嘗試連接upstream群組內的另一台正常的伺服器。連線失敗訊息將會記錄到nginx的錯誤日誌中。

如果一台伺服器,反覆失敗(超過了max_fails或fail_timeout配置的參數),nginx也會踢掉這台伺服器。伺服器被踢掉60秒後,nginx會偶爾嘗試重連它,偵測它是否恢復正常。如果伺服器恢復正常,nginx將它加回upstream群組內,緩慢加大連線請求的比例。

之所“緩慢加大”,因為通常一個服務都有“熱點數據”,也就是說,80%以上甚至更多的請求,實際上都會被阻擋在“熱點數據緩存”中,真正執行處理的請求只有很少的一部分。在機器剛啟動的時候,「熱點資料快取」實際上還沒有建立,這個時候爆發性地轉發大量請求過來,很可能導致機器無法「承受」而再次掛掉。以mysql為例子,我們的mysql查詢,通常95%以上都是落在了記憶體cache中,真正執行查詢的並不多。

其實,無論是單一機器或一個集群,在高並發請求場景下,重啟或切換,都存在這個風險,解決的途徑主要是兩種:

(1)請求逐步增加,從少到多,逐步累積熱點數據,最終達到正常服務狀態。
(2)提前準備好“常用”的數據,主動對服務做“預熱”,預熱完成之後,再開放伺服器的存取。

tcp負載平衡原理上和lvs等是一致的,工作在更為底層,效能會高於原來http負載平衡不少。但是,不會比lvs更為出色,lvs被置於核心模組,而nginx工作在用戶態,而且,nginx相對比較重。另外一點,令人感到非常可惜,這個模組竟然是個付費功能。

tcp负载均衡模块支持内置健壮性检测,一台上游服务器如果拒绝tcp连接超过proxy_connect_timeout配置的时间,将会被认为已经失效。在这种情况下,nginx立刻尝试连接upstream组内的另一台正常的服务器。连接失败信息将会记录到nginx的错误日志中。

在Nginx伺服器中怎麼配置針對TCP的負載平衡

如果一台服务器,反复失败(超过了max_fails或者fail_timeout配置的参数),nginx也会踢掉这台服务器。服务器被踢掉60秒后,nginx会偶尔尝试重连它,检测它是否恢复正常。如果服务器恢复正常,nginx将它加回到upstream组内,缓慢加大连接请求的比例。

之所“缓慢加大”,因为通常一个服务都有“热点数据”,也就是说,80%以上甚至更多的请求,实际都会被阻挡在“热点数据缓存”中,真正执行处理的请求只有很少的一部分。在机器刚刚启动的时候,“热点数据缓存”实际上还没有建立,这个时候爆发性地转发大量请求过来,很可能导致机器无法“承受”而再次挂掉。以mysql为例子,我们的mysql查询,通常95%以上都是落在了内存cache中,真正执行查询的并不多。

其实,无论是单台机器或者一个集群,在高并发请求场景下,重启或者切换,都存在这个风险,解决的途径主要是两种:

(1)请求逐步增加,从少到多,逐步积累热点数据,最终达到正常服务状态。
(2)提前准备好“常用”的数据,主动对服务做“预热”,预热完成之后,再开放服务器的访问。

tcp负载均衡原理上和lvs等是一致的,工作在更为底层,性能会高于原来http负载均衡不少。但是,不会比lvs更为出色,lvs被置于内核模块,而nginx工作在用户态,而且,nginx相对比较重。另外一点,令人感到非常可惜,这个模块竟然是个付费功能。

以上是在Nginx伺服器中怎麼配置針對TCP的負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

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

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

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

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

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

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

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

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

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

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

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

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

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

nginx服務器掛了怎麼辦 nginx服務器掛了怎麼辦 Apr 14, 2025 am 11:42 AM

當 Nginx 服務器宕機時,可執行以下故障排除步驟:檢查 nginx 進程是否正在運行。查看錯誤日誌以獲取錯誤消息。檢查 nginx 配置語法正確性。確保 nginx 具有訪問文件所需的權限。檢查文件描述符打開限制。確認 nginx 正在偵聽正確的端口。添加防火牆規則以允許nginx流量。檢查反向代理設置,包括後端服務器可用性。如需進一步幫助,請聯繫技術支持。

See all articles