본문 바로가기
FullStack/41. WEB.WAS

Apache httpd - Tomcat 연결 끊김(502) 현상

by nakanara 2022. 2. 3.
반응형

기본 설정인 ALB - Apache httpd - Tomcat으로 설정하였을 때는 이슈가 없었는데,
이중화 설정을 IP를 지정하여 HTTPD에서 이중화 설정하는 방식이 아닌 AWS NLB를 이용하여 확장이 가능하도록 진행하였다.
ALB - Apache httpd - NLB - Tomcat으로 설정을 변경한 시점에서 간헐적으로 502 오류가 발생했다. httpd mod_jk 로그에는 연결 실패 로그가 나타났지만, Tomcat에서는 별다른 access 로그가 표시되지 않았다.

httpd - tomcat 사이에서 발생하는 문제인 것 같아서 처리했던 내용을 정리하였다.

  1. AWS ALB - Httpd KeepAliveTimeout 값 설정

AWS ALB와의 timeout 영향이 아닐까 싶어서 httpd KeepAliveTimeout 값을 ALB의 timeout 값과 동일하게 60으로 설정하였지만 동일하게 발생

KeepAlive On
KeepAliveTimeout 60
  1. Tomcat connectionTimeout 값 설정

Tomcat AJP설정 중 connectionTimeout 값으로 인해 연결이 끊어질 가능성도 있어서 설정을 변경하였지만 동일한 현상 발생

<Connector protocol="AJP/1.3"
        address="::1"
        port="8009"
        redirectPort="8443" 

        connectionTimeout="5000"
        minSpareThreads="25"
        maxThreads="256"
        acceptCount="100"
        disableUploadTimeout="true"
        maxConnections="8192"
        />
  • connectionTimeout: 연결 수락 후 대기 시간(기본 20000ms = 20초)
  • minSpareThreads: 톰캣 실행 시 생성될 스레드 크기(기본 10)
  • maxThreads: 스레드 최대 크기(기본 200)
  • acceptCount: 연결 요청 최대 대기열(기본 100)
  • disableUploadTimeout: 데이터 업로드 시 시간제한 여부(기본 false)
  • maxConnections: 최대 연결 유지 수, 연결만 진행하며, 처리를 하지 않음 최대 연결 큐(기본 8192)
  1. mod_jk 설정 변경

mod_jk설정 중 연결 전후 ping_mode 설정

worker.app.ping_mode=A
worker.app.connection_ping_interval=10000
  • ping_mode: Apache에서 Tomcat 상태 확인
    • C: Connect 연결 시 connect_timeout 설정 값 기준 연결 대기, connect_timeout 설정이 없는 경우 keepAliveTimeout 설정 값 기준
    • P: Preport 요청 전송 전 ping 체크 prepost_timeout 설정 값 대기, prepost_timeout 없는 경우 connect_timeout 설정 기준
    • I: Interval 주기적으로 ping 체크
    • A: C, P, I 모든 방식 사용
  • connection_ping_interval: ping 체크 주기(기본 10000ms = 10초)

ping_mode 설정 후 해당 현상이 사라졌다.
아마 NLB 연결로 설정한 후 연결된 Tomcat 서버가 유동적으로 변경되어 발생한 것이 아닌가 싶다.

참고

 

#tomcat #apache #web

 

반응형