haproxy--使用socat工具实现对haproxy权重配置的热更新

本篇博客将详细介绍使用socat对haproxy配置进行热更新(不中断服务更新haproxy的配置),通过本篇博客你可以学会使用socat修改haproxy的配置。

一、简介

1.1 为什么需要热更新

haproxy服务用来分发访问到后台各个服务器,如果采用常规方式,修改配置文件并且重启服务生效,在重启的过程中会造成业务的突然中断,这显然不合适,因此需要进行热更新来修改haproxy的配置,使之不用重启服务也可以直接生效,避免业务的中断。

1.2 socat简介

对服务器动态权重和其它状态可以利用 socat工具进行调整,Socat 是 Linux 下的一个多功能的网络工 具,名字来由是Socket CAT,相当于netCAT的增强版.Socat 的主要特点就是在两个数据流之间建立双向 通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、Socket文件等

二、使用socat热更新haproxy权重配置

2.1 安装socat

bash 复制代码
[root@HA ~]# dnf install socat -y

2.2 利用socat查看haproxy信息

bash 复制代码
[root@HA ~]# echo "show servers state" | socat stdio /var/lib/haproxy/stats 
1
# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port
2 webcluster-http 1 webserver1 192.168.0.10 0 0 1 1 149 7 0 0 7 0 0 0 - 80 - 0 0 - - 0
2 webcluster-http 2 webserver2 192.168.0.20 0 0 1 1 148 7 0 0 7 0 0 0 - 80 - 0 0 - - 0

注:该表头部注释与下方数据一一对应。

2.3 通过socat修改haproxy的权重配置

1、首先需要对socket进行授权

打开haproxy的配置文件并在global模块中添加以下内容

bash 复制代码
stats socket /var/lib/haproxy/stats mode 600 level admin

2、修改权重

查看服务器权重(后台webserver1和webserver2)

bash 复制代码
[root@HA ~]# echo "get  weight webcluster-http/webserver1" | socat  stdio /var/lib/haproxy/stats
1 (initial 1)

[root@HA ~]# echo "get  weight webcluster-http/webserver2" | socat  stdio /var/lib/haproxy/stats
1 (initial 1)

可以看见后台两台服务器的权重默认配置均为1,当前配置也为1。

进行访问查看当前负载均衡效果

可见当前请求分发是两台服务器轮流处理

接下来修改webserver1的权重

bash 复制代码
[root@HA ~]# echo "set weight webcluster-http/webserver1 4 " | socat stdio /var/lib/haproxy/stats

[root@HA ~]# echo "get weight webcluster-http/webserver1" | socat stdio /var/lib/haproxy/stats
4 (initial 1)

可以看见使用命令修改了webserver1的权重为4,然后查看可知默认设定(配置文件中的设定)的权重还是为1,但是当前生效的权重为4。

接下来进行访问测试

可以看见访问请求分发变成了webserver1处理4个后webserver2处理1个,配置生效,并且haproxy服务也没有重启,热更新生效。不过需要注意的是,使用socat热更新是临时生效的,当haproxy服务重启后,socat做的更新就会失效。

重启haproxy服务并再次重新使用socat查看权重

bash 复制代码
[root@HA ~]# systemctl restart haproxy
[root@HA ~]# echo "get weight webcluster-http/webserver1 " | socat stdio /var/lib/haproxy/stats
1 (initial 1)

[root@HA ~]# echo "get weight webcluster-http/webserver2 " | socat stdio /var/lib/haproxy/stats
1 (initial 1)

可以看见权重又重新恢复到和配置文件中指定的一样了。

相关推荐
寺中人33 分钟前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
V哥AI增长1 小时前
Schema.org 结构化数据与GEO技术落地:AI引擎引用机制与JSON-LD部署实证研究
大数据·运维·人工智能
小张成长计划..1 小时前
【Linux】18:基础IO
linux·运维·服务器
MIXLLRED2 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
啊哈一半醒2 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
wunaiqiezixin2 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081
东东最爱敲键盘3 小时前
二阶段总结
运维
Benszen3 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
扬帆破浪3 小时前
文档自动检查:用 Claude Code、OpenClaw 审 WPS 文件:预览、批注、改正文
运维·服务器·wps
_kerneler3 小时前
Linux tiny RCU
linux