当前位置: 首页 > news >正文

haproxy+nginx负载均衡实验

准备三台虚拟机: 

HAProxy 服务器192.168.65.131
Web 服务器 1192.168.65.132
Web 服务器 2192.168.65.133
  1. 在 HAProxy 服务器(192.168.65.131)上操作
  • 安装 HAProxy:
sudo yum install -y haproxy
  • 编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local0 info
    maxconn 4096

defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s

frontend http-in
    bind *:80
    acl web1 path_beg -i /server1
    acl web2 path_beg -i /server2
    use_backend webserver1 if web1
    use_backend webserver2 if web2

backend webserver1
    server web1 192.168.65.132:80 check

backend webserver2
    server web2 192.168.65.133:80 check

以下是对这个 HAProxy 配置文件的详细讲解:

global 部分

  • log 127.0.0.1 local0 info
    • 这行配置指定了 HAProxy 的日志记录方式。它表示将日志发送到本地 IP 地址为 127.0.0.1 的机器上,使用local0这个系统日志设施,并且只记录info级别及以上的日志信息。这样可以方便地在本地查看和管理 HAProxy 的运行日志,用于故障排查、性能分析等。
  • maxconn 4096
    • 设置了 HAProxy 实例能够处理的最大并发连接数为 4096。这意味着同时最多可以有 4096 个客户端连接到 HAProxy,如果超过这个数量,新的连接请求可能会被拒绝或等待,具体取决于系统的配置和 HAProxy 的处理策略,以此来限制系统资源的占用,防止因过多连接导致系统崩溃或性能下降。

defaults 部分

  • mode http
    • 定义了 HAProxy 的默认工作模式为 HTTP 模式,表明它将主要处理 HTTP 协议的流量。在这种模式下,HAProxy 可以深入理解 HTTP 协议的请求和响应,进行更精细的流量控制和处理,如根据 URL、HTTP 头部等信息进行转发和负载均衡决策。
  • timeout connect 5s
    • 设置了 HAProxy 与后端服务器建立连接的超时时间为 5 秒。如果在 5 秒内无法与后端服务器成功建立连接,HAProxy 会认为连接失败,并根据配置采取相应的措施,如尝试连接其他后端服务器或向客户端返回错误信息,以避免长时间等待导致客户端连接超时。
  • timeout client 30s
    • 规定了客户端连接到 HAProxy 后,如果在 30 秒内没有任何数据交互,即客户端处于空闲状态的时间超过 30 秒,HAProxy 将自动断开与该客户端的连接,释放系统资源,防止空闲连接占用过多资源。
  • timeout server 30s
    • 表示后端服务器连接空闲的超时时间为 30 秒。如果后端服务器在 30 秒内没有向 HAProxy 发送任何数据,HAProxy 会认为该后端服务器连接处于空闲状态,并可能会断开与该服务器的连接,以提高系统资源的利用率和整体性能。

frontend 部分

  • bind *:80
    • 这行配置指定了 HAProxy 在前端监听的 IP 地址和端口。*表示监听所有可用的 IP 地址,:80表示监听 80 端口,这意味着 HAProxy 将在服务器的所有网络接口上监听来自客户端的 80 端口的 HTTP 请求,是接收外部 HTTP 流量的入口。
  • acl web1 path_beg -i /server1
    • 定义了一个名为web1的访问控制列表(ACL)。path_beg表示根据请求的 URL 路径的开头部分进行匹配,-i表示不区分大小写。这里的配置表示如果客户端请求的 URL 路径以/server1开头,那么就满足web1这个 ACL 条件,后续可以根据这个条件进行流量转发等操作。
  • acl web2 path_beg -i /server2
    • web1类似,定义了一个名为web2的访问控制列表,用于匹配请求 URL 路径以/server2开头的情况。
  • use_backend webserver1 if web1
    • 表示如果满足web1这个 ACL 条件,即客户端请求的 URL 路径以/server1开头,那么就将该请求转发到名为webserver1的后端服务器组中,实现根据不同的 URL 路径将流量分发到不同的后端服务器组的功能。
  • use_backend webserver2 if web2
    • 同理,如果满足web2这个 ACL 条件,即客户端请求的 URL 路径以/server2开头,就将请求转发到webserver2后端服务器组。

backend 部分

  • backend webserver1
    • 定义了一个名为webserver1的后端服务器组,用于接收从前端转发过来的满足特定条件的请求。
  • server web1 192.168.65.132:80 check
    • webserver1后端服务器组中添加了一台名为web1的后端服务器,其 IP 地址为192.168.65.132,端口为80check表示启用对这台后端服务器的健康检查机制,HAProxy 会定期向该服务器发送健康检查请求,根据服务器的响应情况来判断其是否健康,如果服务器不健康,HAProxy 会自动停止向其转发流量,直到服务器恢复健康。
  • backend webserver2
    • 定义了另一个名为webserver2的后端服务器组。
  • server web2 192.168.65.133:80 check
    • webserver2后端服务器组中添加了一台名为web2的后端服务器,其 IP 地址为192.168.65.133,端口为80,同样启用了健康检查机制,用于接收前端转发的满足特定条件的请求并进行处理。

总体而言,这个配置文件实现了一个简单的基于 HTTP 路径的负载均衡功能,将不同路径的 HTTP 请求转发到不同的后端服务器上,并对后端服务器进行健康检查和连接超时控制等,以提高系统的可靠性和性能。

  • 重启 HAProxy 服务:
sudo service haproxy restart
  1. 在 Web 服务器 1(192.168.65.132)上操作
    • 安装 Nginx:
sudo yum install -y nginx

在/etc/nginx/conf.d/server1.conf中写入如下内容:

af45892b7ef54eaab9797fa388ffb5df.png

  • 在/server1/下创建index.html文件,内容为"server1"
  1. 在 Web 服务器 2(192.168.65.133)上操作
    • 安装 Nginx:
sudo yum install -y nginx

在/etc/nginx/conf.d/server2.conf中写入如下内容: 

2a20b731f87145f88bc7bb1d31b4792a.png

  • 在/server2/下创建index.html文件,内容为"server2"

完成上述配置后,在浏览器中访问 http://192.168.65.131/server1,应看到 “ Server 1” 页面;

0308c4c1ef964d9fafa67a38f0b6fedc.png

访问 http://192.168.65.131/server2,应看到 “Server 2” 页面,

87b1e00108ec4ce9b5a29524be4195cc.png

多次刷新可观察到请求被分发到不同后端服务器,实现简单负载均衡效果

相关文章:

  • Pytorch深度学习教程_1_Python基础快速掌握
  • Vue3 从入门到精通:全面掌握前端框架的进阶之路
  • Generated Chip Designs Work in Mysterious Ways 生成式芯片设计的工作方式充满神秘色彩
  • 小米CyberGear电机 STM32软件修改CAN_ID
  • 一、OpenSM 架构部署及原理详解
  • 『大模型笔记』Ollama环境变量大全!
  • 青少年编程与数学 02-009 Django 5 Web 编程 13课题、URL分发
  • HAL库框架学习总结
  • 数据结构与算法-队列
  • 探索未来科技:AIP智能体平台引领人工智能新纪元
  • 企业级高可用 Kubernetes 实践:基于青云 LB 搭建容灾与负载均衡集群全攻略
  • Linux性能分析工具Trace使用
  • nuxt中引入element-ui组件控制台报错问题
  • 对openharmony HDF驱动框架的C/S设计模式和单例类的说明
  • 【设计模式】-工厂模式(简单工厂、工厂方法、抽象工厂)
  • flask和django的对比
  • ECCV2022 | LGV | LGV:利用大几何邻域提升对抗样本的可迁移性
  • Vue2组件通信
  • 工作流改造:从一到千
  • 网络安全用centos干嘛 网络安全需要学linux吗
  • 西浦国际教育创新论坛举行,聚焦AI时代教育本质的前沿探讨
  • 魔都眼|邮轮港国际帆船赛启动,120名中外选手展开角逐
  • 国内规模最大女子赛艇官方赛事在沪启航,中外41支队伍逐浪
  • 欠债七十万后,一个乡镇驿站站长的中年心事
  • 沧州低空经济起飞:飞行汽车开启千亿赛道,通用机场布局文旅体验
  • 商人运作亿元“茅台酒庞氏骗局”,俩客户自认受害人不服“从犯”判决提申诉