리눅스 설치부터 프로젝트 배포까지(4) - mod_jk 연동 및 로드밸런싱 설정, 깃 연동
점검
1.JAVA설치
2.TOMCAT 설치
3.프로젝트 배포
4.APACHE 설치
5.MOD_JK 연동
6.WEB, WAS 분리하여 프로젝트 연동 확인
7.깃 연동
4편을 포스팅하는데 1년이라는 시간이 흘렀다. 벌써 1년이라는 말이 확 와닿는다. 미리 말씀드리지만 이전편보다 조금, 어쩌면 훨씬 불친절한 설명이 될 것 같다. 직접 만져가며 포스팅을 하던 1~3편과는 다르게 경험에 의존해서 하는 포스팅이기 때문이다. 보충 설명을 쓸 수 있는 기회가 나중에 있다면 좋겠다.
mod_jk 연동
mod_jk는 아파치 웹 서버와 톰캣을 연결하여 정적 콘텐츠를 처리하는 아파치 웹 서버와 동적 콘텐츠를 처리하는 톰캣 애플리케이션 서버를 연동하는 모듈이다.
was 서버에서 둘 다 처리할 수도 있지만 부하를 줄이기 위해서 분리를 했다.
mod_jk를 설치하기 위해선
$ sudo apt-get install libapache2-mod-jk
명령어를 입력한다.
그 다음은 mod_jk 환경을 구성한다.
mod_jk 설치경로에서 workers.properties 파일을 생성한다.
$ sudo nano <설치경로>/workers.properties
톰캣 서버와의 통신을 담당하는 곳으로써 톰캣이 실행되는 호스트 및 포트를 지정한다.
worker.list=worker1
worker.worker1 .type=AJP13
worker.worker1 .host=<톰캣 호스트>
worker.worker1 .port=<톰캣 포트>
그 다음 mod_jk의 설정파일인 jk.conf 파일을 생성해야 한다.
이 파일은 아파치에서 mod_jk를 사용할 수 있도록 하기 위해 만드는 것이다.
그러므로 아파치의 설치경로에서 파일을 생성하고 진행해야 한다.
$ sudo nano <설치경로>/jk.conf
JkWorkersFile <mod_jk 경로>/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkMount /* worker1
workers.properties 경로 명시 및 로그 설정이다.
마지막 JkMount는 모든 요청을 worker1(톰캣)로 전달하겠다는 것이다.
그 다음 톰캣에서 server.xml에 ajp(아파치-톰캣 연결 프로토콜) 연결을 추가해줘야 한다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" ... />
HTTP1.1 커넥트하는 부분에 다음과 같이 추가해준다.
로드 밸런싱 설정(선택)
서버로 들어오는 요청을 분산시켜 과도한 트래픽을 분산시키는 방법이다.
하나의 프로젝트에 여러개의 톰캣 서버를 만들어 요청을 분산시킨다.
대규모 요청에 더욱 안전하고 고가용성을 유지할 수 있게 된다.
worker.list=loadbalancer
# First Tomcat instance (worker1)
worker.worker1.type=AJP13
worker.worker1.host=<ip 주소>
# 첫 번째 Tomcat 서버의 IP 주소 또는 호스트 이름
worker.worker1.port=<포트번호>
worker.worker1.lbfactor=1
worker.worker1.cachesize=10
# Second Tomcat instance (worker2)
worker.worker2.type=AJP13
worker.worker2.host=<ip 주소>
# 두 번째 Tomcat 서버의 IP 주소 또는 호스트 이름
worker.worker2.port=<포트번호>
worker.worker2.lbfactor=1
worker.worker2.cachesize=10
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker1, worker2 를 만들어 두개의 톰캣에서 오는 요청을 전달받는다.
lbfactor는 부하 계수로서 수치가 높을 수록 해당 톰캣 서버에 많은 요청이 오게 된다.
두개의 톰캣서버에서 server.xml 파일에 설정한 포트번호를 맞춰주어야 한다.
<Connector port="8080" protocol="HTTP/1.1" ... />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" ... />
예제와 같다면 8009로 맞춘다.
당연히 jk.conf 파일도 수정해줘야 한다.
...
JkMount /* loadbalencer
딴건 동일하고 워커명만 수정해준다.
실행
설정이 끝났으면 아파치와 톰캣을 재실행시켜준다.
$ sudo systemctl restart apache2
$ sudo systemctl restart tomcat9 # 각 톰캣 서버에서 실행
명령어가 혹시 안될수도 있는데 그렇다면 각 설치경로에서 실행 명령어를 찾아 실행시켜준다.(이전 설명을 따라왔다면 알고있을것..)
깃 연동
서버 구성은 끝났지만 개발자들이 작업을 하면 수정사항에 대한 배포 환경을 구축해야 한다.
git을 연동한 뒤 하나의 브랜치를 바라보고 해당 브랜치의 수정사항이 있으면 서버에 배포하는 쉘 스크립트를 간단하게 만들었다.
$ sudo apt-get install git
다음은 깃 저장소를 생성해줍니다. 원격 저장소에서 소스를 받아오기 위한 곳으로써 프로젝트 경로/git_src 폴더를 생성한 뒤 거기서
$ git init
명령어를 통해 초기화를 진행해줍니다.
그리고 원격 저장소와 연동해줍니다.
$ git remote add origin <원격저장소의 url>
다음은 프로젝트를 빌드하기 위한 프로그램을 설치합니다.
저는 maven을 사용했기 때문에 이것을 설치했습니다.
$ sudo apt install maven
$ mvn -version
받았다면 잘 설치되었는지 버전을 확인해줍니다.
이제 배포만 하면 됩니다. git_src 경로로 갑니다.
$ git pull
$ mvn package
pull을 받아주고 패키징을 합니다. 파일을 받아왔으니
$ rm -rf ../webapps/*
$ cp -rf target/<프로젝트 SNAPSHOT>/* ../webapps/*
webapps 폴더에 복사를 해줍니다.
그리고 톰캣 재시작을 해주면 깃에서 pull 받은 소스로 프로젝트 적용이 가능합니다.
이러한 과정들을 쉘 스크립트로 만들어서 단순화시키는 방법이 있습니다.
그것은 기회가 된다면 다음에 포스팅해보도록 하겠습니다.