SSG

[Linux] Centos 7 Tomcat Multi Instance 설정 본문

Centos 7

[Linux] Centos 7 Tomcat Multi Instance 설정

하늘빛호수 2023. 2. 27. 16:15

1. 폴더 구조 설정

mkdir -pv usr/local/tomcat/engine

새로운 폴더 생성

 

mv usr/local/tomcat8/* usr/local/tomcat/engine

기존 Tomcat을 새로운 폴더의 engine 폴더로 이동

 

mkdir -pv usr/local/tomcat/instance1
mkdir -pv usr/local/tomcat/instance2

Tomcat Instance에 사용할 디렉토리를 생성

 

mkdir -pv usr/local/tomcat/instance1/bin
mkdir -pv usr/local/tomcat/instance2/bin

Tomcat Instance를 시작 및 종료하는 스크립트가 위치할 디렉토리를 생성

2. 시작 / 종료 스크립트 생성 및 수정

vi usr/local/tomcat/instance1/bin/start.sh
vi usr/local/tomcat/instance2/bin/start.sh

vi 편집기로 start.sh 생성 후 아래 내용 삽입

 

#!/bin/sh

export CATALINA_HOME=usr/local/tomcat/engine
export CATALINA_BASE=usr/local/tomcat/instance1

$CATALINA_HOME/bin/startup.sh

Tomcat Instance 시작 스크립트를 작성

Instance1에서 수정한 것 처럼 instance2도 같이 생성 및 수정

 

vi /app/tomcat9/instance1/bin/shutdown.sh
vi /app/tomcat9/instance2/bin/shutdown.sh

vi 편집기로 shutdown.sh 생성 후 아래 내용 삽입

 

#!/bin/sh

export CATALINA_HOME=usr/local/tomcat/engine
export CATALINA_BASE=usr/local/tomcat/instance1

$CATALINA_HOME/bin/shutdown.sh

Tomcat Instance 종료 스크립트를 작성

Instance1에서 수정한 것 처럼 instance2도 같이 생성 및 수정

 

3. Tomcat Instance server.xml 포트 수정

vi usr/local/tomcat/instance1/conf/server.xml
vi usr/local/tomcat/instance2/conf/server.xml

Tomcat Instance가 사용할 Port를 변경하기 위해 server.xml를 수정

자신이 원하는 포트로 수정

<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8105" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
....

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8180
    -->
    <Connector port="8180" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8143" />
....

    <!-- Define an AJP 1.3 Connector on port 8109 -->
    <Connector protocol="AJP/1.3"
               port="8109"
               redirectPort="8143" />
....

 

- Shutdown Port(8105) : Tomcat 종료 Port 
- Connector Port(8180) : Tomcat 접속 Port
- Redirect Port(8143) : SSL을 사용하는 요청이 들어오면 해당 Port로 Redirect 함
- AJP Port(8109) : AJP 관련 Port (Apache 연동 용도)

 

4. setenv.sh 생성 및 수정

vi usr/local/tomcat/instance1/bin/setenv.sh
vi usr/local/tomcat/instance2/bin/setenv.sh

Tomcat Instance가 사용할 ENV 파일인 setenv.sh 파일을 작성

사용할 Instance 디렉토리는 CATALINA_BASE를 수정

Instance1에서 수정한 것 처럼 instance2, instance3도 같이 수정

 

#!/bin/sh

#===========================================================
#Tomcat  Setting
#===========================================================
CATALINA_HOME=usr/local/tomcat/engine
CATALINA_BASE=usr/local/tomcat/instance1
JAVA_HOME=$(echo $(readlink -f /etc/alternatives/java) |  sed -e 's/\/bin\/java//g')
PATH=$PATH:$JAVA_HOME/bin:/bin:/sbin
LOG_DIR=$CATALINA_BASE/logs
export JAVA_HOME PATH CATALINA_HOME CATALINA_BASE LOG_DIR


#===========================================================
#JVM Memory Setting
#===========================================================
CATALINA_OPTS="-server"
CATALINA_OPTS="${CATALINA_OPTS} -Xms256m"
CATALINA_OPTS="${CATALINA_OPTS} -Xmx256m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MetaspaceSize=128m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxMetaspaceSize=128m"


#===========================================================
#GC, Heapdump Setting
#===========================================================
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseG1GC"
CATALINA_OPTS="${CATALINA_OPTS} -verbose:gc"
CATALINA_OPTS="${CATALINA_OPTS} -Xloggc:${LOG_DIR}/gc.log_$(date +%Y%m%d%H%M%S)"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDetails"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCTimeStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDateStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"
CATALINA_OPTS="${CATALINA_OPTS} -XX:HeapDumpPath=${LOG_DIR}/java_pid.hprof"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintAdaptiveSizePolicy"

 

usr/local/tomcat/instance1/bin/start.sh
usr/local/tomcat/instance2/bin/start.sh

Tomcat Instance 기동

 

5. 작동 확인

ss -atnlp |grep java

Tomcat Instance별 포트가 LISTEN 상태인지 확인

LISTEN 0      1      [::ffff:127.0.0.1]:8105            *:*    users:(("java",pid=21022,fd=69))
LISTEN 0      1      [::ffff:127.0.0.1]:8205            *:*    users:(("java",pid=21114,fd=69))
LISTEN 0      100                 [::1]:8109         [::]:*    users:(("java",pid=21022,fd=62))
LISTEN 0      100                 [::1]:8209         [::]:*    users:(("java",pid=21114,fd=62))
LISTEN 0      100                     *:8180            *:*    users:(("java",pid=21022,fd=59))
LISTEN 0      100                     *:8280            *:*    users:(("java",pid=21114,fd=59))

 

curl --HEAD localhost:8180

Tomcat Instance 정상 기동을 확인하기 위해 curl 명령어로 확인

[root@localhost ~]# curl --HEAD localhost:8180
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 29 Oct 2022 23:55:37 GMT

[root@localhost ~]# curl --HEAD localhost:8280
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 29 Oct 2022 23:55:39 GMT

 

6. 방화벽 설정

firewall-cmd --permanent --zone=public --add-port=8180/tcp
firewall-cmd --permanent --zone=public --add-port=8280/tcp

usr/local/tomcat/instence1/conf/server.xml에서 설정했던 포트 열기

firewall-cmd --reload

방화벽 재시작

firewall-cmd --zone=public --list-all

방화벽 적용 확인

 

7. Oracle VMware 포트 포워딩 설정

설정

포트 포워딩

포트 포워딩 추가 후 호스트 포트 게스트 포트 열어주기

 

참조 : 

https://lilo.tistory.com/115

 

WAS) Tomcat Multi Instance (2) - 멀티 인스턴스 구성

INTRO Tomcat Multi Instance를 구성하는 과정에 대한 내용을 공유드립니다. Apache Tomcat Multi Instance에 대한 자세한 내용은 아래의 글을 참고하기 바랍니다. WAS) Tomcat Multi Instance (1) - 구조 및 장단점 Apache T

lilo.tistory.com