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](#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 Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-03-25 17:48:01 CST; 1s ago
 Main 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-limits
   stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin   #指定socket文件
   #user   xxx   #指定用户和组
   #group  xxx
   chroot /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的超时时常,超时后报错502
   timeout connect 1s   #客户端从haproxy请求到后端server的最长连接等待时间
   timeout check 5s   #对后端服务器的默认检测超时时间
   option httplog  #日志使用http格式,使用tcp-mode时,又指定tcplog
   option 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/xxx
   log 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写在一起

[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,由于设置了用户认证,所以需要先登录才能查看,监控页面的刷新间隔可以自己在配置文件中调整

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

相关推荐
unix2linux17 小时前
YOLO v5 Series - Image & Video Storage ( Openresty + Lua)
yolo·lua·openresty
最后一个bug17 小时前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
linweidong20 小时前
MariaDB面试题及参考答案
linux·运维·数据库·负载均衡·dba·mariadb·后端面试
半夏知半秋2 天前
lua-lru缓存算法解析
笔记·学习·算法·缓存·lua
码农研究僧2 天前
详细分析ipvsadm负载均衡的命令
运维·负载均衡·lvs·ipvsadm
wclass-zhengge2 天前
04高可用高并发(D2_高可用 - D1_负载均衡)
运维·负载均衡
不会编程的懒洋洋2 天前
Spring Cloud OpenFeign 声明式服务调用与负载均衡组件
java·spring boot·后端·spring·spring cloud·负载均衡·openfegin
最后一个bug3 天前
C语言执行Lua进行错误处理
linux·服务器·c语言·开发语言·嵌入式硬件·lua
袁庭新3 天前
Lua如何连接MySQL数据库?
redis·mysql·lua·lua5.4·袁庭新
红黑色的圣西罗3 天前
Lua 实现继承的一种方式
开发语言·lua