반응형

HAProxy는 고성능 로드 밸런서로, 웹사이트나 애플리케이션의 트래픽을 여러 서버에 분산시키는 기능을 제공합니다. 
서비스의 가용성과 성능을 높이며, 단일 지점 장애(SPOF)를 방지합니다.
HAProxy의 주요 특징으로는 빠른 속도, 높은 가용성, SSL 종료 및 지원, 사용자 정의 가능한 라우팅 규칙 등이 있습니다.

HAProxy를 설치하고 기본적으로 구성하는 방법을 단계별로 안내하겠습니다.

 

Keepalived는 Linux 환경에서 고가용성과 부하 분산을 제공하는 소프트웨어입니다.
주로 VRRP(Virtual Router Redundancy Protocol)와 LVS(Linux Virtual Server)를 이용하여,
네트워크 서비스의 장애 대비 및 트래픽 관리를 수행합니다.
Keepalived는 주 서버에 장애가 발생할 경우 자동으로 대체 서버로 전환하는 기능을 제공하여,
서비스 중단 시간을 최소화합니다.


0. 설치 환경

OS: Ubuntu 20.04.6 LTS

HAProxy를 설치하기 전에, 시스템에 적어도 1GB의 RAM과 충분한 CPU 자원이 있는지 확인해야 합니다.
최신 버전의 HAProxy를 사용하기 위해 Ubuntu나 Debian 같은 Linux 배포판에서는
apt-get 패키지 관리자를 최신 상태로 업데이트하는 것이 좋습니다.

 

리눅스 시스템 패키지 업데이트 및 업그레이드

apt-get update

apt-get upgrade -y

apt-get dist-upgrade -y

 

1. HAProxy Install

software-properties-common 패키지를 설치하면서 소프트웨어 패키지의 관리를 돕는 도구를 포함하고,
필수 패키지만 설치되어 시스템이 가볍게 유지되게 도와줍니다.

apt-get install --no-install-recommends software-properties-common -y

 

HAProxy Debian Repository(https://haproxy.debian.net/) 페이지는
Debian 및 Ubuntu 사용자를 위한 공식 HAProxy 패키지 저장소입니다.
HAProxy의 최신 버전을 설치하기 위한 공식 저장소이며,
Debian 기반 시스템에 HAProxy를 쉽게 설치하고 업데이트할 수 있습니다.

 

사이트에서 안내한 커맨드를 통해 HAProxy를 설치합니다.

 

apt-get install --no-install-recommends software-properties-common -y

add-apt-repository ppa:vbernat/haproxy-2.8

apt-get install haproxy=2.8.\* -y

 

HAProxy 설치 및 버전을 확인합니다.

haproxy -v
---
HAProxy version 2.8.5-1ppa1~focal 2023/12/09 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2028.
Known bugs: http://www.haproxy.org/bugs/bugs-2.8.5.html
Running on: Linux 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
---

 

HAProxy 상태를 확인합니다.

systemctl status haproxy.service
---
● haproxy.service - HAProxy Load Balancer
     Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-02-05 03:53:59 UTC; 15min ago
---

 

2. HAProxy Config 설정

HAProxy의 기본 구성 파일(`haproxy.cfg`)은 HAProxy 서버의 동작을 제어하는 설정들을 포함하고 있습니다. 
이 파일은 일반적으로 `/etc/haproxy/haproxy.cfg`에 위치합니다. 
기본 구성 파일은 여러 섹션으로 구분되며, 각 섹션은 HAProxy의 다양한 기능과 행동을 정의합니다. 

 

주요 섹션에는 다음과 같은 것들이 포함됩니다.


1) Global 섹션: HAProxy 인스턴스 전체에 적용되는 전역 설정을 포함합니다.
이 섹션은 HAProxy의 로깅, 프로세스 관리, 성능 관련 설정 등을 정의합니다.

   global
       log /dev/log local0
       maxconn 4096
       user haproxy
       group haproxy


2) Defaults 섹션: 여러 프록시에 공통적으로 적용될 기본 설정을 제공합니다. 타임아웃, 로깅 옵션 등이 포함될 수 있습니다.

   defaults
       log global
       mode http
       timeout connect 5000ms
       timeout client 50000ms
       timeout server 50000ms


3) Frontend 섹션: 클라이언트로부터의 인바운드 연결을 정의하고 관리합니다.
특정 IP 주소와 포트에서 수신 대기하고, 트래픽을 어떤 백엔드 서버로 라우팅할지 정의합니다.

   frontend http_front
       bind *:80
       default_backend http_back


4) Backend 섹션: 실제로 트래픽을 처리하는 서버 그룹을 정의합니다.
로드 밸런싱 방법, 서버 주소 및 포트, 헬스 체크 설정 등을 포함합니다.

   backend http_back
       balance roundrobin
       server server1 192.168.0.101:80 check
       server server2 192.168.0.102:80 check


5) Listen 섹션: `frontend`와 `backend` 섹션의 기능을 하나로 결합한 형태로,
특정 포트에서 수신 대기하고 트래픽을 처리합니다.

   listen stats
       bind *:8080
       stats enable
       stats uri /


HAProxy 구성 파일은 매우 유연하며 다양한 설정 옵션을 제공합니다. 

이 파일을 통해 HAProxy의 성능, 보안, 로드 밸런싱 방법 등을 세밀하게 조정할 수 있습니다.

 

기본 haproxy.cfg

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

 

3. Keepalived Install

Keepalived를 설치하기 전에, 시스템이 Linux 커널 2.4 이상을 실행하고 있는지 확인해야 합니다. 
네트워크 인터페이스 및 IP 주소가 올바르게 구성되어 있어야 하며, root 권한 또는 sudo 권한이 필요합니다.

sudo apt-get update

sudo apt-get install keepalived -y


설치 후 `/etc/keepalived/keepalived.conf` 파일을 편집하여 기본 설정을 진행합니다.

기본적으로, 하나 이상의 VRRP 인스턴스를 구성해야 하며,
각 인스턴스에는 가상 라우터 ID, 우선 순위, 인터페이스 등이 포함됩니다.

예를 들어, 다음과 같이 설정할 수 있습니다:

vi /etc/keepalived/keepalived.conf
---
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    virtual_ipaddress {
        192.168.31.179
    }
}
---


설정을 완료한 후 `systemctl restart keepalived` 명령으로 Keepalived 서비스를 재시작합니다.
`systemctl status keepalived` 명령으로 서비스 상태를 확인할 수 있습니다.

또한, `ip addr` 명령을 통해 가상 IP 주소가 올바르게 할당되었는지 확인할 수 있습니다.

systemctl status keepalived.service
---
● keepalived.service - Keepalive Daemon (LVS and VRRP)
     Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-02-05 06:42:23 UTC; 6s ago
---
ip addr
---
   ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:d6:b7:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.177/24 brd 192.168.31.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.31.179/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed6:b7a2/64 scope link
       valid_lft forever preferred_lft forever
---


이러한 단계를 통해 Keepalived를 성공적으로 설치하고 기본 설정을 완료할 수 있으며, 
이를 통해 시스템의 고가용성을 보장할 수 있습니다.

4. 참고

 

 

 

 

반응형