기본적으로 멀티인스턴스(Multi Instance) 를 사용한다는 것은 톰캣에서 공유 가능한 엔진부분은 공유하여 사용하고, 설정파일과 같은 부분은 별도로 생성하여 하나의 톰캣 엔진으로 여러개의 인스턴스를 띄우는 것이다.
톰캣의 Engine부분: bin, lib
톰캣의 Instance 부분: conf, logs, temp, work, webapps
여러개의 인스턴스를 띄우기 위해서는 "톰캣 Instance" 부분을 복사하여 사용해야 합니다.
1. 우선 멀티 인스턴스를 사용하기 위해 필요한 구조를 복사합니다.
저같은 경우에는 /home/app/tomcat8.5/instances 라는 디렉토리를 생성하고 하위에
instance1, instance2 디렉토리를 생성 하였습니다.
cp -a conf /home/app/tomcat8.5/instances/instance1
cp -a webapps /home/app/tomcat8.5/instances/instance1
mkdir /home/app/tomcat8.5/instances/instance1/logs
mkdir /home/app/tomcat8.5/instances/instance1/work
chown "소유자계정":"소유그룹" -R "권한부여할 디렉토리"
cp -a conf /home/app/tomcat8.5/instances/instance2
cp -a webapps /home/app/tomcat8.5/instances/instance2
mkdir /home/app/tomcat8.5/instances/instance2/logs
mkdir /home/app/tomcat8.5/instances/instance2/work
chown "소유자계정":"소유그룹" -R "권한부여할 디렉토리"
2. 각 인스턴스의 conf 디렉토리 하위에 server.xml을 수정합니다.
각 인스턴스가 사용할 포트를 변경하기 위함입니다.
- Shutdown port: 이 포트는 톰캣을 셧다운하는데 사용되어 집니다. shutdown.sh 스크립트가 호출되면 이 포트로 시그널을 보냅니다.
- Connector port: 이 포트는 외부 접속시 접속할 포트 입니다. http well known 포트는 80이죠!
- Ajp port: 이 포트는 Apache와 같은 웹서버가 Tomcat 과 커뮤니케이션을 위해서 사용되어 집니다.
- Redirect port: SSL 접속 요청이 들어올경우에 Catalina 는 자동적으로 이 포트로 redirect 합니다.
- 당연하지만 각 톰캣 인스턴스는 포트가 달라야 합니다.
<!-- SHUTDOWN 포트 -->
<Server port="8105" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- http접속 포트 -->
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="81443" />
<!-- AJP 포트 -->
<Connector port="8109" protocol="AJP/1.3" redirectPort="81443" />
3. start, shutdown 쉘스크립트 작성
인스턴스를 나누었으니 당연히 인스턴스를 올리고 내리는 쉘 스크립트 또한 별도 설정이 필요합니다.
export CATALINA_HOME=/home/centos/app/tomcat8.5
export CATALINA_BASE=/home/centos/app/tomcat8.5/instances/instance1
./startup.sh
다른 옵션들은 별도로 검색하여 사용하시길 바랍니다.
CATALINA_BASE를 인스턴스 경로로 잡아주고 원래 톰캣엔진의 서버 시작 스크립트인 startup.sh를 실행해줍니다.
- instance2번인경우 CATALINA_BASE 에 instance2를 넣으면 됩니다.
- shutdown작성시에는 하단에 ./startup.sh 만 shutdown.sh로 변경하면 됩니다.
- 경로를 ./로 설정하였으니 해당 쉘스크립트 파일은 톰캣 기본 bin 경로에 startup.sh와 같이 위치해야 합니다.