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)

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

相关推荐
AOwhisky6 分钟前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行1 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.1 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器1 小时前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
a8a3021 小时前
Laravel9.x新特性全解析
运维·spring boot·nginx
beyond阿亮1 小时前
IEC104 Client Simulator - IEC104 主站/客户端模拟器 仿真器免费使用教程
运维·服务器·网络
Agent产品评测局2 小时前
生产排期与MES/ERP系统打通,实操方法详解:2026企业级智能体与超自动化集成实战指南
运维·人工智能·ai·chatgpt·自动化
CodeOfCC2 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器
绿虫光伏运维2 小时前
一文理清光伏运维的内容、常见问题与重要措施
大数据·运维·光伏业务