原创

无感发布重启服务

场景说明:

多台服务已部署负载均衡运行,实现无感发布功能,用户端不会因服务重启导致访问异常


处理方法:

如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

正文到此结束
本文目录