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

news/2024/5/14 21:26:05

目录

一.快速安装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较大的主机有更大概率获取新请求。

 


http://www.mrgr.cn/p/66110565

相关文章

C# 高级文件操作与异步编程探索(初步)

文章目录 文本文件的读写探秘StreamReader 类深度剖析StreamWriter 类细节解读编码和中文乱码的解决方案 二进制文件的读写BinaryReader 类全面解析BinaryWriter 类深度探讨 异步编程与C#的未来方向同步与异步&#xff1a;本质解读Task 的神奇所在async/await 的魔法 在现代编程…

Linux下TCP/IP编程--TCP实战

之前尝试过windows下的简单TCP客户端服务器编写,这次尝试下一下Linux环境下的TCP 客户端代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #incl…

短视频文案提取的简单实现

​过春风十里,尽荠麦青青。春天总是让人舒坦,而今年的三月,也因为与媳妇结婚十年,显得格外不同。两人奢侈的请了一天假,瞒着孩子,重游西湖,去寻找13年前的冰棍店(给当时还是同事的她买了最贵的一个雪糕-8元),去寻找13年前卖红豆钥匙扣的大爷(她送我了一个绿豆的钥匙…

Qt扫盲-QAssisant 集成其他qch帮助文档

QAssisant 集成其他qch帮助文档 一、概述二、Cmake qch例子1. 下载 Cmake.qch2. 添加qch1. 直接放置于Qt 帮助的目录下2. 在 QAssisant中添加 一、概述 QAssisant是一个很好的帮助文档&#xff0c;他提供了供我们在外部添加新的 qch帮助文档的功能接口&#xff0c;一般有两中添…

提高三维模型数据的立体裁剪技术

三维工厂K3DMaker是一款三维模型浏览、分析、轻量化、顶层合并构建、几何校正、格式转换、调色裁切等功能专业处理软件。可以进行三维模型的网格简化、纹理压缩、层级优化等操作,从而实现三维模型轻量化。轻量化压缩比大,模型轻量化效率高,自动化处理能力高;采用多种算法对…

AI与语音识别合成:开启智能交互新时代

引言:随着人工智能(AI)技术的不断发展,语音识别和语音合成成为了人机交互领域的重要组成部分。语音识别技术使得机器能够理解人类的语言,而语音合成则使得机器能够以人类自然的语音形式进行回应。本文将深入探讨AI与语音识别合成的技术原理、应用场景以及未来发展趋势。一…

前端学习-UI框架学习-Bootstrap5-007-图像形状

菜鸟教程链接 圆角效果rounded<img src="./img/537.jpeg" class="rounded" alt="圆角效果" height="236"> 椭圆rounded-circle<img src="./img/537.jpeg" class="rounded-circle" alt="拖延" …

机器学习之决策树现成的模型使用

目录 须知 DecisionTreeClassifier sklearn.tree.plot_tree cost_complexity_pruning_path(X_train, y_train) CART分类树算法 基尼指数 分类树的构建思想 对于离散的数据 对于连续值 剪枝策略 剪枝是什么 剪枝的分类 预剪枝 后剪枝 后剪枝策略体现之威斯康辛州乳…

【Learning eBPF-1】什么是 eBPF?为什么它很吊?

本系列为《Learning eBPF》一书的翻译系列。 (内容并非机翻,部分夹带私货)笔者学习自用,欢迎大家讨论学习。本书中, eBPF 被称为一种 革命性的 内核技术,被广泛应用于网络、观测 和 安全工具中。 这种技术允许你在不重新编译内核的情况下,使能你的自定义工具,与内核数据…

C语言数据输出和输入介绍

在C语言中&#xff0c;数据的输出和输入是程序与用户或外部环境进行交互的重要方式之一。通过数据的输出&#xff0c;程序可以向用户展示信息或结果&#xff1b;通过数据的输入&#xff0c;程序可以获取用户提供的数据或参数。本文将深入介绍C语言中数据输出和输入的相关知识&a…

Fiddler(6)AutoResponder,重定向

Fiddler最实用的功能, 它可以抓取在线页面保存到本地进行调试, 大大减少了在线调试的困难, 可以让我们修改服务器端返回的数据Enable rules 启用规则 Unmatched requests passthrough 没有匹配到的请求予以通过(建议开启;没开启时,规则匹配外的请求将失败,报HTTP 404错…

阿里通义千问Qwen1.5开源MoE模型

介绍 2024年3月28日&#xff0c;阿里团队推出了Qwen系列的首个MoE模型&#xff0c;Qwen1.5-MoE-A2.7B。它仅拥有27亿个激活参数&#xff0c;但其性能却能与当前最先进的70亿参数模型&#xff0c;如Mistral 7B和Qwen1.5-7B相媲美。相较于包含65亿个Non-Embedding参数的Qwen1.5-…

“预防儿童烧烫伤”科普安全课堂走进嘉鱼县第一小学

为提高嘉鱼县儿童烧烫伤安全意识、隐患识别能力以及突发应急处置能力&#xff0c;3月26日下午&#xff0c;在中国社会福利基金会烧烫伤关爱公益基金、嘉鱼县妇女联合会、嘉鱼县教育局的支持下&#xff0c;嘉鱼县蒲公英社会工作服务中心走进嘉鱼县第一小学开展预防儿童烧烫伤科普…

ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异

引言 随着互联网的快速发展&#xff0c;信息的获取变得比以往任何时候都更加便捷。在数字化时代&#xff0c;人们对于获取准确、及时信息的需求愈发迫切。传统搜索引擎通过关键词匹配的方式为用户提供了大量的信息&#xff0c;然而&#xff0c;这种机械式的检索方式有时候并不…

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS&#xff1a;Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

新零售SaaS架构:客户管理系统的应用架构设计

客户管理系统的应用架构设计应用层定义了软件系统的应用功能,负责接收用户的请求,协调领域层能力来执行任务,并将结果返回给用户,功能模块包括:客户管理:核心功能模块,负责收集和更新客户信息,包括个人资料、联系方式、消费习惯、会员卡、归属信息(比如销售或顾问)和…

53、快速找出不同【ctrl+\】,失败

在英文状态下,按【ctrl+\】,但是这里查找的不精准,只能查找哪一行有不同,但是不能精准查找不同项是什么

基于SpringBoot和Vue的在线视频教育平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的在线视频教育平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

从头开始,建立Neo4j图数据库,详细版

1、前提支持:Java的JDK,在使用Neo4j图数据库之前,电脑上首先要有JDK环境;如果没有下载过JDK请参考: (1)https://www.onlinedown.net/soft/10053430.htm(2)现在完成的资源如下所示:(3)通过解压-得到如下所示文件夹:这个文件夹名称很关键;(4)打开-系统属性 - 环境…