Ⅰ. mod_jk 란?
Apache 웹 서버와 Tomcat 웹 어플리케이션 서버 간의 연결을 지원하는 Apache 모듈 중 하나로 아파치 웹 서버가 정적 콘텐츠를 처리하고, 동적 콘텐츠는 Tomcat과 같은 Java 웹 어플리케이션 서버가 처리하는 경우, 이 둘 간의 통신을 담당하는 중요한 역할을 합니다.
Ⅱ. mod_jk의 주요 특징 및 기능:
1) AJP 프로토콜 지원: mod_jk는 Apache JServ Protocol (AJP)을 사용하여 Apache와 Tomcat 사이의 효율적인 통신을 제공합니다. AJP는 HTTP보다 더 가볍고 효율적이며, Java 애플리케이션 서버와 웹 서버 간의 통신에 특화되어 있습니다.
2) 로드 밸런싱: mod_jk는 여러 Tomcat 인스턴스 간에 로드 밸런싱을 수행할 수 있습니다. 이를 통해 트래픽을 분산시켜 서버의 성능과 가용성을 향상시킬 수 있습니다.
3) 자동 재시작 및 실패 감지: Apache와 Tomcat 간의 연결이 끊어지거나 Tomcat 서버가 다운된 경우, mod_jk는 이를 감지하고 자동으로 재시작하려고 시도합니다. 이를 통해 서비스의 신뢰성을 유지할 수 있습니다.
4) 동적 컨텐츠 지원: 정적 콘텐츠는 Apache에서 처리되고, 동적 콘텐츠는 Tomcat에서 처리되므로, mod_jk는 두 서버 간에 원활한 통신을 제공하여 사용자에게 투명한 서비스를 제공합니다.
Ⅲ. mod_jk의 구성
Apache 설정 파일 (httpd.conf 또는 그와 유사한 파일)에 필요한 설정을 추가하여 이루어집니다. 보통은 다음과 같은 형태를 가지고 있습니다:
LoadModule jk_module modules/mod_jk.so JkWorkersFile /path/to/workers.properties JkLogFile /path/to/mod_jk.log JkLogLevel info |
Ⅳ. workers.properties 란?
workers.properties 파일은 Apache mod_jk 모듈에서 사용되는 파일로, Apache 웹 서버와 연결된 Tomcat 웹 어플리케이션 서버의 구성을 정의합니다. 이 파일은 Tomcat으로의 요청을 어떻게 전달할지를 결정하고, 로드 밸런싱, 재시작 등의 동작을 설정합니다.
Ⅴ. workers.properties 예시
# worker1 정의 및 프로토콜, Tomcat 서버 지정
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
# worker2 정의 및 프로토콜, Tomcat 서버 지정
worker.list=worker2
worker.worker2.type=ajp13
worker.worker2.host=localhost
worker.worker2.port=8010
# 로드 밸런서 설정
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1, worker2
worker.loadbalancer.sticky_session=true
* 기본 옵션 설정
worker.list: 사용할 워커(worker)의 리스트를 정의합니다.
worker.worker1.type: 사용할 프로토콜을 지정합니다. 여기서는 AJP 1.3을 사용하도록 지정됨.
worker.worker1.host 및 worker.worker1.port: Apache가 통신할 Tomcat 서버의 호스트와 포트를 설정합니다.
worker.loadbalancer: 로드 밸런싱을 위한 설정입니다. balance_workers에는 로드 밸런싱에 참여할 워커들을 나열하며, sticky_session은 세션을 유지할지 여부를 나타냅니다.
* 추가 옵션 설정
참고사이트 : Apache Tomcat 커넥터 - 참조 안내서(1.2.49) - workers.properties 구성
옵션명 | 기본값 | 설명 |
host | localhost | 백엔드 Tomcat 인스턴스의 호스트 이름 또는 IP 주소입니다. 원격 Tomcat은 다음을 수행해야 합니다. AJP13 프로토콜 스택을 지원합니다. 호스트 이름에는 포트 번호가 있을 수 있습니다 콜론(':') 문자로 구분됩니다. |
port | 8009 | 정의된 프로토콜 요청을 수신 대기하는 원격 Tomcat 인스턴스의 포트 번호입니다. 기본값은 작업자 유형에 따라 다릅니다. ajp13 작업자의 경우 기본 포트는 8009이고 ajp14 유형의 작업자의 경우 해당 값은 8011입니다. |
source | - | 연결 원본(발신 주소)에 사용되는 이름 또는 IP 주소입니다. 멀티홈 호스트에서만 사용해야 합니다.이 기능은 실험적이며 jk 1.2.41에 추가되었습니다. |
socket_timeout | 0 | JK와 원격 호스트 간의 통신 채널에 사용되는 소켓 제한시간(초)입니다. 원격 호스트가 지정된 제한 시간 내에 응답하지 않으면 JK는 오류를 생성합니다. 다시 시도하십시오. 0(기본값)으로 설정하면 JK는 무한 시간 동안 대기합니다 모든 소켓 작업에서. |
socket_connect_timeout | socket_timeout*1000 | JK와 원격 호스트 간의 통신 채널에 사용되는 소켓 연결 제한시간(밀리초)입니다. 원격 호스트가 지정된 제한 시간 내에 응답하지 않으면 JK는 오류를 생성합니다. 다시 시도하십시오.초 단위와 밀리초 단위입니다. 따라서 절대적인 용어로 기본값은 다음과 같습니다. 같음 . socket_timeoutsocket_connect_timeoutsocket_connect_timeoutsocket_timeout 이 기능은 jk 1.2.27에 추가되었습니다. |
socket_keepalive | false | 이 지시문은 웹 서버 사이에 방화벽이 있을 때 사용해야 합니다 비활성 연결을 삭제하는 경향이 있는 Tomcat 엔진. 이 플래그는 운영 체제에 알려줍니다. 비활성 연결에서 메시지를 보내려면(간격은 글로벌 OS 설정에 따라 다름, 일반적으로 120분)이므로 방화벽이 비활성 연결을 차단하지 못하도록 합니다. keepalive를 사용하려면 이 속성 값을 true로 설정합니다. KEEP_ALIVE방화벽이 비활성 연결을 차단할 때의 문제는 때때로 웹 서버나 Tomcat이 없다는 것입니다. 컷에 대한 정보가 있는데 처리할 수 없습니다. |
ping_mode | - | 이 플래그는 설정된 조건을 결정합니다. 연결이 여전히 작동하는지 확인하기 위해 검색됩니다. 프로브는 빈 AJP13 패킷(CPing)으로 수행되며 적절한 답변(CPong)을 받을 것으로 기대합니다. 약간의 시간 초과.플래그의 값은 다음의 조합일 수 있습니다 flags (여러 값이 구분 기호 없이 결합됨): C(연결): 설정하면 연결이 백엔드에 연결한 후 한 번 조사합니다. 시간 초과 로 설정할 수 있습니다. 설정되지 않은 경우 의 값이 대신 사용됩니다. connect_timeoutping_timeout P(사전 포스트): 설정하면 연결이 각 요청을 백엔드로 보내기 전에 조사해야 합니다. 시간 초과 로 설정할 수 있습니다. 설정되지 않은 경우 의 값이 대신 사용됩니다. prepost_timeoutping_timeout I(간격): 설정하면 연결이 정기적인 내부 유지 보수 주기 동안 조사해야 합니다. 그러나 보다 오래 유휴 상태인 경우에만 가능합니다. 시간 초과 로 설정할 수 있습니다. connection_ping_intervalping_timeout A: 설정하면 위의 모든 프로브가 사용됩니다. 이 기능은 jk 1.2.27에 추가되었습니다. Connect 및 사전 사후 프로빙은 JK 1.2.6 버전을 통해 이미 사용할 수 있었습니다. connect_timeoutprepost_timeout |
ping_timeout | 10000 | 의 CPong 응답을 기다릴 때 사용되는 시간 제한(밀리초)입니다. CPing 연결 프로브. 프로브의 활성화는 를 통해 수행됩니다. connect 및 prepost에 대한 시간 초과는 및 를 통해 개별적으로 덮어쓸 수 있습니다. ping_modeping_modeconnect_timeoutprepost_timeout호환성을 위해 CPing/CPong도 사용됩니다. 비어 있어도. connect_timeoutprepost_timeoutping_mode 이 기능은 jk 1.2.27에 추가되었습니다. |
connection_ping_interval | 0 / (ping_timeout/1000)*10 | 간격 연결 프로빙을 사용하는 경우 연결이 이보다 오래 유휴 상태입니다 간격(초)은 패킷이 여전히 작동하는지 여부를 CPing하여 조사합니다.간격 프로빙은 다음 중 하나로 활성화할 수 있습니다. 또는 더 큰 값으로 설정하여 0보다. 를 통해 간격 프로빙을 활성화하는 경우 의 기본값은 입니다. 밀리초 단위와 초 단위입니다. 따라서 절대적인 용어로 기본값은 다음과 같습니다. 10 번 . ping_modeconnection_ping_intervalping_modeconnection_ping_interval(ping_timeout/1000) * 10ping_timeoutconnection_ping_intervalconnection_ping_intervalping_timeout 이 기능은 jk 1.2.27에 추가되었습니다. |
connection_pool_size | see text | 이는 AJP 백엔드에 대한 연결 수를 정의합니다. 연결 풀로 유지 관리됩니다. 각 웹 서버가 자식인 연결 수를 제한합니다. 과정을 만들 수 있습니다.연결 풀 크기 속성은 다중 스레드에만 사용됩니다. Apache HTTP Server 및 Microsoft IIS와 같은 웹 서버. connection_pool_size 속성 하나의 웹 서버 프로세스가 수행해야 하는 요청 수를 반영해야 합니다. 백엔드에 병렬로 보낼 수 있어야 합니다. 일반적으로 이것은 다음과 같습니다. 웹 서버 프로세스당 스레드 수입니다. JK가 발견 할 것입니다. 이 번호는 Apache HTTP Server에 자동으로 적용되며 풀 크기를 이 값입니다. IIS의 경우 기본값은 250(버전 1.2.20 이전: 10)입니다. IIS에 대해 이 값을 조정하는 것이 좋습니다 하나의 웹 서버 프로세스가 수행해야 하는 요청 수에 백엔드에 병렬로 보낼 수 있어야 합니다. 얼마나 많은 연결을 측정해야 합니다 성능 문제없이 피크 작업 중에 필요한 경우 성장률에 따른 백분율. 마지막으로 확인해야 합니다. 웹 서버 프로세스가 최소한 많은 스레드를 사용할 수 있는지 여부, 풀 크기로 구성한 대로. prefork MPM 또는 Apache 1.3.x가 있는 Apache 2.x에서 1보다 큰 값을 가진 connection_pool_size 사용하지 마십시오! |
connection_pool_minsize | (pool+1)/2 | 유지 관리할 연결 풀의 최소 크기입니다.기본값은 (connection_pool_size+1)/2입니다. prefork MPM 또는 Apache 1.3.x가 있는 Apache 2.x에서 1보다 큰 값을 가진 connection_pool_minsize 사용하지 마십시오!이 기능은 jk 1.2.16에 추가되었습니다. |
connection_pool_timeout | 0 | 캐시 시간 초과 속성을 connection_pool_minsize와 함께 사용하여 JK가 유지해야 하는 시간(초)을 지정해야 합니다. 캐시를 닫기 전에 캐시에 있는 비활성 소켓입니다. 이 속성은 스레드 수를 줄이는 데 사용해야 합니다 Tomcat 웹 서버에서. 기본값 0은 닫기(무한 시간 초과)를 비활성화합니다.각 자식은 Tomcat에 요청을 전달해야 하는 경우 ajp13 연결을 열 수 있습니다. Tomcat 측의 새로운 ajp13 스레드. 문제는 ajp13 연결이 생성 된 후 자식이 연결을 삭제하지 않는다는 것입니다 죽을 때까지. 그리고 웹 서버는 자식 / 스레드를 계속 실행할 것이기 때문에 높은 부하를 처리하려면 자식 / 스레드가 정적 내용 만 처리하더라도 다음을 수행 할 수 있습니다. Tomcat 측에서 사용하지 않는 많은 ajp13 스레드를 마칩니다. 이 시간 간격을 keepAliveTimeout 특성과 동기화된 상태로 유지해야 합니다 (명시적으로 설정된 경우) 또는 connectionTimeout 속성 Tomcat의 server.xml 에있는 AJP 커넥터의. 그러나 값은 mod_jk는 초 단위로 제공되므로 server.xml의 경우 밀리초를 사용해야 합니다. |
connection_acquire_timeout | retries*retry_interval | 시간 초과 작업자는 포기하기 전에 캐시에서 사용 가능한 소켓을 기다립니다.기본값은 retries * retry_interval입니다. 이 기능은 jk 1.2.27에 추가되었습니다. |
lbfactor | 1 | 부하 분산 장치의 구성원 작업자에만 사용됩니다.정수 lbfactor(부하 분산 계수)는 이 작업자가 작업할 것으로 예상되는 양 또는 작업자의 작업 할당량입니다. 부하 분산 계수는 다른 작업자와 비교됩니다. 로드 밸런서를 만듭니다. 예를 들어, 한 작업자의 lbfactor가 5배 더 높은 경우 다른 작업자가 있으면 5배 더 많은 요청을 받게 됩니다. |
'어플리케이션' 카테고리의 다른 글
SFTP 에 대해 알아보겠습니다. (0) | 2024.02.09 |
---|---|
SSL 인증서의 필요 및 등록 방법에 대해 알아보겠습니다. (0) | 2023.12.27 |
파일리스(fileless) 형태의 악성코드에 대해 알아보도록 하겠습니다. (0) | 2023.10.10 |
BYOD(Bring Your Own Device) 에 대해 알아보도록 하겠습니다. (1) | 2023.10.07 |
크리덴셜스터핑(Credential stuffing) 에 대해 알아보겠습니다. (0) | 2023.09.13 |