본문 바로가기
Linux/Shell script

linux tomcat 9 컨테이너 분리 shell script

by 개폰지밥 2021. 9. 17.
반응형

혹시 tomcat 9 컨테이너 분리 shell script가 아니라 직접 분리 해보고 싶으신 분들은 아래 사이트를 참고해주세요.

https://seul96.tistory.com/245

 

tomcat multi instance 구성

최근에 간단하게 tomcat을 port로만도 분리해보고(도메인 분리도있음) webapps2를 만들어서 분리도 해보고 instance를 만들어서 admin 서버와 그냥 서버도 분리해보았습니다. 간단하게 port만 분리하는 것

seul96.tistory.com

 

 

# tomcat Container 분리 script 모음

container_name_read.sh
0.00MB
container_seperate_tomcat.sh
0.00MB
startup_c1.sh
0.00MB
startup_c2.sh
0.00MB
shutdown_c1.sh
0.00MB
shutdown_c2.sh
0.00MB

 

l  container 분리 스크립트 돌리기 전에 확인해야하는 사항

tomcat 설치가 먼저 선행되어 있어야 한다. (tomcat 9 추천)

scriptwas 계정으로 올려야 한다. (rootwas를 설치하고 실행했으면 root 계정으로 올려도 무방)

 

| script 돌리는 순서

container_name_read.sh(분리할 container명 받는 스크립트) -> container_seperate_tomcat.sh(컨테이너 분리 스크립트) -> startup_c*.sh(컨테이너 별 시작 스크립트) 순서로 진행한다.

 

1. container_name_read.sh 실행 => 분리할 container명을 받기

vi container_name_read.sh
구현하고 싶은 내용 구현 아이디어 내기
분리할 container명을 받는 스크립트 실행  
쉘 스크립트 내용
#!/bin/bash
#Container1
echo -n "Enter Admin location WAS_BASE(full_name): "
read WAS_BASE
cd $WAS_BASE
echo -n "Enter Admin location Container_name1: "
read Container_name1
mkdir $Container_name1
cd $Container_name1
pwd
echo "export Container1=$(pwd)" >> ~/.bash_profile
echo -e "\033[47;31m create to success Container1 \033[0m"
 
#Container2
cd $WAS_BASE
echo -n "Enter Server location Container_name2: "
read Container_name2
mkdir $Container_name2
cd $Container_name2
pwd
echo "export Container2=$(pwd)" >> ~/.bash_profile
echo -e "\033[47;31m create to success Container2 \033[0m"
 
. ~/.bash_profile
결과
[fido@localhost script]$ ./container_name_read.sh
Enter Admin location WAS_BASE(full_name): /home/fido/MagicFIDO/tomcat9
Enter Admin location Container_name1: Admin
/home/fido/MagicFIDO/tomcat9/Admin
 create to success Container1
Enter Server location Container_name2: Server
/home/fido/MagicFIDO/tomcat9/Server
 create to success Container2
 
[fido@localhost script]$ cd /home/fido/MagicFIDO/tomcat9
[fido@localhost tomcat9]$ ls
Admin            LICENSE    RELEASE-NOTES  bin   logs     work
BUILDING.txt     NOTICE     RUNNING.txt    conf  temp
CONTRIBUTING.md  README.md  Server         lib   webapps
[fido@localhost tomcat9]$




 
 

기타
Bash_profile에 넣는 이름을 바꾸도록 하겠다.
현재는 Container1 Container2로 되어있는데, 원하는 이름으로 넣도록 하겠다.
그 밖에 알아두면 좋은 사항
 없음.

 

2. container_seperate_tomcat.sh 실행=> Container 분리 스크립트

톰캣의 엔진에 해당하는 Binlib 폴더는 공유

그 외의 conf, logs, temp, work, webapps 등은 인스턴스 별로 별도 존재

vi container_seperate_tomcat.sh
구현하고 싶은 내용 구현 아이디어 내기
Container 분리 (tomcat) Echo로 아래의 3개 위치가 맞게 설정되었는지 확인
CATALINA_HOME / Container1 / Container2
Y 입력시 컨테이너 분리 시작
N 입력시 쉘 스크립트 종료
쉘 스크립트 내용
#!/bin/bash
#~/.bash_profile 적용
echo "PS1=${PS1}"
source ~/.bash_profile
 
#Container1, Container2 출력
echo "CATALINA_HOME:$CATALINA_HOME"
echo "Container1:$Container1"
echo "Container2:$Container2"
 
# 컨테이너 분리 전 물어보기
echo "do you wanna seperate tomcat container? [y/n]"
read answer
 
case "$answer" in
'y')
cp -r $CATALINA_HOME/conf $Container1
cp -r $CATALINA_HOME/logs $Container1
cp -r $CATALINA_HOME/temp $Container1
cp -r $CATALINA_HOME/work $Container1
cp -r $CATALINA_HOME/webapps $Container1
 
cp -r $CATALINA_HOME/conf $Container2
cp -r $CATALINA_HOME/logs $Container2
cp -r $CATALINA_HOME/temp $Container2
cp -r $CATALINA_HOME/work $Container2
cp -r $CATALINA_HOME/webapps $Container2
;;
*)
exit ;;
esac
 
cd $Container1
pwd
ls
 
cd $Container2
pwd
ls
결과
[fido@localhost script]$ ./container_seperate_tomcat.sh
PS1=
CATALINA_HOME:/home/fido/MagicFIDO/tomcat9
Container1:/home/fido/MagicFIDO/tomcat9/Admin
Container2:/home/fido/MagicFIDO/tomcat9/Server
do you wanna seperate tomcat container? [y/n]
y
/home/fido/MagicFIDO/tomcat9/Admin
conf  logs  temp  webapps  work
/home/fido/MagicFIDO/tomcat9/Server
conf  logs  temp  webapps  work
기타
※ 주의 사항 : container 분리 스크립트 실행 후 반드시 아래와 같이 Container1과 2의 포트번호가 중복되지 않게 수정해야 한다.
$Container1/conf/server.xml
<Server port="8205" shutdown="SHUTDOWN">
<Connector port="8282" protocol="HTTP/1.1"
               connectionTimeout="99999"
               redirectPort="18444" />


$Container2/conf/server.xml

<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8181" protocol="HTTP/1.1"
               connectionTimeout="99999"
               redirectPort="18443" />
그 밖에 알아두면 좋은 사항
또한 redirePort는 각각다른 SSL을 사용할 경우 바꿔준다.
 
그 후 was 재시작을 해야하는데, container 분리를 통해 분리했으므로
Container1 container2startup shutdown 스크립트를 만들어야 한다.

 

3.  startup_c* 실행 => 컨테이너별 시작 스크립트

바로 log를 띄우면 더 잘 설치되었는지 확인할 수 있을 것 같아서, 로그를 볼 수 있게 수정해주었다.

$ vi startup_c1.sh $ vi startup_c2.sh
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container1
export SERVER_NAME=Admin
cd "${CATALINA_HOME}"/bin; ./startup.sh
cd "${CATALINA_BASE}"/logs; tail -f catalina.out
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container2
export SERVER_NAME=Server
cd $CATALINA_HOME/bin && ./startup.sh
cd "${CATALINA_BASE}"/logs && tail -f catalina.out
설명: Admin(container1) startup script이다. 설명: Server(container2) startup script이다.
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container1
export SERVER_NAME=Admin
cd "${CATALINA_HOME}"/bin; ./startup.sh
cd "${CATALINA_BASE}"/logs; tail -f catalina.out



#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container2
export SERVER_NAME=Server
cd "${CATALINA_HOME}"/bin; ./startup.sh
cd "${CATALINA_BASE}"/logs; tail -f catalina.out

실행 권한 주기
[fido@localhost bin]$ chmod +x startup_c*
실행 결과
[fido@localhost bin]$ ./startup_c1.sh
Using CATALINA_BASE:   /home/fido/MagicFIDO/tomcat9/Admin
Using CATALINA_HOME:   /home/fido/MagicFIDO/tomcat9
Using CATALINA_TMPDIR: /home/fido/MagicFIDO/tomcat9/Admin/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
Using CLASSPATH:       /home/fido/MagicFIDO/tomcat9/bin/bootstrap.jar:/home/fido/MagicFIDO/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
02-Sep-2021 20:32:21.360 정보 [main] org.apache.catalina.startup.HostConfig.deployDirectory 웹 애플리케이션 디렉토리 [/home/fido/MagicFIDO/tomcat9/webapps/docs]() 배치합니다.
실행결과
[fido@localhost bin]$ ./startup_c2.sh
Using CATALINA_BASE:   /home/fido/MagicFIDO/tomcat9/Server
Using CATALINA_HOME:   /home/fido/MagicFIDO/tomcat9
Using CATALINA_TMPDIR: /home/fido/MagicFIDO/tomcat9/Server/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
Using CLASSPATH:       /home/fido/MagicFIDO/tomcat9/bin/bootstrap.jar:/home/fido/MagicFIDO/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
 
$ vi shutdown_c1.sh $ vi shutdown_c2.sh
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container1
export SERVER_NAME=Admin
cd "${CATALINA_HOME}"/bin; ./shutdown.sh

 
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container2
export SERVER_NAME=Server
cd "${CATALINA_HOME}"/bin; ./shutdown.sh

설명: Admin(container1) shutdown script이다. 설명: Server(container2) shutdown script이다.
#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container1
export SERVER_NAME=Admin
cd "${CATALINA_HOME}"/bin; ./shutdown.sh



#!/bin/bash
export CATALINA_HOME=$CATALINA_HOME
export CATALINA_BASE=$Container2
export SERVER_NAME=Server
cd "${CATALINA_HOME}"/bin; ./shutdown.sh
실행 권한 주기
[fido@localhost bin]$ chmod +x shutdown_c*
실행 결과
[fido@localhost bin]$ ./shutdown_c1.sh
Using CATALINA_BASE:   /home/fido/MagicFIDO/tomcat9/Admin
Using CATALINA_HOME:   /home/fido/MagicFIDO/tomcat9
Using CATALINA_TMPDIR: /home/fido/MagicFIDO/tomcat9/Admin/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
Using CLASSPATH:       /home/fido/MagicFIDO/tomcat9/bin/bootstrap.jar:/home/fido/MagicFIDO/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[fido@localhost bin]$ ./shutdown_c2.sh
Using CATALINA_BASE:   /home/fido/MagicFIDO/tomcat9/Server
Using CATALINA_HOME:   /home/fido/MagicFIDO/tomcat9
Using CATALINA_TMPDIR: /home/fido/MagicFIDO/tomcat9/Server/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
Using CLASSPATH:       /home/fido/MagicFIDO/tomcat9/bin/bootstrap.jar:/home/fido/MagicFIDO/tomcat9/bin/tomcat-juli.jar
기타
Container1과 2의 경로는 아래와 같이 적용되어있다.

 

# Container 분리 쉘 스크립트로 분리한 Container1과 Container2

| Container 1

| Container 2

 

반응형

댓글