3.1 导读
本次实践基于Haproxy的服务名、IP进行分流,实现灰度发布,关于Haproxy的更多信 息请参考haproxy官网 。
说明
● 本文中使用HA-Proxy version 1.5.18,供其他版本参考。
● 本文提供的shell命令仅供参考,具体命令还以用户实际场景为准。
● 本文试例中的test_A、test_B分别指A边用户和B边用户。
● 本文中添加haproxy服务的主机是root用户。(若为其他用户,需添加包含haproxy目录文件 的权限)
最佳实践 3 实践--基于 haproxy 灰度发布
3.2 实现方式一:替换 haproxy 配置文件
3.2.1 实现原理
● 在本地修改好的haproxy配置文件上传到私有发布仓库中。
● 通过部署任务将发布仓库的haproxy配置文件拷贝到搭建了haproxy的机器上。
● 通过部署平滑的启动haproxy服务。
3.2.2 操作步骤
步骤1 本地修改haproxy配置文件。
● 本地新建haproxy_A.cfg配置文件内容:
#server test_A 10.10.10.10:8080 server test_B 10.10.10.11:8080
haproxy_A.cfg配置文件表示:下线test_A边流量
● 本地新建haproxy_AB.cfg配置文件内容:
server test_A 10.10.10.10:8080
#server test_B 10.10.10.11:8080
haproxy_AB.cfg配置文件表示:上线test_A边流量同时下线test_B边流量
● 本地新建haproxy_B.cfg配置文件内容:
server test_A 10.10.10.10:8080 server test_B 10.10.10.11:8080
haproxy_B.cfg配置文件表示:上线test_B边流量
最佳实践 3 实践--基于 haproxy 灰度发布
步骤2 将修改后的haproxy配置文件上传至发布仓库中.
1. 登录首页,进入目标项目,单击顶部导航栏“发布”,进入发布详情页面。
– 主机组:选择部署haproxy服务的主机组。
– 选择软件包:选择发布仓库中的haproxy配置文件。(下线A,上线A 下线 B,再上线B)
– 下载到主机的部署目录:填写haproxy.cfg配置文件所在的目录。
最佳实践 3 实践--基于 haproxy 灰度发布
2. 配置“执行shell命令”任务步骤。
参考命令:
#!/bin/sh
#haproxy_A.cfg为发布仓库的配置文件名称,用户根据实际情况填写 Haproxy_cfg_Name="haproxy_A.cfg"
#/etc/haproxy/为用户安装haproxy服务机器上的haproxy.cfg配置文件的路径,用户根据实际情况填写 Haproxy_cfg_Path="/etc/haproxy"
#serviceName为切流量的服务名称 serviceName="haproxy"
port="1234" #haproxy的监听端口 now_time=`date +%Y%m%d%H%M%S`
cp $Haproxy_cfg_Path/haproxy.cfg $Haproxy_cfg_Path/haproxy.cfg.$now_time /usr/sbin/$serviceName -c -q -f $Haproxy_cfg_Path/$Haproxy_cfg_Name checkflag=$?
if [ "$checkflag" -eq 0 ] then
mv $Haproxy_cfg_Path/$Haproxy_cfg_Name $Haproxy_cfg_Path/haproxy.cfg sudo iptables -I INPUT -p tcp --dport $port --syn -j DROP
sleep 1
service haproxy reload #(参考命令)若已将haproxy注册成服务的形式
# 参考命令(没有注册成服务):/usr/sbin/$serviceName D f /etc/$serviceName/$serviceName.cfg -p /var/run/$serviceName.-pid -sf $(cat /var/run/$serviceName.-pid)
最佳实践 3 实践--基于 haproxy 灰度发布
sudo iptables -D INPUT -p tcp --dport $port --syn -j DROP
● 通过部署任务中的“执行shell命令”步骤修改用户haproxy机器上的配置文件。
● 通过部署任务中的“执行shell命令”步骤平滑的重启haproxy服务。
3.3.2 操作步骤
2. 配置第一个“执行shell命令”任务步骤:修改用户的haproxy.cfg配置文件。
#!/bin/sh
#/etc/haproxy/为用户安装haproxy服务机器上的haproxy.cfg配置文件的路径,用户根据实际情况填写 Haproxy_cfg_Path="/etc/haproxy"
online_servername="" #上线主机名 offline_servername="" #下线主机名 port="1234" #haproxy的监听端口 now_time=`date +%Y%m%d%H%M%S`
cp $Haproxy_cfg_Path/haproxy.cfg $Haproxy_cfg_Path/haproxy.cfg.$now_time
[[ "$up_servername" != '' ]] && sed -i "/server $up_servername/s/#//g" $Haproxy_cfg_Path/
最佳实践 3 实践--基于 haproxy 灰度发布