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)

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

相关推荐
Lsetea1 小时前
OpenSSL报certificate is not yet valid:error 9与notBefore时间排查
linux·运维·https·ssl证书·openssl
魔法阵维护师1 小时前
Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理
linux·运维·服务器
飞飞传输1 小时前
业务系统文件安全检测怎么做?生物医药企业选型与建设指南
大数据·运维·安全
姜鱼问生2 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
qq_543447822 小时前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
DeviceHub2 小时前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能
Apipi*2 小时前
30天速通Linux 第七章进程间通信
linux·运维·服务器
emo_2b2 小时前
Pycharm配置conda解释器时遇到的问题及解决方法
linux·pycharm·conda
迪康软件zz2 小时前
终端审批体系怎么搭?从模板配置到业务连续性
运维·安全·自动化运维
科技研学社2 小时前
中小服装工装厂自动化改造:产线节拍平衡与工位减负实施方案
运维·自动化