본문 바로가기
푸닥거리

HAProxy를 활용한 Apache Worker 대체 및 고가용성(HA) 구현 가이드

by [김경민]™ ┌(  ̄∇ ̄)┘™ 2025. 1. 25.
728x90

HAProxy를 활용한 Apache Worker 대체 및 고가용성(HA) 구현 가이드

고가용성과 로드 밸런싱을 구축하는 방법 중 하나로 HAProxy는 Apache Worker를 대체할 수 있는 강력한 도구입니다. 본 가이드에서는 기존 Apache Worker 설정을 HAProxy로 변경하여 Tomcat 서버와 통신하는 방식을 설명합니다.


1. Apache Worker란?

Apache Worker는 Apache HTTP 서버에서 Tomcat과 통신하기 위해 AJP 프로토콜을 사용합니다. Apache와 Tomcat 간에 AJP를 통해 최적화된 통신을 수행하지만, 최근 HAProxy가 HTTP 기반 로드 밸런싱에서 더 강력한 기능과 성능을 제공하기 때문에 이를 대체하는 것이 권장됩니다.


2. HAProxy의 주요 장점

  • 고성능 로드 밸런싱: Round Robin, Least Connections 등 다양한 로드 밸런싱 알고리즘 지원.
  • 세션 스티키 지원: 클라이언트 세션을 특정 백엔드 서버로 고정 가능.
  • 확장성: Tomcat 서버를 쉽게 추가/제거 가능.
  • 실시간 모니터링: 상태 페이지를 통해 서버 상태를 직관적으로 확인 가능.

3. HAProxy 설치 및 설정

3.1. HAProxy 설치

# Ubuntu/Debian
sudo apt update && sudo apt install haproxy

# CentOS/RedHat
sudo yum install haproxy

3.2. HAProxy 구성 파일 편집

/etc/haproxy/haproxy.cfg 파일을 열고 아래와 같은 설정을 추가합니다.

global
    log /dev/log local0
    log /dev/log local1 notice
    maxconn 2000
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
    retries 3

frontend http_front
    bind *:80
    mode http
    default_backend tomcat_backend

backend tomcat_backend
    mode http
    balance roundrobin
    option httpchk GET /healthcheck
    http-check expect status 200
    server tomcat1 127.0.0.1:8080 check
    server tomcat2 127.0.0.1:8081 check

3.3. Tomcat HTTP Connector 활성화

Tomcat의 server.xml 파일에서 AJP 대신 HTTP Connector를 활성화합니다.

<!-- 기존 AJP Connector 비활성화 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

<!-- HTTP Connector 활성화 -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

 

728x90

 

3.4. HAProxy 서비스 시작 및 활성화

설정 파일이 올바른지 확인하고 HAProxy 서비스를 시작합니다.

# 설정 파일 검증
haproxy -c -f /etc/haproxy/haproxy.cfg

# 서비스 시작
sudo systemctl start haproxy

# 서비스 부팅 시 자동 시작 활성화
sudo systemctl enable haproxy

4. 세션 스티키 활성화 (선택 사항)

세션을 특정 Tomcat 인스턴스에 고정하려면 다음과 같은 설정을 추가합니다.

backend tomcat_backend
    mode http
    balance roundrobin
    option httpchk GET /healthcheck
    http-check expect status 200
    cookie JSESSIONID prefix nocache
    server tomcat1 127.0.0.1:8080 check cookie tomcat1
    server tomcat2 127.0.0.1:8081 check cookie tomcat2

5. 상태 페이지 활성화 (옵션)

HAProxy 상태 페이지를 활성화하면 실시간으로 백엔드 서버의 상태를 확인할 수 있습니다.

frontend stats
    bind *:8085
    mode http
    stats enable
    stats uri /stats
    stats realm HAProxy\ Stats
    stats auth admin:password
  • 상태 페이지 URL: http://<HAProxy_IP>:8085/stats

6. 테스트 및 검증

  1. 브라우저에서 http://<HAProxy_IP>로 접속하여 로드 밸런싱이 정상 작동하는지 확인.
  2. 상태 페이지(http://<HAProxy_IP>:8085/stats)를 통해 서버 상태 확인.

7. Apache Worker와의 비교

기능                                                   Apache Worker                    HAProxy

프로토콜 AJP HTTP
로드 밸런싱 알고리즘 제한적 지원 Round Robin, Least Connections 등
세션 스티키 지원 지원
설정 복잡도 상대적으로 복잡 상대적으로 간단
성능 중간 매우 우수

결론

HAProxy는 간단한 설정으로 고성능 로드 밸런싱과 고가용성을 제공하며, Apache Worker를 대체하는 데 적합합니다. 위의 가이드를 따라 기존 Apache 설정을 HAProxy로 전환하면 더 나은 성능과 확장성을 얻을 수 있습니다. 필요에 따라 상태 모니터링 및 세션 스티키 기능을 추가하여 안정성을 높이세요!

728x90

댓글