当前位置: 首页 > 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较大的主机有更大概率获取新请求。

 

http://www.lryc.cn/news/327412.html

相关文章:

  • GenICam-GenApi简介
  • 如何创建纯净版Django项目并启动?——让Django更加简洁
  • 蓝桥杯 2022 省A 选数异或
  • 计数器选型参数,结构原理,工艺与注意问题总结
  • Android 性能优化实例分享-内存优化 兼顾效率与性能
  • IT服务监督管理案例分析题
  • 【spring】AbstractApplicationContext 的refresh() 方法学习
  • 零基础10 天入门 Web3之第1天
  • 【1】网络协议基础概念
  • flutter 中 GetxController 和 GetxService 的区别和使用场景
  • Python+Django+Yolov5路面墙体桥梁裂缝特征检测识别html网页前后端
  • uniApp使用XR-Frame创建3D场景(7)加入点击交互
  • 单元测试11213123231313131231231231
  • libVLC 捕获鼠标、键盘事件
  • 京东云0基础搭建帕鲁服务器_4核16G和8核32G幻兽帕鲁专用服务器
  • OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出
  • playbook的介绍、应用与实施
  • uniApp使用XR-Frame创建3D场景(5)材质贴图的运用
  • 阿里云CentOS7安装Hadoop3伪分布式
  • 78.子集90.子集2
  • 基于Ubuntu的Linux系统安装jsoncpp开发包过程
  • 葵花卫星影像应用场景及数据获取
  • Jenkins升级中的小问题
  • Apache Hive的基本使用语法(二)
  • 基于单片机16位智能抢答器设计
  • idea默认代码生成脚本修改
  • StarRocks实战——多点大数据数仓构建
  • jmeter总结之:Regular Expression Extractor元件
  • 快速上手Spring Cloud 七:事件驱动架构与Spring Cloud
  • leetcode 1997.访问完所有房间的第一天