tomcat multi instance 구성
최근에 간단하게 tomcat을 port로만도 분리해보고(도메인 분리도있음) webapps2를 만들어서 분리도 해보고 instance를 만들어서 admin 서버와 그냥 서버도 분리해보았습니다.
간단하게 port만 분리하는 것은 Service name만 추가하면 되기 때문에 패스하고 webapps2와 instance 분리에 대해 서술해보겠습니다. 먼저 하나의 tomcat을 여러 개의 인스턴스로 구성해보겠습니다.
| 하나의 tomcat 여러 개의 인스턴스로 구성
Tomcat7은 multi instance라는 기능을 가지고 있어, 하나의 엔진에 다수의 instance를 구동이 가능 합니다.
하나의 tomcat을 여러 개의 인스턴스로 구성하는 것은 하나의 톰캣을 여러개의 복사본을 만들어 사용하는것 과 비슷한데 기본 모듈은 공유해서 사용하는 점에서 다르다.
Tomcat은 엔진과 인스턴스(instance)로 나뉩니다.
- Tomcat engine 부분: bin, lib
- Tomcat instance 부분: conf, logs, temp, work, webapps
사실 tomcat 엔진은 단독으로 구동되지 않고 자바 소프트웨어를 실행시켜주는 역할만하고 여기서 자바 소프트웨어라는 것이 바로 tomcat 인스턴스 입니다. Tomcat 엔진이 자바 소프트웨어를 실행시킨다는 말은 결국 jvm을 작동하는 것입니다. 따라서 tomcat 인스턴스는 jvm이 구동된다는 것이며 멀티 instance는 여러 개의 tomcat jvm을 구동한다는 것을 의미합니다.
D:\tomcat\apache-tomcat-7.0.107인데
D:\tomcat\tomcat7으로 명칭을 변경하고 이것이 기본적인 톰캣 위치이다.
그림설명 : apache-tomcat-7.0.107 -> tomcat7
그 아래에 AdminServer와 FIDOServer로 인스턴스를 나눠서 관리하려고 한다.
1) 인스턴스 폴더 생성
AdminServer와 FIDOServer
2) 각 인스턴스 폴더에 conf, logs, temp, webapps/ROOT 복사
예) D:\tomcat\tomcat7\AdminServer
(work도 옮겨주세요)
Webapps 폴더 만들고 ROOT 복사
예) D:\tomcat\tomcat7\FIDOServer\webapps\ROOT
예) D:\tomcat\tomcat7\FIDOServer
3) Server.xml 파일 수정
| AdminServer
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1"
connectionTimeout="99999"
redirectPort="8443" />
| FIDOServer
<Server port="8205" shutdown="SHUTDOWN">
<Connector port="8280" protocol="HTTP/1.1"
connectionTimeout="99999"
redirectPort="8443" />
4) startup, shutdown 스크립트 생성
startup.bat과 shutdown.bat이 있는 bin폴더로 이동합니다.
예) D:\tomcat\tomcat7\bin
먼저 FIDOServer의 startup, shutdown 스크립트를 생성하도록 하겠습니다.
기존 startup.bat을 복사합니다. 이름은 구분하게 쉽게 startup_FIDOServer.bat이라고 바꿔주겠습니다.
Startup_FIDOServer를 메모장 혹은 notepad로 열어줍니다.
setlocal밑에 아래와 같이 추가해줍니다.
set "CATALINA_HOME=D:\tomcat\tomcat7"
set "CATALINA_BASE=D:\tomcat\tomcat7\FIDOServer"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181"
set "SERVER_NAME=FIDOServer"
다음으로는 shutdown 스크립트를 생성해보도록 하겠습니다.
마찬가지로 기존의 shutdown.bat을 복사하 후 shutdown_FIDOServer.bat으로 이름바꿔주었습니다.
그 다음 notepad혹은 메모장으로 열어 아래와 같이 수정해주었습니다.
set "CATALINA_HOME=D:\tomcat\tomcat7"
set "CATALINA_BASE=D:\tomcat\tomcat7\FIDOServer"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181"
set "SERVER_NAME=FIDOServer"
AdminServer의 startup, shutdown 스크립트로 동일하게 기존 startup.bat과 shutdown.bat을 복사 한 후 아래와 같이 수정해주면 됩니다.
l startup_admin.bat
set "CATALINA_HOME=D:\tomcat\tomcat7"
set "CATALINA_BASE=D:\tomcat\tomcat7\AdminServer"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181"
set "SERVER_NAME=AdminServer"
l shutdown_admin.bat
set "CATALINA_HOME=D:\tomcat\tomcat7"
set "CATALINA_BASE=D:\tomcat\tomcat7\AdminServer"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181"
set "SERVER_NAME=AdminServer"
5) startup 스크립트 실행 후 동작 확인
…\tomcat7\bin으로 이동해서 만든 startup 스크립트를 실행해줍니다.
startup_admin.bat
startup_FIDOServer.bat
위에서 admin같은 경우에는 포트번호를 8180 FIDOServer는 포트번호를 8280을 했는데 확인해보겠습니다!
l AdminServer
http://localhost:8180/
l FIDOServer
http://localhost:8280/
종료할 때는 기존에 만들어 놓은 shutdown_admin.bat과 shutdown_FIDOServer.bat을 이용해서 종료하시는 것 아시겠죠?
[총정리]
공통으로 사용하는 bin, lib
그리고 bin 폴더로 가서 각각의 startup과 shutdown 스크립트를 만든다.
instance 별로 conf,logs, temp, webapps, work를 둔다.
| admin
| Server
참고:
https://csslab.tistory.com/124
| 하나의 IP 주소를 여러 포트로 나누기(webapps2 만들기)
1) Tomcat 밑에 webapp2 폴더 만들기
예) D:\tomcat\apache-tomcat-7.0.107\webapps2
2) 기존 webapps ROOT 폴더 webapps2에 복사하기
예) D:\tomcat\apache-tomcat-7.0.107\webapps\ROOT
3) …./conf/server.xml 수정
예) D:\tomcat\apache-tomcat-7.0.107\conf\server.xml
근데 SSL부분은 제가 보안을 위해서 넣은거니 빼시거나 주석 처리하시면됩니다. 아래와 같이 SSL 설정도 하고 싶다고 하시면 jks파일과 pem파일등 SSL관련 파일들도 가지고 계셔야 합니다.
<Service name="Catalina2"> <Connector port="9090" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" /> <Connector SSLEnabled="true" URIEncoding="UTF-8" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA" clientAuth="false" keystoreFile="D:\tomcat\apache-tomcat-7.0.107\seulgi.fido.com.jks" keystorePass="1q2w3e4r" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" sslProtocol="SSL"/> <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />--> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="D:\tomcat\apache-tomcat-7.0.107\webapps2" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> |
appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며, 기본적으로 보안과 context의 통일적인 적용을 이유로 컨텍스트의 루트는 ROOT 디렉토리 밑이 됩니다.
4) Was 종료 후 재시작(종료 되어있었다면 시작)
Cmd 창 실행 tomcat bin 파일로 이동 예) D:\tomcat\apache-tomcat-7.0.107\bin
(만약 환경변수에 bin 파일 등록 하셨으면 이동 안하셔도 됩니다)
shutdown.bat(종료) start.bat(시작)
5) Tomcat 확인
예) http://localhost:9090/
참고: https://www.auctionpro.co.kr/?p=1276
linux tomcat 9 컨테이너 자동스크립트를 원하시는 분들은 아래 링크를 클릭해주세요~
https://seul96.tistory.com/313