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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法之排序算法-插入排序

排序算法是数据结构与算法中最基本的算法之一,其作用就是将一些可以比较大小的数据进行有规律的排序,而想要实现这种排序就拥有很多种方法~ 那么我将通过几篇文章,将排序算法中各种算法细化的,详尽的为大家呈现出来: &…

cv2小练习

基础概念 帧率是指在单位时间内,显示的图像帧数的数量。它是衡量视频或动画流畅度的一个重要指标。帧率的单位通常是每秒帧数(Frames Per Second,简称FPS)。在数字视频和计算机图形领域,帧率是决定视频播放质量和流畅度…

在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn

文章目录 1. 什么是 Corepack?2. 运行 corepack enable yarn 的作用3. 如何运行 corepack enable yarn4. 可能遇到的问题及解决方法问题 1:corepack 命令未找到问题 2:Yarn 未正确安装问题 3:权限问题 5. 验证 Yarn 是否启用成功6…

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录,点击立即体验 点击千帆大模型平台 向下滑动,进入到模型…

【Vue中BUG解决】npm error path git

报错内容如下: 从错误信息可知,这是一个 ENOENT(No Entry,即找不到文件或目录)错误,并且与 git 相关。具体来说,npm 在尝试调用 git 时,无法找到 git 可执行文件,下面为…

(一)Axure制作移动端登录页面

你知道如何利用Axure制作移动端登录页面吗?Axure除了可以制作Web端页面,移动端也是可以的哦,下面我们就一起来看一下Axure制作移动端登录页面的过程吧。 第一步:从元件中拖入一个矩形框,并设置其尺寸为:37…

自动化遇到的问题记录(遇到问题就更)

总结回归下自己这边遇到的一些问题 “EOF错误”,获取不到csv里面的内容 跑多csv文件里的场景,部分场景的请求值为 1、检查csv文件里不能直接是[]开头的参数,把[]改到ms平台的请求参数里 2、有时可能是某个参数值缺了双引号的其中一边 met…

LabVIEW软件需求开发文档参考

在项目开发的工作历程中,精准把握项目需求无疑是成功打造整个项目的首要关键步骤,同时也是一个至关重要且不可忽视的核心环节。明确且详尽的项目需求就如同建筑的基石,为后续的设计、开发、测试等一系列工作提供了坚实的支撑和清晰的指引。倘…

【JVM详解五】JVM性能调优

示例: 配置JVM参数运行 #前台运行 java -XX:MetaspaceSize-128m -XX:MaxMetaspaceSize-128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio8 - XX:UseConcMarkSweepGC -jar /jar包路径 #后台运行 nohup java -XX:MetaspaceSize-128m -XX:MaxMetaspaceS…

android studio下载安装汉化-Flutter安装

1、下载android studio官方地址:(这个网址可能直接打不开,需要VPN) https://developer.android.com/studio?hlzh-cn mac版本分为X86和arm版本,电脑显示芯片是Inter的就是x86的,显示m1和m2的就是arm的 …

(2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)

(2025)通过Ollama光速部署本地DeepSeek-R1模型(支持Windows10/11)_deepseek猫娘咒语-CSDN博客文章浏览阅读1k次,点赞19次,收藏9次。通过Ollama光速部署本地DeepSeek-R1(支持Windows10/11)_deepseek猫娘咒语https://blog.csdn.net/m0_70478643/article/de…

【深度学习入门实战】基于Keras的手写数字识别实战(附完整可视化分析)

​ 本人主页:机器学习司猫白 ok,话不多说,我们进入正题吧 项目概述 本案例使用经典的MNIST手写数字数据集,通过Keras构建全连接神经网络,实现0-9数字的分类识别。文章将包含: 关键概念图解完整实现代码训练过程可视化模型效果深度分析环境准备 import numpy as np impo…

kafka生产端之架构及工作原理

文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前,有可能需要经历拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)等一系列的作用,那么在此之后又会…

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考:docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件,内容填写Asia/Shanghai 手动创建目录&#xff1a…

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明: Cesium已经支持3dtiles的模型格式转换; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles; 也可以下载插件(例如revit-cesium插件)转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…

html文件怎么转换成pdf文件,2025最新教程

将HTML文件转换成PDF文件,可以采取以下几种方法: 一、使用浏览器内置功能 打开HTML文件:在Chrome、Firefox、IE等浏览器中打开需要转换的HTML文件。打印对话框:按下CtrlP(Windows)或CommandP(M…

Linux(socket网络编程)TCP连接

Linux(socket网络编程)TCP连接 基础文件目录函数系统进程控制函数fork()exec系列函数void abort(void)void assert(int expression)void exit(int status)void _exit(int status)int atexit(void (*func)(void))int on_exit(void (*function)(int,void*)…

GeekPad智慧屏编程控制(二)

前面已经实现了智慧屏开关的控制了,接下来再继续实现消息的订阅。 先如下图所示增加几个控件,一个按钮,2个文本框,其中右下角的文本框显示的内容会比较多,需要打开多行和右侧滚动条。 然后添加订阅消息的事件&#xf…

Postgresql 开发环境搭建指南(WindowsLinux)

一、Postgresql 简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 RDBMS 是关系数据库管理系统,是建立实体之间的联系,最后得到的是关系表。 ORDBMS在原来关系数据库的基础上,增加了一些新…

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下,我们的生活正被各类智能设备悄然改变,它们如同一位位无声的助手,渗透到我们生活的每一个角落,让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用,为我们的生活…