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)

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

相关推荐
٩( 'ω' )و2602 小时前
linux网络--基础概念
linux·网络
zhang6183992 小时前
Linux中不同服务器之间迁移python 虚拟环境-conda-pack
linux·运维·python
深圳市恒讯科技2 小时前
2026新加坡服务器硬件防火墙配置推荐
运维·服务器·云计算
小江||小廖2 小时前
服务器如何设置共享文件夹,让其他内网电脑可以访问
运维·服务器
HIT_Weston2 小时前
121、【Ubuntu】【Hugo】首页板块配置:list 模板(一)
linux·ubuntu·list
The森2 小时前
万字长文外加示例:进入内核理解Linux 文件描述符(fd) 和 “一切皆文件” 理念
linux·经验分享·笔记
历程里程碑2 小时前
Linux19 实现shell基本功能
linux·运维·服务器·算法·elasticsearch·搜索引擎·哈希算法
wdfk_prog2 小时前
[Linux]学习笔记系列 --[drivers]mmc]mmc
linux·笔记·学习
霍格沃兹测试学院-小舟畅学2 小时前
Playwright测试超时管理:全局与局部超时设置
运维·服务器·网络