在 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…