Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

Keviny Blog

Systemd 를 이용한 Tomcat Multi Instances 환경 구성 본문

시스템 관리자

Systemd 를 이용한 Tomcat Multi Instances 환경 구성

Keviny 2019. 12. 4. 15:45

아래는 내가 tomcat 서비스를 systemd 에 서비스로 등록할 때 참고했던 사이트에서 발췌한 내용인데,

위 내용 중 tomcat.service 를 작성하는 부분에서 multi instance 를 위해 수정을 해야 한다. (tomcat 은 설치되어 있고, tomcat 유저는 생성해두었다고 가정한다)

# Systemd unit file for tomcat

[Unit]

Description=Apache Tomcat Web Application Container

After=syslog.target network.target

 

[Service]

Type=forking

Environment="JAVA_HOME=/usr/java/jdk-10.0.1/"

Environment="CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid"

Environment="CATALINA_HOME=/usr/local/tomcat"

Environment="CATALINA_BASE=/usr/local/tomcat"

Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

ExecStart=/usr/local/tomcat/bin/startup.sh

ExecStop=/usr/local/tomcat/bin/shutdown.sh

User=tomcat

Group=tomcat

UMask=0007

RestartSec=10

Restart=always

 

[Install]

WantedBy=multi-user.target

#ref. https://suwoni-codelab.com/linux/2018/05/21/tomcat-installation/

 

tomcat 의 guide 문서를 보면 CATALINA_BASE 부분이 각 Instance 의 HOME 이 되는 부분이다.

Optionally, Tomcat may be configured for multiple instances by defining $CATALINA_BASE for each instance. If multiple instances are not configured, $CATALINA_BASE is the same as $CATALINA_HOME.

#ref. https://tomcat.apache.org/tomcat-8.0-doc/introduction.html

 

따라서 CATALINA_BASE 를 각 instance 에 해당하는 root 폴더로 지정해주고, [conf, logs, temp, webapp, work] 폴더들을 CATALINA_HOME 에서 복사해준다. 본인 상황에 따라 폴더 path 는 다르겠지만, 아래와 같은 구조면 OK.

전체 디렉터리 구조를 살펴보면 아래와 같습니다.

$ tree -L 2 

├── tomcat1 
│   ├── conf 
│   ├── logs 
│   ├── temp 
│   ├── webapps 
│   └── work 
├── tomcat2 
│   ├── conf 
│   ├── logs 
│   ├── temp 
│   ├── webapps 
│   └── work 
└── tomcat_main 
        ├── bin 
        └── lib

#ref. https://madplay.github.io/post/multiple-tomcat-instances

 

CATALINA_BASE를 설정했다면 각 환경변수(Environment) 값들도 상황에 맡겨 변경해준다.

나의 경우는 완성된 하나의 Service 의 Unit File 은 아래와 같았다.

# Systemd unit file for mbs_service
[Unit]
Description=SBS MBS Service Tomcat
After=syslog.target network.target

[Service]
Type=forking

Environment="JAVA_HOME=/usr/local/lib64/jdk1.7.0_80"
Environment="CATALINA_PID=/home/tomcat/instances/mbs_service/tomcat.pid"
Environment="CATALINA_HOME=/usr/local/lib/apache-tomcat-8.0.52"
Environment="CATALINA_BASE=/home/tomcat/instances/mbs_service"

ExecStart=/usr/local/lib/apache-tomcat-8.0.52/bin/startup.sh
ExecStop=/usr/local/lib/apache-tomcat-8.0.52/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007

[Install]
WantedBy=multi-user.target

[Service] 섹션의 ...

1. CATALINA_OPTS 및 JAVA_OPTS 는 요구사항이 없어서 삭제

2. Restart 관련 내용은 필요에 의해 서비스 stop 시 오히려 문제를 일으킬 수 있어 삭제

 

이후 systemctl 로 enable 및 start, stop 등 명령어가 정상 동작 함을 확인하였다.

끝.