본문 바로가기
리눅스

리눅스 설치부터 프로젝트 배포까지(4) - mod_jk 연동 및 로드밸런싱 설정, 깃 연동

by 진짠 2024. 8. 9.
728x90

점검

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 받은 소스로 프로젝트 적용이 가능합니다.

 

이러한 과정들을 쉘 스크립트로 만들어서 단순화시키는 방법이 있습니다.

그것은 기회가 된다면 다음에 포스팅해보도록 하겠습니다.

 

 

728x90

댓글