在 Windows 使用 Nginx/HAProxy 實現負載均衡

在本實驗中,我們將在 Windows 系統 上使用 Python 編寫一個 TCP 服務器,并啟動兩個服務實例。然后使用 NginxHAProxy 作為負載均衡器,將來自多個客戶端的請求分發到這兩個服務實例上,驗證負載均衡效果。

🧩 環境準備

  • 操作系統:Windows 10 / Windows 11
  • Python 3.x(建議使用 Python 3.10+)
  • Nginx for Windows 或 HAProxy for Windows
  • 10 個客戶端(使用 Python 編寫)

一、Python TCP 服務器代碼

📁 server.py

import socketdef start_server(port):server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(('0.0.0.0', port))server_socket.listen(5)print(f"Server started on port {port}")while True:client_socket, addr = server_socket.accept()print(f"Connection from {addr}")data = client_socket.recv(1024)print(f"Received: {data.decode()}")response = f"Response from server on port {port}\n"client_socket.sendall(response.encode())client_socket.close()if __name__ == "__main__":import sysif len(sys.argv) != 2:print("Usage: python server.py <port>")sys.exit(1)port = int(sys.argv[1])start_server(port)

🔧 啟動兩個服務實例

打開兩個命令行窗口,分別運行:

# 第一個服務實例
python server.py 8000# 第二個服務實例
python server.py 8001

二、使用 Nginx 做 TCP 負載均衡(Windows 版本)

Nginx Windows 版本默認 不包含 stream 模塊,所以需要使用 第三方模塊 或使用 WSL(推薦使用 WSL)。不過我們這里使用 Nginx for Windows 的 stream 模塊支持版本。

1. 下載并安裝 Nginx for Windows(含 stream 模塊)

推薦使用 Nginx + stream module for Windows 或使用 XAMPP 中的 Nginx。

下載后解壓到目錄,例如:C:\nginx

2. 配置 Nginx TCP 負載均衡

編輯 C:\nginx\conf\nginx.conf,在文件末尾添加:

stream {upstream tcp_backend {least_conn;server 127.0.0.1:8000;server 127.0.0.1:8001;}server {listen 9000;proxy_pass tcp_backend;}
}

3. 啟動 Nginx

在命令行中進入 Nginx 目錄并啟動:

cd C:\nginx
start nginx

檢查是否啟動成功:

nginx -t

如果配置正確,不會報錯。


三、使用 HAProxy 做 TCP 負載均衡(Windows 版本)

1. 下載并安裝 HAProxy for Windows

前往 HAProxy 官方下載頁面 或使用 HAProxy for Windows。

解壓后放到 C:\haproxy

2. 配置 HAProxy

創建配置文件 C:\haproxy\haproxy.cfg

globallog 127.0.0.1 local0log 127.0.0.1 local1 noticechroot C:/haproxystats socket ipv4@127.0.0.1:9999 level adminstats timeout 30suser haproxygroup haproxydaemondefaultslog     globalmode    tcpoption  tcplogtimeout connect 5000mstimeout client  60000mstimeout server  60000msfrontend tcp_frontbind *:9000default_backend tcp_backbackend tcp_backbalance leastconnserver server1 127.0.0.1:8000 checkserver server2 127.0.0.1:8001 check

3. 啟動 HAProxy

打開命令行,進入 HAProxy 目錄并運行:

cd C:\haproxy
haproxy.exe -f haproxy.cfg

四、編寫客戶端測試負載均衡效果(Windows)

📁 client.py

import socket
import sys
import threadingdef send_request(client_id):client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(('127.0.0.1', 9000))message = f"Hello from client {client_id}"client_socket.sendall(message.encode())response = client_socket.recv(1024).decode()print(f"Client {client_id} received: {response}")client_socket.close()if __name__ == "__main__":threads = []for i in range(1, 11):  # 啟動10個客戶端t = threading.Thread(target=send_request, args=(i,))threads.append(t)t.start()for t in threads:t.join()

🚀 運行客戶端測試

python client.py

五、查看服務器日志確認負載均衡效果

運行兩個服務端(8000 和 8001),觀察它們的輸出日志,確認請求是否被交替分配。

示例輸出(server.py):

Connection from ('127.0.0.1', 54321)
Received: Hello from client 1
Connection from ('127.0.0.1', 54322)
Received: Hello from client 2

如果兩個服務端交替收到請求,說明負載均衡生效。


六、常見問題與注意事項(Windows)

問題解決方法
bind: permission denied使用管理員權限運行 CMD
socket.error: [WinError 10048]確保端口未被占用
Nginx 啟動失敗檢查 nginx.conf 是否語法正確,關閉占用 80/9000 端口的程序
HAProxy 啟動失敗檢查配置文件路徑、端口是否被占用
Windows 防火墻攔截添加 Nginx/HAProxy 為允許通過防火墻的程序

七、總結

工具協議支持負載均衡算法Windows 支持優點
NginxTCP(需 stream 模塊)least_conn, round-robin有限(推薦使用 WSL)易于配置,適合 HTTP/TCP 混合場景
HAProxyTCPleast_conn, round-robin, uri 等支持(需下載 Windows 版本)專業 TCP 負載均衡器,功能豐富

有興趣的還可以繼續實現 HTTPS、限流、健康檢查等功能!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90401.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【物聯網】基于樹莓派的物聯網開發【17】——物聯網通信協議MQTT基礎知識

使用背景 MQTT最初是為了解決物聯網&#xff08;IoT&#xff09;領域設備之間的低帶寬、高延遲、不穩定網絡連接等問題而設計的。 場景介紹 廣泛應用物聯網領域&#xff0c;數據實時傳輸&#xff0c;連接各種智能設備和應用的關鍵橋梁 MQTT簡介和概述 MQTT&#xff08;Message …

【qml-3】qml與c++交互第二次嘗試(類型方式)

背景&#xff1a; 【qml-1】qml與c交互第一次嘗試&#xff08;實例方式&#xff09; 【qml-2】嘗試一個有模式的qml彈窗-CSDN博客 【qml-3】qml與c交互第二次嘗試&#xff08;類型方式&#xff09; 還是qml學習筆記。 這次擱置太久了。其實不太會&#xff0c;還是以教程為主…

輸電線路觀冰精靈在線監測裝置:科技賦能電網安全的新利器

一、技術架構與工作原理輸電線路觀冰精靈在線監測裝置&#xff08;簡稱“觀冰精靈”&#xff09;是一款集成多源感知、智能分析、遠程通信于一體的專業化覆冰監測設備。其核心功能通過以下技術路徑實現&#xff1a;1. 數據采集模塊視覺識別系統&#xff1a;搭載工業級夜視攝像機…

Ubuntu22 上,用C++ gSoap 創建一個簡單的webservice

創建calc.h// calc.h // gSOAP 服務定義 int ns__add(double a, double b, double &result); int ns__subtract(double a, double b, double &result);創建my_server.cpp#include "soapService.h" #include "ns.nsmap" class MyService : public S…

Java(LinkedList和ArrayList底層分析)

LinkedList全面說明:LinkedList底層操作機制:LinkedList的方法:add():增加節點對象remove():刪除一個節點對象(默認刪除第一個節點對象)set():修改一個節點對象get():得到一個節點對象LinkedList的遍歷:增強for循環迭代器普通for循化LinkedList的源碼解讀:增加源碼:1. LinkedLi…

開源項目XBuilder的user邏輯

stores \ userquery-keys.ts 統一管理Vue Query&#xff08;TanStack Query的Vue適配版本&#xff09;緩存鍵&#xff0c;在下面的文件中復用index.ts 入口文件&#xff0c;統一用戶信息查詢signed-in.ts 登錄狀態管理、認證邏輯在用戶登錄后&#xff0c;系統頒發一個令牌&…

第十五章 SEO的簡單免費工具

SEO的基礎工具和檢測 前文中主要是講一些SEO的網站基本功&#xff0c;而在這一章那&#xff0c;會講到一些非常基本的工具&#xff0c;主要是關于&#xff1a;網站的流量、停留時長、關鍵詞密度、內容、以及Google的站長工具。 Google Search Console Google Search Console這是…

SSL 證書與 HTTPS 的關系:一文理清核心關聯

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;和 SSL 證書&#xff08;Secure Sockets Layer Certificate&#xff09;是網絡安全的兩大基石&#xff0c;它們共同保障了互聯網通信的安全性和可信度。以下從定義、功能、關系及實際應用層面進行解析&#xf…

使用Jmeter參數化實現接口自動化測試

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 本文記錄如何使用Jmeter參數化&#xff08;csv)實現接口自動化——測試Token不同入參情況下&#xff0c;接口請求能夠返回正確的結果1. 首先需要使用Jmeter獲取一個…

X-plore File Manager v4.34.02 修改版:安卓設備上的全能文件管理器

在使用安卓設備時&#xff0c;文件管理是日常操作中不可或缺的一部分。X-plore File Manager 作為一款功能強大的文件管理器&#xff0c;憑借其豐富的功能和便捷的操作&#xff0c;成為安卓用戶管理文件的首選工具之一。最新版 v4.34.02 修改版更是解鎖了更多高級功能&#xff…

React+threejs兩種3D多場景渲染方案

在現代 Web 開發中&#xff0c;3D 可視化需求日益增長&#xff0c;特別是在 React 生態系統中實現多 3D 場景的展示與交互。本文通過對比兩種實現方案&#xff0c;探討 React 中構建多 3D 場景的最佳實踐&#xff0c;分析它們的技術特點、性能表現和適用場景。方案一&#xff1…

React性能優化終極指南:memo、useCallback、useMemo全解析

掌握 React.memo、useCallback、useMemo 的正確使用姿勢&#xff0c;讓你的 React 應用性能飛起來&#xff01; &#x1f3af; React.memo 作用 React.memo 是一個高階組件&#xff0c;用于函數組件&#xff0c;通過淺比較 props 的變化來決定是否重新渲染。如果 props 沒有變…

借助 VR 消防技術開展應急演練,檢驗完善應急預案?

應急演練是企業應對火災事故的重要手段&#xff0c;而 VR 消防技術的應用&#xff0c;為應急演練帶來了全新的體驗和更高的效率。VR 消防技術通過虛擬現實技術模擬逼真的火災場景&#xff0c;讓參與者能夠身臨其境地感受火災發生時的緊張氛圍。某知名物流企業&#xff0c;倉庫眾…

【電賽學習筆記】MaxiCAM 項目實踐——二維云臺追蹤指定目標

前言 本文是對視覺模塊MaixCam實現二維云臺人臉跟蹤_嗶哩嗶哩_bilibili大佬的項目實踐整理與拓展&#xff0c;侵權即刪。 單路舵機基本控制 #導入必要模塊 from maix import pwm, time , pinmap#定義全局變量&#xff0c;設初值 SERVO_FREQ 50 #主頻 SERVO_MIN_DUT…

深入解析 ArkUI 觸摸事件機制:從點擊到滑動的開發全流程

摘要 隨著 HarmonyOS NEXT 的不斷發展&#xff0c;ArkUI 逐漸成為主流的 UI 構建方式。而用戶交互在任何應用中都是基礎而又關鍵的一環&#xff0c;如何利用 ArkUI 提供的觸摸事件機制&#xff0c;如 onTouch、onClick、onSwipe 等&#xff0c;來實現自然、順滑、用戶友好的交互…

Tailwind CSS 自定義工具類與主題配置指南

一、自定義工具類配置在 src/tailwind.css 文件中&#xff0c;我們可以通過 layer utilities 指令添加自定義工具類&#xff1a;tailwind base; tailwind components; tailwind utilities;layer utilities {/* 自定義工具 上下浮動效果 */.animate-floatY {animation: floatY 3…

【代碼隨想錄二刷|704.二分查找、27.移除元素、977.有序數組的平方】

704.二分查找 題目鏈接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int search(vector<int>& nums, int target) {//不用二分查找&#xff0c;直接求// for(int i0;i<nums.size();i){// if(nums[i]target)…

基于Vue的工業設備大屏可視化模板(含設備地圖分布+宣傳模塊+報表展示+三維模型加載預覽)

場景 為實現工業設備可視化大屏需求&#xff0c;可實現基于地圖的設備數據管理&#xff0c;點擊具體設備可進行詳細介紹和三維模型展示。 可播放宣傳視頻&#xff0c;可展示PM數據報表等數據&#xff0c;可接受報警數據提醒、統計等數據。 基于現有開源平臺框架進行二次改造…

堆(Heap)優先級隊列(Priority Queue)

一、堆的概念堆&#xff08;Heap&#xff09;是一種特殊的基于樹的數據結構&#xff0c;通常分為最大堆和最小堆兩種類型。它滿足堆屬性&#xff1a;對于最大堆&#xff0c;父節點的值總是大于或等于其子節點的值&#xff1b;而對于最小堆&#xff0c;父節點的值總是小于或等于…

踩坑記錄:因版本不匹配導致 Boost 1.85 編譯失敗的完整解決過程

踩坑記錄&#xff1a;因版本不匹配導致 Boost 1.85 編譯失敗的完整解決過程 轉載請注明出處&#xff0c;歡迎評論區交流。 背景 最近在 Windows 11 VS2022 環境下嘗試用 b2 編譯 Boost 1.85.0&#xff0c;結果一路踩坑&#xff0c;最后發現罪魁禍首是 Boost.Build 自帶的 msv…