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

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录

一.快速安装lua和haproxy

二.配置haproxy的配置文件

三.配置haproxy的全局日志

四.测试负载均衡、监控和日志效果

五.server常用可选项

1.check

2.weight

3.backup

4.disabled

5.redirect prefix和redir

6.maxconn

六.调度算法

1.静态

2.动态


 

一.快速安装lua和haproxy

链接:https://pan.baidu.com/s/1JDMP9Wag5WkjCHLVLOh0-w 
提取码:4ahw

[root@main haproxy]# yum install -y readline-devel gcc gcc-c++ make openssl-devel pcre-devel systemd-devel
[root@main haproxy]# tar -zvxf lua-5.4.4.tar.gz -C /usr/local/src/
[root@main haproxy]# cd /usr/local/src/lua-5.4.4/
[root@main lua-5.4.4]# make linux test
[root@main lua-5.4.4]# src/lua -v
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
#lua至此安装完成
​
[root@main haproxy]# tar -zxvf haproxy-2.8.1.tar.gz -C /usr/local/src/
[root@main haproxy-2.8.1]# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/
#这里的lua版本要自己修改为实际版本
[root@main haproxy-2.8.1]# make install PREFIX=/apps/haproxy  
[root@main haproxy-2.8.1]# ln -s /apps/haproxy/sbin/haproxy /usr/sbin/   #创建软链接方便启动
[root@main haproxy-2.8.1]# vim /usr/lib/systemd/system/haproxy.service
[root@main haproxy-2.8.1]# which haproxy
/usr/sbin/haproxy       #这个文件用于卸载service脚本中
[root@main examples]# cat /usr/lib/systemd/system/haproxy.service 
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p  /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
​
[root@main haproxy-2.8.1]# mkdir /etc/haproxy/   #创建用于存放配置文件的目录
[root@main examples]# cp quick-test.cfg /etc/haproxy/haproxy.cfg    #将快去启动脚本复制过来并改名启动
[root@main examples]# vim /etc/haproxy/haproxy.cfg 
[root@main examples]# mkdir /var/lib/haproxy   #创建用于存放pid的目录
[root@main examples]# systemctl daemon-reload 
[root@main examples]# systemctl start haproxy.service 
[root@main examples]# systemctl status haproxy.service 
● haproxy.service - HAProxy Load BalancerLoaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)Active: active (running) since Mon 2024-03-25 17:48:01 CST; 1s agoMain PID: 9209 (haproxy)CGroup: /system.slice/haproxy.service├─9209 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -...└─9211 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -...
​
Mar 25 17:48:01 main systemd[1]: Started HAProxy Load Balancer.
Mar 25 17:48:01 main haproxy[9209]: [NOTICE]   (9209) : New worker (...d
Mar 25 17:48:01 main haproxy[9209]: [NOTICE]   (9209) : Loading success.
Hint: Some lines were ellipsized, use -l to show in full.
#启动正常,服务还没配置,暂时无法使用

二.配置haproxy的配置文件

基本常用参数如下,其余的可自行查阅。在本份代码中是采用frontend+backend配置使用,是可以将其改为listen模式的,就是将bind等和server等放在listen下一级的同一级缩进上。

[root@main haproxy]# cat haproxy.cfg 
global     #全局模块strict-limitsstats socket /var/lib/haproxy/haproxy.sock mode 600 level admin   #指定socket文件#user   xxx   #指定用户和组#group  xxxchroot /apps/haproxy   #锁定运行目录log 127.0.0.1 local3 info   #开启log的local3,后面需要去syslog开启该等级的全局配置daemon  #以守护进程运行(后台)
defaults    #默认配置模块。这个模块的配置会被后文的部分模块继承mode http   #默认工作模式,目前常用http和tcp,一般情况下认为tcp的性能更好,更利于减少负载balance random   retries 5  #最大尝试重连数 timeout client 60s   #与客户端最长非活动连接时间timeout server 60s   #客户端请求到server的超时时常,超时后报错502timeout connect 1s   #客户端从haproxy请求到后端server的最长连接等待时间timeout check 5s   #对后端服务器的默认检测超时时间option httplog  #日志使用http格式,使用tcp-mode时,又指定tcplogoption http-server-close   #开启后,HAProxy 会在每次请求后关闭与后端服务器的连接。这样可以确保每个请求都使用新的连接,而不会重用现有连接。适用于某些需要短暂连接生命周期的场景option forwardfor#启用后,HAProxy 会在转发请求时添加一个 "X-Forwarded-For" 头部,其中包含了原始客户端的 IP 地址。记录客户端真实 IP 地址很有用。option redispatch#启用后,如果连接到后端服务器的尝试失败,HAProxy 将会重试另一个服务器。这个选项可以确保请求被重新分发,即使一些后端服务器出现故障option abortonclose#服务器负载高时自动结束处理时间很长的连接,择时再开启option http-keep-alive#与客户端的会话保持#option httpclose   每次请求后关闭与客户端的连接,非持久连接#option httpchk   http健康检查,定期检查后端服务器健康状态#option prefer-last-server    优先将请求发往上次处理过该请求的服务器  #option http-use-proxy-header   使用proxy头部信息来识别客户端IP地址stats uri /status #开启监控stats auth sulibao:317418  #这是监控的用户认证,目的是适当保护监控面板和设备信息的安全,冒号前是名称后面是密码stats refresh 3s  #监控页面刷新时间,实时获取设备状态frontend  main   #前端模块bind *:80   #监听本机所有ip地址下的80端口,监听443-https协议时还需要执行公私钥文件#例如这样,bind :443 ssl crt /etc/haproxy/xxxlog global    #全局日志开启default_backend web    #指定默认后端组
​
backend web    #后端模块,名称和上文指定一致balance roundrobin   #指定负载均衡调度算法为轮询,即rr,这样在后端再写一次就不会继承到defaults模块中刚才配置的random算法,后文会简单介绍几个调度算法#option   这里的option和check在后面介绍server web1 192.168.2.131:80 check   #后端server,check表示定期检查,此处详细见后面server选项server web2 192.168.2.132:80 check

三.配置haproxy的全局日志

[root@main haproxy]# vim /etc/rsyslog.conf

在文件中找到此处按这样修改,也可以将local3写到后面和local7写在一起

0016428b0b7b46ff9cb47502d0d469ef.png

[root@main haproxy]# systemctl restart rsyslog.service

四.测试负载均衡、监控和日志效果

按上面的配置文件来配置,并且web1和web2已经配置好index.html内容,效果将是如下

[root@serverc ~]# for ((i=1;i<=10;i++));do curl 192.168.2.130;donefirst
second
first
second
first
second
first
second
first
second

我的haproxy均衡器节点是192.168.2.130,以如下方式去查看监控页面http://192.168.2.130/status,由于设置了用户认证,所以需要先登录才能查看,监控页面的刷新间隔可以自己在配置文件中调整 38c3ad789bec458da78467103e2f8a49.png

205b825a9a46435b82d6c725ddeffbbd.png

五.server常用可选项

格式示例

server web1 192.168.2.131:80 check inter 3000 fall 2 rise 5 weight 2

1.check

参数含义
inter健康状态检查间隔时间
fall后端服务器从线上转为线下的检查的连续失效次数,默认为3
rise后端服务器从下线恢复上线的检查的连续有效次数,默认为2

2.weight

当调度方式设计到权重时,使用此参数设置

3.backup

将服务器标记为备份状态,只在所有非备份主机down机时提供服务

4.disabled

将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受新请求

5.redirect prefix和redir

两者都是将请求临时重定向到指定url,前者新开窗口保持原有页面不动,后者使用现在窗口跳转,这两个参数都只适用于http-mode

6.maxconn

server的最大并发数

六.调度算法

1.静态

(1)static-rr

基于权重的轮询,根据配置的权重值来调度

(2)first

server列表中的书写顺序来调度,从上至下,只有当第一台的负载连接上限了才往下调度,效果不是很理想

(3)source

默认归类为静态算法,但可以通过hash-type修改为动态。

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一个后端web服务器。此方式当后端服务器数据量发生变化时,会导致非常多的用户的请求转发至新的后端服务器,适用于需要会话保持但不支持cookie和缓存的场景

2.动态

(1)roundrobin

默认的调度算法,基于权重的轮询动态调度算法,支持权重的运行时调整,roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个real server,支持对real server权重动态调整。

(2)leastconn

当前后端服务器连接最少的优先调度(新客户端连接),比较适合长连接的场景

(3)random

基于随机数作为一致性hash的key,随机负载平衡对于大型服务器场或经常添加或删除服务器非常有用,支持weight的动态调整,weight较大的主机有更大概率获取新请求。

 

相关文章:

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录 一.快速安装lua和haproxy 二.配置haproxy的配置文件 三.配置haproxy的全局日志 四.测试负载均衡、监控和日志效果 五.server常用可选项 1.check 2.weight 3.backup 4.disabled 5.redirect prefix和redir 6.maxconn 六.调度算法 1.静态 2.动态 一.快速安装lu…...

GenICam-GenApi简介

EMVA 1288标准之GemICam-GenApi学习与解读 背景介绍 当前相机不仅用于传输图像&#xff0c;还打包了越来越多的功能。这就导致相机的编程接口越来越复杂。 GenICam的目标是为所有类型的相机提供一个通用的编程接口&#xff0c;无论相机使用何种接口技术&#xff0c;或者实现…...

如何创建纯净版Django项目并启动?——让Django更加简洁

目录 1. Django的基本目录结构 2. 创建APP 2.1 创建app 2.2 配置文件介绍 3. 迁移数据库文件 3.2 连接数据库 3.1 创建迁移文件 3.2 同步数据库 4. 纯净版Django创建 4.1 剔除APP 4.2 剔除中间件 4.3 剔除模板引擎 5. 最终 1. Django的基本目录结构 在我们创建Django项…...

蓝桥杯 2022 省A 选数异或

一种比较无脑暴力点的方法&#xff0c;时间复杂度是(nm)。 (注意的优先级比^高&#xff0c;记得加括号(a[i]^a[j])x&#xff09; #include <iostream> #include <vector> #include <bits/stdc.h> // 包含一些 C 标准库中未包含的特定实现的函数的头文件 usi…...

计数器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,触发器(Flip-Flop):2.2,计数器结构:2.3,计数操作:2.4,模式控制:2.5,扩展与级联:3,结构特点3.1,触发器3.2,加法器3.3,时钟控制电路...

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率&#xff0c;做了内存优化和下载导出优化&#xff0c;具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍&#xff1a; 一.拍摄前预览页面优化 预览效果问题 存在…...

IT服务监督管理案例分析题

习题一 根据国家电网提出建设智能电网&#xff0c;信息化作为推进电力企业实现发展战略目标的和目标的核心保障体系&#xff0c;作用日益突出。这其中更需要进步推动信息运维综合监管系统的深化应用工作。 某软件股份有限公司是国内IT运维管理服务提供商&#xff0c;为多家电…...

【spring】AbstractApplicationContext 的refresh() 方法学习

上一篇我们一起学习了【spring】FileSystemXmlApplicationContext 类学习 AbstractApplicationContext 的refresh() 方法介绍 AbstractApplicationContext的refresh()方法仍然是整个Spring应用程序上下文初始化的核心流程入口。大体上的刷新生命周期依然保持一致。 refresh(…...

零基础10 天入门 Web3之第1天

10 天入门 Web3 Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&#xff0c;可帮助大家入门 Web3&#xff1a; 想要一起探讨学习的…...

【1】网络协议基础概念

【1】网络协议基础知识 1、互联网2、为什么要学习网络协议3、学习中需要搭建的环境4、客户端-服务器5、Java 的跨平台原理6、C/C的跨平台原理7、一个简单的SpringBoot项目(1) pom.xml(2) application.yml(3) NetworkStudyApp.java(4) SwaggerConfig.java(5) HelloWorldControll…...

flutter 中 GetxController 和 GetxService 的区别和使用场景

区别&#xff1a; GetxController&#xff1a; GetxController 用于管理特定页面或 widget 的状态。每个页面或 widget 可以拥有一个或多个 GetxController&#xff0c;用于管理其自身的状态和逻辑。GetxController 是短暂存在的&#xff0c;通常与页面或 widget 的生命周期相关…...

Python+Django+Yolov5路面墙体桥梁裂缝特征检测识别html网页前后端

程序示例精选 PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前后端 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前…...

uniApp使用XR-Frame创建3D场景(7)加入点击交互

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 这篇我们讲解如何与场景中的模型交互&#xff08;点击识别&#xff09; 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-mesh id"…...

单元测试11213123231313131231231231

使用技术 junit Mockito s[romg 示例代码&#xff1a; SpringBootTest(classes启动类.class) public class AbstractTes{ MockBean protected A a; } AutoConfigureMockMvc(printOnlyOnFailure false) public abstract class AbstractWebTes extends AbstractTes imple…...

libVLC 捕获鼠标、键盘事件

在实现播放器的时候&#xff0c;我们需要捕获键盘、鼠标事件进行视频快进、快退&#xff0c;或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下&#xff0c;在使用libVLC库的时候&#xff0c;我们无法捕获这些事件&#xff0c;因为我们将Qt的视频窗口传递给了libVLC。…...

京东云0基础搭建帕鲁服务器_4核16G和8核32G幻兽帕鲁专用服务器

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…...

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍&#xff1a; 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目&#xff1f;如何对 OpenCV …...

playbook的介绍、应用与实施

playbook的介绍、应用与实施 文章目录 playbook的介绍、应用与实施1. 实施playbook1.1 Ansible Playbook与临时命令1.2 格式化Ansible Playbook1.3 运行playbook1.4 提高输出的详细程度1.5 语法验证1.6 执行空运行 2. 实施多个play2.1 缩写多个play2.2 play中的远程用户和特权升…...

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…...

阿里云CentOS7安装Hadoop3伪分布式

ECS准备 开通阿里云ECS 略 控制台设置密码 连接ECS 远程连接工具连接阿里云ECS实例&#xff0c;这里远程连接工具使用xshell 根据提示接受密钥 根据提示写用户名和密码 用户名&#xff1a;root 密码&#xff1a;在控制台设置的密码 修改主机名 将主机名从localhost改为需要…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...