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)

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

相关推荐
SkyWalking中文站4 小时前
SkyWalking 11 与 BanyanDB 0.11:在存储引擎内部实现 Trace 尾部采样
运维·监控·自动化运维
姚不倒5 小时前
etcd 学习系列(二):集群架构 —— 3 节点是如何工作的
运维·架构·etcd
pt10435 小时前
网络自动化Python课程:Cisco PyATS网络自动化测试框架
运维·自动化
Johny_Zhao6 小时前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
小袁拒绝摆烂7 小时前
Jenkins部署经验
运维·jenkins
落羽的落羽7 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生7 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹7 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker7 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦7 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap