1. 程式人生 > >《架構系列四:一鍵部署應用到Tomcat叢集中》

《架構系列四:一鍵部署應用到Tomcat叢集中》

基於前面的《架構系列三:使用Keepalived+Nginx+tomcat實現叢集部署》,我們配置了nginx+Tomcat叢集,如果需要在VM1,VM2各部署6個Tomcat,這時候怎麼將應用部署到叢集中呢,如果手動一個一個的部署,那要部署12次,效率非常底,因此我們迫切需要一鍵自動部署的功能

叢集資訊
VM1:192.168.130.128
Tomcat:tomcat8.5-01,tomcat8.5-02,tomcat8.5-03,tomcat8.5-04,tomcat8.5-05,tomcat8.5-06
VM2:192.168.130.129
Tomcat:tomcat8.5-01,tomcat8.5-02,tomcat8.5-03,tomcat8.5-04,tomcat8.5-05,tomcat8.5-06

路徑準備
在VM1,VM2根路徑下各建立如下路徑:
cd /
mkdir -p deploy/tomcat
mkdir -p deploy/myscript
mkdir -p deploy/war/temp

說明:
/deploy/tomcat/ tomcat的存放路徑
/deploy/myscript/ 存放一鍵部署的指令碼
/deploy/war/ 存放war包
/deploy/war/temp/ 存放通過指令碼解壓後的war包的內容,因為可能會對解壓後的內容做一些修改

部署指令碼
通過FTP工具FileZilla將準備好的war包上傳到VM1,VM2下的/deploy/war路徑下

將Tomcat配置好,分別上傳到VM1,VM2中的/deploy/路徑下

[[email protected] deploy]$ ls
tomcat8.5-01  tomcat8.5-02  tomcat8.5-03 tomcat8.5-04 tomcat8.5-05 tomcat8.5-06

在/deploy/myscript路徑下,建立init_war_to_server.sh指令碼,將修改後的WAR包,分別上傳到Tomcat的webapps路徑下

#!/bin/bash
#刪除臨時檔案
rm -rf  /deploy/war/temp/*
#清空tomcat/webapps路徑下的檔案
for i in $(seq 1 6)
do
 rm -rf /deploy/tomcat/tomcat8.5-0$i/webapps/*
done

#解壓war包到temp路徑下
unzip /deploy/war/server-crm.war -d /deploy/war/temp

#6001節點直接複製
cp /deploy/war/server-crm.war /deploy/tomcat/tomcat8.5-01/webapps/

cd /deploy/war/temp/

#埠替換,將p1替換為p2
#打成war包,並上傳到指定tomcatwebapps目錄
port=6000
for j in $(seq 2 6)
do
 p1=$[port+j-1]
 p2=$[port+j]
 sed -i "s/$p1/$p2/g" /deploy/war/temp/WEB-INF/classes/prop/sdp-crm.properties
 zip -r /deploy/tomcat/tomcat8.5-0$j/webapps/server-crm.war ./
done

echo 'finish!!!!!!!!!!!'

在不同的tomcat中,sdp-crm.properties中的埠號是不一樣的,對應關係如下
tomcat8.5-01 ------ 6001
tomcat8.5-02 ------ 6002
tomcat8.5-03 ------ 6003
tomcat8.5-04 ------ 6004
tomcat8.5-05 ------ 6005
tomcat8.5-06 ------ 6006

因此在指令碼中,首先修改sdp-crm.properties中的埠號,然後再將修改後的檔案壓縮成war包,存放在對應的tomcat中

sed -i "s/$p1/$p2/g" /deploy/war/temp/WEB-INF/classes/prop/sdp-crm.properties
 zip -r /deploy/tomcat/tomcat8.5-0$j/webapps/server-crm.war ./

WAR包準備好後,接下來在/deploy/myscript路徑下,建立start_tomcat_server.sh指令碼,用於啟動tomcat

#!/bin/bash
for i in $(seq 1 6)
do
 /deploy/tomcat/tomcat8.5-0$i/bin/startup.sh
done

echo 'finish!!!'

指令碼準備好後,接下來給指令碼授予執行許可權,然後啟動指令碼

cd /deploy/myscript
chmod +x init_war_to_server.sh
chmod +x start_tomcat_server.sh

./init_war_to_server.sh
./start_tomcat_server.sh

到此,整個一鍵部署就完成了,要是打WAR包也做成自動化指令碼,再結合上面的自動部署,就完美了,總結一下上面的內容
1.將打包的WAR包上傳到/deploy/war目錄下
2.通過init_war_to_server.sh指令碼,修改WAR包中的內容,並將修改後的內容打成新的WAR包,放到對應的TOMCAT中
3.通過start_tomcat_server.sh指令碼,啟動所有的TOMCAT