无感发布重启服务
场景说明:
多台服务已部署负载均衡运行,实现无感发布功能,用户端不会因服务重启导致访问异常
处理方法:
如app1 和 app2为同一服务,先重启app1, app2暂不处理,直到app1完全启动后,再重启app2
脚本文件内容如下:
cat restart.sh
#!/bin/sh
# 警告:请不要随意修改
# 作者:Jimmy Zhang
# 修改时间:2023-02-21
# 脚本目的:所有进程按先后顺序关闭并重
http="http://192.168.1.68"
server_prot1="10011"
server_prot2="10012"
APP_HOME="$HOME/app"
APP_HOME_BIN="$HOME/app/http/bin"
#结束进程文件名:stop_http_app_01.sh; stop_http_app_02.sh ...
stopname="stop_http_app_0"
#启动进程文件名:start_http_app_01.sh; start_http_app_02.sh ...
startname="start_http_app_0"
ProxySer="192.168.1.68_1001"
# 注:i<=2 代表进程数为:2
for ((i=1; i<=2; i ++))
do
#stop services:
echo "Stopping Server $i……"
eval stop_name${i}=$stopname$i".sh"
eval start_name${i}=$startname$i".sh"
eval port=\$server_prot${i}
eval stopn=\$stop_name${i}
eval startn=\$start_name${i}
eval haproxySer=$ProxySer${i}
#--------http_addr:连接地址-------
http_addr="$http:$port/intf"
echo "平滑下线处理,服务:${haproxySer} 权重由1变更为0,处理中..."
# honda_intf : haproxy 中 backend的名称; $haproxySer : backend 下的 server 名称: 这里用变量,则第一个变量为:192.168.1.68_10011
# 如haproxy配置:server 192.168.1.68_10011 192.168.1.68:10011 check inter 5000 rise 2 fall 2
# 将server 192.168.1.68_10011 权重变更为0,变更后,server 将不会被分配任何新的连接到此服务!
sshpass -p "password" ssh root@192.168.1.68 -o StrictHostKeyChecking=no "echo "set weight honda_intf/$haproxySer 0" | socat stdio /app/proxy/haproxy/haproxy.sock"
echo -e "服务【$stopn 】is down!\n"
#sleep 3
for file in `find $APP_HOME -name $stopn`
do
cd `dirname $file`
fname=`basename $file`
j=0
# 执行结束进行脚本
msg=`./$fname`
# 通过查询 lsof -i:进程占用端口 |wc -l > 0时,进程还在运行中
while [[ `lsof -i:$port | wc -l` -gt 0 ]]
do
echo "服务【$stopn 】正在运行,尝试停止中......耗时$j;"
j=`expr $j + 1`;
sleep 1
done
echo "${stopn}...............[${msg}]"
done
#start services:
echo "Starting Server $i......"
for file in `find $APP_HOME -name $startn`
do
cd `dirname $file`
fname=`basename $file`
j=0
# 启动进程
msg=`./$fname > /dev/null 2>&1 &`
# 进程启动后访问连接时不等于200状态时,继续等待,直到状态等于200,即进程启动成功!
while [[ `curl -I -s -m 6 -o /dev/null -w %{http_code} $http_addr` -ne 200 ]]
do
echo "服务【$startn 】正在启动中,请稍等......耗时$j;"
j=`expr $j + 1`;
sleep 1
done
echo "${startn}....................[The process started successfully]"
# 进程启动成功后,将权重变更为1,此时,通过负载均衡连接上!
echo "平滑上线处理,服务:${haproxySer} 权重由0变更为1,处理中..."
sshpass -p "ADbHd7k7bqXw!tPH" ssh root@172.18.160.68 -o StrictHostKeyChecking=no "echo "set weight honda_intf/$haproxySer 1" | socat stdio /app/proxy/haproxy/haproxy.sock"
echo -e "服务【$startn 】is up!\n"
#sleep 1
#echo -e "\n"
done
done
- 本文标签: Linux
- 本文链接: https://www.jimmy2k.top/article/297
- 版权声明: 本文由JimmyZ的个人博客原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权