본문 바로가기

OS/Linux

mod_jk를 활용하여 lb설정 하기

mod_jk를 활용하여 LaodBalancer를 지정해보겠습니다.

mod_jk를 활용하는 방법은 이 글을 참고해주세요.

2024.04.03 - [OS/Linux] - Ubuntu22.04) apache, tomcat 설치 및 연동 (mod_jk)

 

Ubuntu22.04) apache, tomcat 설치 및 연동 (mod_jk)

이전 글은 centos7에서 연동하는 방법을 알아보았는데요! 이번에는 ubuntu 22.04에 연동하는 방법을 알아보겠습니다. ubuntu22.04에는 centos7과는 다르게 패키지로만 설치하여 빠르게 설정하겠습니다. mod

engineer1.tistory.com

2024.04.03 - [OS/Linux] - centos7) apache, tomcat 설치 및 연동 (mod_jk)

 

centos7) apache, tomcat 설치 및 연동 (mod_jk)

apache와 tomcat을 연동하는 방법 중 대표적인 방법은 크게 mod_jk와 mod_proxy가 있습니다. mod_jk moad_jk는 apache와 tomcat간의 연동에 특화되어 있고, 로드 밸런싱과 세션 관련 설정을 제공합니다. workers.prop

engineer1.tistory.com

 

 

mod_jk를 설정할 때 apache의 workers.properties와 httpd.conf(000-default.conf), tomcat의 server.xml에 설정을 해주었습니다.

전에는 workers.propertices에는 하나의 worker만 worker.list로 지정하여 연동하였는데

list에 lb를 지정하고 트래픽을 ip와 port를 사용하여 원하는 apache서버로 로드밸런싱이 가능합니다.

또한 mod_jk의 기능 중 jkstatus를 사용하여 로드밸런싱 테스트도 직관적으로 할 수 있습니다.

ubuntu 22.04와 centos 7을 기준으로 root계정을 사용하여 구성해보겠습니다.

 

1. workers.properties 설정

worker.list에 하나의 worker만 등록되어 있지만

worker의 타입을 lb로 지정하여 설정이 가능합니다.

worker.list=load_balancer # worker list등록
worker.load_balancer.type=lb # load_balancer의 타입을 lb로 지정
worker.load_balancer.balance_workers=worker1,worker2,worker3
worker.load_balancer.sticky_session=true # sticky session 지정

worker.worker1.port=18009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1 # 밸런싱 비율 설정

worker.worker2.port=28009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

worker.worker3.port=38009
worker.worker3.host=localhost
worker.worker3.type=ajp13
worker.worker3.lbfactor=1

 

listen 포트를 같게하셔도 무방하고, hosts에 지정된 alias를 사용하거나 ip를 지정하여 다른 ip의 apahce서버와도 구성이 가능합니다.

각 설정은 운영 환경에 따라 바꾸시면 되고, 직관적인 테스트를 위해 worker를 3까지 등록하겠습니다.

 

추가적으로 jkstatus를 사용하고 싶으시다면

worker.list=load_balancer,jkstatus # lb와 jkstatus 지정
worker.load_balancer.type=lb
worker.load_balancer.balance_workers=worker1,worker2,worker3
worker.load_balancer.sticky_session=true

worker.worker1.port=18009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.worker2.port=28009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

worker.worker3.port=38009
worker.worker3.host=localhost
worker.worker3.type=ajp13
worker.worker3.lbfactor=1

worker.jkstatus.type=status  # 타입 설정

와 같이 설정해주시면 됩니다.

 

2. httpd.conf(000-default.conf)

JkMount를 설정할 때 각 url에 모든 종류의 확장자에 따라 로드밸런싱이 가능하고

특정 url을 지정하여 l7에서의 로드밸런싱이 가능합니다.

이 설정 또한 운영중인 환경에 맞춰 적절한 설정이 필요하고 테스트 과정에서는 직관적으로 설정하겠습니다.

 

먼저 JkMount에 단일 worker만 지정되어 있으므로 바꿔줍니다.

그리고 추가적으로 jkstatus의 설정도 해줍니다.

# centos 7

LoadModule jk_module modules/mod_jk.so # 모듈 활성화
<IfModule mod_jk.c> # 모듈 설정
JkWorkersFile conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H :%M :%S %Y]"
JkMount /* load_balancer # workers.properties에 등록된 lb 이름 지정
JkMount /jkmanager jkstatus # <ip>/jkmanager 경로에 jkstatus 연결
    <Location /jkmanager/> # mod_jk의 내장 모듈 사용
        JkMount jkstatus # workers.list에 등록 된 status 이름
        Order deny,allow 
        Deny from all
        Allow from 127.0.0.1 # 밑에 추가로 접근 가능한 ip 지정 가능
    </Location>
</IfModule>
# ubuntu 22.04

DocumentRoot /var/liv/tomcat9/webapps/ROOT
JkMount /* load_balancer
JkMount /jkmanager jkstatus

 

3. server.xml 설정

만약 lb의 workers의 포트를 모두 다르게 하였다면, server.xml에 connector의 포트도 업데이트 해야합니다.

    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               port="18009"
               redirectPort="18443"
               maxParameterCount="1000"
               secretRequired="false"
               />

    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               port="28009"
               redirectPort="28443"
               maxParameterCount="1000"
               secretRequired="false"
               />

    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               port="38009"
               redirectPort="38443"
               maxParameterCount="1000"
               secretRequired="false"
               />

 

4. status 확인

localhost/jkmanager로 접속하시면 lb의 상태를 확인할 수 있는 status 페이지가 출력됩니다.

jkstatus 화면

 

이상 mod_jk를 이용하여 lb설정과 status 설정을 마치겠습니다.

감사합니다.