linux下tomcat工程增量更新,一、Tomcat集群上App应用同步更新升级

Tomcat作为一个轻量级的应用服务器,被广泛应用做为java程序的容器使用,很多线上的环境都是从入口的nginx服务器负载均衡到后端多个tomcat服务器组成的集群,因此每次app应用升级的时候,都需要在集群上的每台服务器进行重复的更新工作,下面是关于同步升级的两个思路

方法一、使用rsync远程数据同步服务

原理:该服务可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送

限制:采用rsync比较适合增量备份模式,比如每次只修改app项目下的配置文件,rsync第一次同步是将项目目录整体拷贝,以后进行增量同步,但实际生产中很多时候都是将项目目录进行整体打包替换掉,文件变动较大,因此该方法保留使用

方法二、利用SHELL脚本的同步服务

思路:既然每次项目目录都有变动,那么就在集群中选择一台服务器作为Master主机,其余机器作为minion从机,每次升级时候在Master上更新,然后利用脚本自动打包目录并推送到minion主机上

为了方便检查和分开测试这里将文件分开为5个

1、minion_ip_list.txt #集群minion主机IP文件,每行输入一个有效的minion主机IP,脚本会逐行读取该文件并执行相应命令

2、master_bak.sh #master主机项目备份脚本,项目部署成功后将项目目录打包,并运行下一步检测脚本

#!/bin/bash

######定义全局变量#################################################################################

#脚本位置目录

SCRIPT_DIR=/script

#备份存档目录

APP_BAK_DIR=/app_itsm_backup

#APP应用安装目录

APP_INSTALL_DIR=/usr/local/tomcat/webapps/web/ServiceHot

#minionIP列表文件位置

MINION_LIST=/script/minion_ip_list.txt

#集群miniom升级脚本文件

MINION_UPDATE_FILENAME=minion_update.sh

#当天备份文件名

APP_BAK_FILENAME=ServiceHot$(date +%Y%m%d).tar.gz

###################################################################################################

##############检查备份目录函数#####################################################################

function check_app_bak_dir()

{

if [ ! -d $APP_BAK_DIR ];then

mkdir $APP_BAK_DIR

echo "Create directory ‘$APP_BAK_DIR’"

else

echo "Cannot create directory ‘$APP_BAK_DIR’: File exists"

fi

}

###################################################################################################

##############检查存档函数#########################################################################

function check_archive()

{

if [ ! -f $APP_BAK_DIR/$APP_BAK_FILENAME ];then

echo "Create Archive ‘$APP_BAK_DIR/$APP_BAK_FILENAME’"

cd /usr/local/tomcat/webapps/web

tar -czvf $APP_BAK_DIR/$APP_BAK_FILENAME ServiceHot

echo "Create archive successfully"

else

read -p "Would you need to overlay archive(y/n)?:" i

#echo $i

if [ $i = y ];then

rm -rf $APP_BAK_DIR/$APP_BAK_FILENAME

cd /usr/local/tomcat/webapps/web

tar -czvf $APP_BAK_DIR/$APP_BAK_FILENAME ServiceHot

echo "Successfully overwrite Archive"

elif [ $i = n ];then

echo "Thanks to use,See you next time. Bye!"

exit

else

echo "You need enter y or n, Try to run script again!"

exit

fi

fi

}

###################################################################################################

check_app_bak_dir

check_archive

/script/minion_check.sh

3、minion_check.sh #检测minion主机并将升级脚本minion_update.sh推送到目标主机自动执行

备注:该脚本涉及的while read line中ssh命令的远程调用问题在下一篇文章中有解释

#!/bin/bash

###################################################################################################

#脚本位置目录

SCRIPT_DIR=/script

#集群miniom升级脚本文件

MINION_UPDATE_FILENAME=minion_update.sh

#minionIP列表文件位置

MINION_LIST=/script/minion_ip_list.txt

###################################################################################################

###############读取集群minionIP并测试是否存活######################################################

while read line

do

if test -z $line;then

continue

else

echo "Minion host:"$line

ping -c 2 $line>/dev/null

i=$(echo $?)

#echo $i

if [ $i -eq 0 ];then

echo "Push script file to $line"

ssh -n root@$line "mkdir $SCRIPT_DIR 2&1>/dev/null"

ssh -n root@$line "rm -rf $SCRIPT_DIR/$MINION_UPDATE_FILENAME"

scp $SCRIPT_DIR/$MINION_UPDATE_FILENAME root@$line:$SCRIPT_DIR

ssh -n root@$line "chmod +x $SCRIPT_DIR/*.sh"

ssh -n root@$line "$SCRIPT_DIR/$MINION_UPDATE_FILENAME"

else

echo "Minion host does not find, Check file /script/minion_ip_list.txt"

fi

fi

done < $MINION_LIST

###################################################################################################

4、minion_update.sh #集群minion主机升级脚本,从主机master上拉取项目压缩包后在本机解压并启动

#!/bin/bash

############设置全局变量################################################################################

#master主机ip

MASTER_IP=192.168.15.133

#APP更新数据包存放目录

APP_BAK_DIR=/app_itsm_backup

#APP应用安装目录

APP_INSTALL_DIR=/usr/local/tomcat/webapps/web/ServiceHot

#当天备份文件名

APP_BAK_FILENAME=ServiceHot$(date +%Y%m%d).tar.gz

#tomcat默认端口号8080

TOMCAT_DEFAULT=8080

#获取tomcat当前端口号

TOMCAT_PORT=`ss -nutlp|grep $TOMCAT_DEFAULT|grep java|awk '{print $5}'|awk -F ":" '{print $4}'`

#tomcat安装目录

TOMCAT_INSTALL_DIR=/usr/local/tomcat

#获取tomcat当前进程号

TOMCAT_PID=`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`

########################################################################################################

########检查更新目录后拉取更新数据包####################################################################

function check_app_update_dir()

{

if [ ! -d $APP_BAK_DIR ];then

mkdir $APP_BAK_DIR

echo "Create directory ‘$APP_BAK_DIR’"

else

echo "Cannot create directory ‘$APP_BAK_DIR’: File exists"

fi

}

function check_archive()

{

rm -rf $APP_BAK_DIR/$APP_BAK_FILENAME

echo "Pull the archive from master $MASTER_IP....."

scp root@$MASTER_IP:$APP_BAK_DIR/$APP_BAK_FILENAME $APP_BAK_DIR

}

check_app_update_dir

check_archive

########################################################################################################

########关闭tomcat函数###################################################################################

kill -9 $TOMCAT_PID &>/dev/null

#########################################################################################################

##########更新app项目####################################################################################

function update_app()

{

rm -rf $APP_INSTALL_DIR

tar -xvf $APP_BAK_DIR/$APP_BAK_FILENAME -C /usr/local/tomcat/webapps/web/

}

update_app

########################################################################################################

########重启tomcat#######################################################################################

$TOMCAT_INSTALL_DIR/bin/catalina.sh start

########################################################################################################

集群升级:

--在master上升级app项目

--传5个脚本文件到对应目录并授予执行权限

命令:chmod +x /script/*.sh

--在minion_ip_list.txt文件里输入所有minon主机的IP,每行一个

--运行备份脚本 master_bak.sh

命令:/script/master_bak.sh

5、tomcat_check.sh #tomcat端口检查脚本,自动开启tomcat进程,手动选择关闭和重启动tomcat进程,选择是否查看启动日志,该脚本为辅助工具,可自由选择是否使用

#!/bin/bash

#################端口号自定义,全局变量################################################################

#tomcat默认端口号8080

TOMCAT_DEFAULT=8080

#获取tomcat当前端口号

TOMCAT_PORT=`ss -nutlp|grep $TOMCAT_DEFAULT|grep java|awk '{print $5}'|awk -F ":" '{print $4}'`

#tomcat安装目录

TOMCAT_INSTALL_DIR=/usr/local/tomcat

#获取tomcat当前进程号

TOMCAT_PID=`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`

######################################################################################################

######查看实时启动日志函数############################################################################

function read_start_logs()

{

read -p "Would you need to check start logs (y or n)?:" i

if [[ $i = y ]];then

tail -f $TOMCAT_INSTALL_DIR/logs/catalina.out

elif [[ $i = n ]];then

echo "Thanks to use,See you next time. Bye!"

else

echo "You need enter y or n"

echo "Or you can use commond: tail -f $TOMCAT_INSTALL_DIR/logs/catalina.out"

fi

}

######################################################################################################

#####tomcat启动管理函数###############################################################################

if [[ $TOMCAT_PORT -eq 8080 ]];then

echo "Tomcat is already start !"

echo "Tomcat process is: $TOMCAT_PID"

read -p "Would you need to restart or stop tomcat (y=restart/n=stop)?:" i

if [[ $i = y ]];then

#echo $TOMCAT_PID

#ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'

echo "Kill tomcat process $TOMCAT_PID"

kill -9 $TOMCAT_PID

echo "Restart tomcat now!"

$TOMCAT_INSTALL_DIR/bin/catalina.sh start

echo "New tomcat process is:`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`"

read_start_logs

elif [[ $i = n ]];then

echo "Kill tomcat process $TOMCAT_PID"

kill -9 $TOMCAT_PID

echo "Thanks to use,See you next time. Bye!"

exit

else

echo "You need enter y or n, Try to run script again!"

exit

fi

else

echo "Start tomcat..."

$TOMCAT_INSTALL_DIR/bin/catalina.sh start

echo "New tomcat process is:`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`"

read_start_logs

fi

##########################################################################################################

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值