haproxy+nginx负载均衡实验

news2025/3/1 23:17:12

准备三台虚拟机: 

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 

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[论文阅读] (34)ESWA2024 基于SGDC的轻量级入侵检测系统

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

华三交换机怎么进行链路聚合?

目录 准备:两台交换机 配置:进行交换机配置 完成:检查链路聚合是否成功 准备:两台交换机 1、进行连线 2、上行Core交换机都选取 Ten-GigabitEthernet1/0/51、Ten-GigabitEthernet1/0/52和 Ten-GigabitEthernet2/0/51、Ten-Giga…

【无线传感网】无线传感器网络覆盖技术

文章目录 覆盖算法设计思路及性能评价标准覆盖感知模型布尔感知模型概率感知模型 无线传感网络覆盖算法分类按照配置方式确定性覆盖随机性覆盖 根据覆盖目标面覆盖点覆盖栅栏覆盖 典型的WSN覆盖算法与协议基于网格的覆盖定位传感器配置算法圆周覆盖连通传感器覆盖轮换活跃/休眠…

积分图(Integral Image)与均值滤波的快速实现

积分图(Integral Image)也称为求和图(Summed Area Table),是一种用于快速计算图像中任意矩形区域像素值总和的技术。 基本概念 积分图的每个位置(i, j)存储的是从图像左上角(1, 1)到当前位置(i, j)所有像素值的累积和…

MySQL数据库笔记——多版本并发控制MVCC

大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍MySQL的并发控制:多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…

css3实现文字下滑波浪线

上效果 上菜 text-decoration 属性作用:用于设置或检索文本的装饰线,如下划线、上划线、删除线等 text-decoration: line || color || style; 参数: line: 指定装饰线类型,如 underline(下划线)、overline&…

Springboot 3项目整合Knife4j接口文档(接口分组详细教程)

文章目录 前言一、Spring Boot 3.0整合Knife4j二、OpenApi 3注解的使用规范三、使用步骤 1.Spring Boot 3.0项目中使用knife4j2.在application.yml中添加knife4j相关配置3.设置WebMvc相关配置(解决封装统一异常处理后doc.html无法打开的问题)4.创建Knif…

2024年中国新能源汽车用车发展怎么样 PaperGPT(一)

概述 在国家政策的强力扶持下,2024年中国新能源汽车市场迎来了新的发展机遇。本文将基于《中国新能源汽车用车报告(2024年)》的数据,对新能源汽车的市场发展和用车趋势概述。 新能源汽车市场发展 政策推动:国家和地…

华三交换机如何进行堆叠?

准备:两台交换机堆叠 1、进行连线 2、交换机都选取 FortyGigE1/0/53 和 FortyGigE1/0/54 做 堆叠口 配置:进行交换机配置 X_T1_Core_1: [X_T1_Core_1]irf domain 0 //同一拓扑内如果有其它堆叠组,domain不能重复 [X_T1_Core_1]…

活动预告 | Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

Sonic:开源Go语言开发的高性能博客平台

Sonic:一个用Go语言开发的高性能博客平台 简介 Sonic,一个以其速度如声速般快速而命名的博客平台,是一个用Go语言开发的高性能博客系统。正如其名字所暗示的,Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…

大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上)

大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上) 前言本篇摘要8. Additional Features:补充特性8.1 队列8.1.1 使用方法8.1.2 配置队列演示 8.2 输入输出流8.2.1 输出流1. 生成器yield2. 流媒体 8.2…

音视频入门基础:MPEG2-PS专题(4)——FFmpeg源码中,判断某文件是否为PS文件的实现

一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.ps 可以判断出某个文件是否为PS文件: 所以FFmpeg是怎样判断出某个文件是否为PS文件呢?它内部其实是通过mpegps_probe函数来判断的。从《FFmpeg源码:av_probe_input_format3函数和AVI…

【Leetcode】3280. 将日期转换为二进制表示

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。 date 可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示&a…

Spring实现输出带动态标签的日志

版权说明: 本文由博主keep丶原创,转载请保留此块内容在文首。 原文地址: https://blog.csdn.net/qq_38688267/article/details/144851857 文章目录 背景底层原理实现方案Tag缓存实现封装注解通过AOP实现日志缓存封装行为参数通用方法实现手动…

JAVA: 状态模式(State Pattern)的技术指南

1、简述 状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变其行为。它将状态相关的行为抽取到独立的状态类中,使得增加新状态变得简单,且不影响其他状态。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 本文将详细介绍状态模式的概念…

小程序基础 —— 02 微信小程序账号注册

微信小程序账号注册 小程序开发与网页开发不一样,在开始微信小程序开发之前,需要访问微信公众平台,注册一个微信小程序账号。 有了小程序的账号以后,才可以开发和管理小程序,后续需要通过该账号进行开发信息的设置、…

安卓入门十一 常用网络协议四

MQTT(Message Queuing Telemetry Transport) MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下,实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式:MQTT 使用发布/订…

在 Swift 中使用 SQL 组合人员和地址数据

文章目录 摘要描述问题描述示例输入与输出 Swift 代码解决方案代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在本篇文章中,我们将讨论如何结合两个表——Person 和 Address,以便生成包含每个人的姓名和地址信息的结果表。如果某人的地址信息不…

AAL省电效果对比

AAL省电的原理主要是‌通过根据显示内容来降低背光,然后通过调节gamma来补偿显示亮度,从而达到省电的效果‌。具体来说,gamma值越高,灰度越低,图像越暗。因此,颜色越暗的图片越省电,这也是为什么…