背景
内网集群jar包需要批量更新
将集群每台机器逐一覆盖重启耗费大量精力
内网不能使用yum或者apt-get等工具,安装比如jenkins等工具估计会很麻烦
上次装个nginx,死活就装上了一半,没有把https相关组件装全,依赖越装越多
准备工作
参见其他博主的文章https://blog.csdn.net/u010606397/article/details/111251175
结合经验简单总结一下:
- 在集群的每个节点上执行命令
ssh-keygen
,然后一路按回车键即可 - 选出一台用于主导更新的机器,使用
ssh-copy-id root@服务端IP
命令,在这台机器上登录所有其他机器。
这是为了脚本能调用另一台linux命令而做的准备
然后需要配置一台静态资源服务器,可以使用java-web容器,或者nginx。我这里使用了nginx。
大致架构
说明:红色框选出来的内容是每台机器上需要预置的
- 手动更新静态资源的jar包,例如我只需要把nginx静态代理的目录下jar包覆盖即可
- 运行主导机上统一更新脚本
- 统一更新脚本调用每台机器的更新本机脚本
- 更新本机脚本从静态资源服务器(nginx)下载jar包到指定位置,并重启java服务
然后贴出我的两个shell脚本供参考
更新本机脚本 update_jar.sh
#显示一下执行命令的是哪台机器
echo 我是61机
#cd命令就不解释了
cd /opt/pzj
#从静态资源服务器(nginx)下载jar包到指定路径
wget http://??.???.??.61/update_jar/nb.jar -O /usr/local/nb.jar
#下载完成后,杀掉原来的进程
kill -9 `ps -ef | grep nb.jar | grep -v grep | awk '{print $2}'`
#进程杀死后删除原来的jar包
rm -f /opt/pzj/nb.jar
#将新jar包复制到原来jar包所在位置
cp /usr/local/nb.jar /opt/pzj/nb.jar
#运行新的jar包
nohup java -jar /opt/pzj/nb.jar --spring.profiles.active=prd &
统一更新脚本 all_update.sh
#统一更新脚本和nginx都在集群第一台服务器上,这句调用了自己的《更新本机》脚本
nohup sh /usr/local/pzj/update_jar.sh >> run61.out &
#通过配置好的ssh免密登录,调用集群其他服务器的《更新本机》脚本
nohup ssh root@??.???.??.62 sh /usr/local/pzj/update_jar.sh >> run62.out &
nohup ssh root@??.???.??.63 sh /usr/local/pzj/update_jar.sh >> run63.out &
###还有多少机器都可以追加在这下面
注意
- 不要让nginx的静态资源直接指向本机运行的jar包,又调用本机一键更新脚本,会导致闭环下载的错误 (这句有点绕口,不脑抽的可以忽略)
- 在《更新本机》脚本中,我选择先下载jar包到其他位置,然后杀掉进程,覆盖jar包,再启动。你也可以偷懒,直接覆盖原来的jar包,然后重启进程。