Linux

[Linux] HA Proxy 와 keepalived 를 구축하여, 이중화 구성하기

IT-PAPA 2023. 8. 27. 06:46
반응형

HAProxy

HAProxy는 오픈 소스 로드 밸런서 및 프록시 소프트웨어로, 웹 서버나 애플리케이션 서버의 부하 분산과 고가용성을 위해 사용됩니다. 주요 기능은 다음과 같습니다:

1. 로드 밸런싱: 클라이언트 요청을 여러 대의 서버로 분산하여 서버 부하를 고르게 분배합니다. 이를 통해 서버 응답 시간을 최적화하고 성능을 향상시킵니다.

2. 프록시 서버: 클라이언트와 서버 간의 중계 역할을 수행하여 보안 및 성능을 향상시킵니다. 클라이언트로부터 받은 요청을 실제 서버로 전달하고, 서버의 응답을 클라이언트로 전달합니다.

3. 세션 유지 관리: 세션 지속성을 유지하면서 로드 밸런싱을 수행할 수 있습니다. 클라이언트의 요청이 항상 같은 서버로 전달되도록 합니다.

4. 헬스 체크: 백엔드 서버의 상태를 주기적으로 확인하여 비정상적인 서버를 제외하고 정상적인 서버로만 요청을 전달합니다.

Keepalived

Keepalived는 리눅스 기반 시스템에서 고가용성 및 이중화 서비스를 제공하기 위한 데몬 프로그램입니다. 주로 IP 가상화와 함께 사용되며, 여러 서버 사이에서 IP 주소 및 서비스 상태를 공유하여 높은 가용성을 유지합니다. 주요 기능은 다음과 같습니다:

1. 가상 IP 주소 공유: Keepalived는 가상 IP 주소를 여러 대의 서버에서 공유하도록 설정할 수 있습니다. 이를 통해 클라이언트는 가상 IP 주소로 서비스에 접근하며, Keepalived는 실제로 해당 서비스를 제공하는 서버로 요청을 전달합니다.

2. 이중화 및 페일오버: Keepalived는 Master/Backup 구성으로 작동합니다. Master 서버가 주 서비스를 제공하다가 장애가 발생하면 Backup 서버가 이를 감지하고 Master 역할로 전환하여 서비스 중단 없이 계속 운영할 수 있습니다.

3. VRRP(Virtual Router Redundancy Protocol): Keepalived는 VRRP를 사용하여 가상 라우터의 이중화를 수행합니다. 이를 통해 서버 간에 라우터 역할을 공유하고, 가상 IP 주소를 자동으로 이중화할 수 있습니다.

4. 사용자 정의 상태 확인: Keepalived는 사용자가 정의한 스크립트를 실행하여 서버나 서비스의 상태를 주기적으로 확인하고 이를 기반으로 상태 전환을 결정합니다.

요약

HAProxy는 로드 밸런싱과 프록시 기능을 제공하며, Keepalived는 고가용성 및 이중화 서비스를 제공합니다. 두 소프트웨어를 함께 사용하면 웹 서비스나 애플리케이션의 가용성을 향상시키고, 부하 분산을 실현할 수 있습니다.

 
사전 서버 환경 준비 사항

HA Proxy 용 container 2대 (Ubuntu 22.04) - 192.168.0.180, 192.168.0.181
nginx 용 container 2대 (Ubuntu 22.(04) - 192.168.0.182, 192.168.0.183

 
HA Proxy 설치 - HA Proxy 1,2 서버에 모두 설치

sudo apt-get update
sudo apt-get install haproxy

 

keepalived 설치 - HA Proxy 1,2 서버에 모두 설치

sudo apt-get update
sudo apt-get install keepalived

 

haproxy.cfg 설정 - HA Proxy 1,2 서버 모두 설정

vi /etc/haproxy/haproxy.cfg
# 프론트엔드 설정 섹션
frontend my_frontend
    bind *:80  # 모든 인터페이스의 80번 포트에 바인딩
    mode http  # HTTP 모드로 설정
    default_backend my_backend  # 기본 백엔드로 my_backend 지정

# 백엔드 설정 섹션
backend my_backend
    mode http  # HTTP 모드로 설정
    balance roundrobin  # Round Robin 방식으로 로드 밸런싱
    server server1 192.168.0.182:80 check  # 서버1에 대한 설정, 체크 기능 사용
    server server2 192.168.0.183:80 check  # 서버2에 대한 설정, 체크 기능 사용

 

keepalived.conf 설정 - HA Proxy 1,2 서버에 모두 설정

vi /etc/keepalived/keepalived.conf

 

keepalieved.conf HA Proxy1 서버 설정

global_defs {
   router_id rtr_0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 사용 중인 네트워크 인터페이스로 변경해야 합니다.
    virtual_router_id 51
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass PASSWORD
    }
    virtual_ipaddress {
        192.168.0.179 # 가상 IP 주소
    }
}

 

keepalieved.conf HA Proxy2 서버 설정

global_defs {
   router_id rtr_0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0  # 사용 중인 네트워크 인터페이스로 변경해야 합니다.
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass PASSWORD
    }
    virtual_ipaddress {
        192.168.0.179  # 가상 IP 주소
    }
}

 

HA Proxy 와 keepalived 서비스 재시작

sudo service keepalived start
sudo service haproxy restart

 

HA Proxy 관리자 페이지 설정

vi /etc/haproxy/haproxy.cfg
listen hastats
    mode http
    bind *:8088
    stats enable
    stats show-legends
    stats uri /hastat
    stats auth admin:admin

 

HA Proxy 관리자 페이지 접속

http://[서버 IP]:8088/hastat
HA Proxy 관리자 페이지 접속
HA Proxy 관리자 페이지 접속
관리자페이지 메인 화면
관리자페이지 메인 화면

 

haproxy.cfg 설정 파일 작성법 예시

# 전역 설정 섹션
global
    log /dev/log local0  # 로그를 local0에 저장
    log /dev/log local1 notice  # 로그 레벨을 notice로 설정
    chroot /var/lib/haproxy  # HAProxy 실행 시 chroot하여 루트 디렉토리를 변경
    stats socket /run/haproxy/admin.sock mode 660 level admin  # 상태 정보 소켓 설정
    stats timeout 30s  # 상태 정보 소켓 타임아웃 시간 설정
    user haproxy  # HAProxy 프로세스를 실행할 사용자 설정
    group haproxy  # HAProxy 프로세스를 실행할 그룹 설정
    daemon  # 백그라운드 데몬 모드로 실행

# 기본 설정 섹션
defaults
    log global  # 로그를 전역 범위로 설정
    mode http  # HTTP 모드로 설정
    option httplog  # HTTP 로깅 사용
    option dontlognull  # 빈 응답은 로그에 기록하지 않음
    timeout connect 5000  # 연결 제한 시간을 5초로 설정
    timeout client 50000  # 클라이언트 제한 시간을 50초로 설정
    timeout server 50000  # 서버 제한 시간을 50초로 설정

# 프론트엔드 설정 섹션
frontend my_frontend
    bind *:80  # 모든 인터페이스의 80번 포트에 바인딩
    mode http  # HTTP 모드로 설정
    default_backend my_backend  # 기본 백엔드로 my_backend 지정

# 백엔드 설정 섹션
backend my_backend
    mode http  # HTTP 모드로 설정
    balance roundrobin  # Round Robin 방식으로 로드 밸런싱
    server server1 192.168.1.101:80 check  # 서버1에 대한 설정, 체크 기능 사용
    server server2 192.168.1.102:80 check  # 서버2에 대한 설정, 체크 기능 사용

 

keepalived.conf 파일 작성법 예시

# 전역 설정 섹션
global_defs {
  notification_email {
    admin@example.com  # 이메일 주소를 여기에 추가하면 Keepalived 문제 알림을 받을 수 있습니다.
  }
  notification_email_from keepalived@example.com  # 알림 이메일 발신자 설정
  smtp_server 192.168.1.200  # SMTP 서버 주소 설정 (이메일 알림 사용 시 필요)
  smtp_connect_timeout 30  # SMTP 서버 연결 제한 시간 설정
  router_id LVS_DEVEL  # 라우터 ID 설정
}

# Keepalived 텅스턴 섹션 (Master / Backup 상태 변경 감지를 위해 사용)
vrrp_script chk_haproxy {
  script "/etc/keepalived/chk_haproxy.sh"  # HAProxy 상태 확인 스크립트 경로 설정
  interval 2  # 상태 확인 간격 설정 (초 단위)
  weight -20  # 상태 변경을 위한 가중치 설정
}

# Keepalived VRRP 인스턴스 섹션
vrrp_instance VI_1 {
  state MASTER  # 현재 인스턴스의 상태 (MASTER 또는 BACKUP)
  interface eth0  # Keepalived가 감지할 인터페이스 설정
  virtual_router_id 51  # VRRP 가상 라우터 ID 설정
  priority 100  # VRRP 우선 순위 설정 (Master가 되는 기준이 됨)
  advert_int 1  # VRRP 광고 전송 간격 설정 (초 단위)
  authentication {
    auth_type PASS  # 인증 유형 (PASS 혹은 AH, 암호화를 사용할 경우 AH)
    auth_pass PASSWORD  # VRRP 인증 비밀번호 설정
  }
  virtual_ipaddress {
    192.168.1.100  # 가상 IP 주소 설정 (로드 밸런서의 가상 IP 주소)
  }
  track_script {
    chk_haproxy  # 상태 확인 스크립트를 통해 HAProxy 상태 감지
  }
}

 

설정 파일 주석 설명:

global_defs: Keepalived 전역 설정 섹션으로, 이메일 알림과 라우터 ID를 설정합니다.
vrrp_script: Keepalived 상태 확인 스크립트 섹션으로, HAProxy 상태를 감지합니다.
vrrp_instance: Keepalived VRRP 인스턴스 섹션으로, HAProxy 로드 밸런서의 가상 IP 주소와 인증 정보, 우선 순위 등을 설정합니다.
주석을 통해 각 설정 항목이 어떤 역할을 하는지 설명되어 있으며, 이 설정 파일은 Keepalived를 이용하여 HAProxy를 이중화하는 예시입니다. 필요에 따라 설정을 변경하여 서버 환경에 맞게 구성할 수 있습니다. 또한, 스크립트 파일(chk_haproxy.sh)은 HAProxy 상태를 확인하여 Keepalived의 Master/Backup 상태를 변경하는 데 사용됩니다. 이 스크립트는 사용자가 직접 작성해야 합니다.

728x90
반응형
LIST