在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工具測試
六、 tcp負載平衡的執行原理
當nginx從監聽埠收到一個新的客戶端連結時,立刻執行路由調度演算法,取得指定需要連接的服務ip,然後建立一個新的上游連接,連接到指定伺服器。
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連線閒置超過了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的错误日志中。
如果一台服务器,反复失败(超过了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中文網其他相關文章!

熱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)

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

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

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

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

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

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

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

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