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. 참고
- https://www.haproxy.org/
- https://www.keepalived.org/
- https://www.digitalocean.com/community/tutorials/how-to-set-up-highly-available-haproxy-servers-with-keepalived-and-reserved-ips-on-ubuntu-14-04
- https://webhostinggeeks.com/howto/how-to-setup-haproxy-for-high-availability-with-keepalived/
- https://kubesphere.io/docs/v3.4/installing-on-linux/high-availability-configurations/set-up-ha-cluster-using-keepalived-haproxy/
- https://kifarunix.com/configure-highly-available-haproxy-with-keepalived-on-ubuntu/
- https://dasunhegoda.com/how-to-setup-haproxy-with-keepalived/833/