본문 바로가기

리눅스

우분투에서 HAProxy를 사용하여 고가용성(High Availability, HA)을 구성하는 방법

728x90

우분투에서 HAProxy를 사용하여 고가용성(High Availability, HA)을 구성하는 방법

테스트 환경

  • 운영체제 버전 정보
$ lsb_release -d
Description:    Ubuntu 22.04.3 LTS
  • 시스템 현황
호스트 이름 네트워크 인터페이스 아이피 주소 Port(container)
node01 eth0 172.19.0.3 8181(80), 8443(443), 9001(9000)
node02 eth0 172.19.0.2 8182(80), 8444(443), 9002(9000)
vip eth0:1 172.19.0.10 domain : ha.sangchul.kr

HAProxy 패키지 설치

sudo apt-get update
sudo apt-get install -y haproxy
  • haproxy 버전 정보
haproxy -v
$ haproxy -v
HAProxy version 2.4.24-0ubuntu0.22.04.1 2023/10/31 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2026.
Known bugs: http://www.haproxy.org/bugs/bugs-2.4.24.html
Running on: Linux 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64

VIP(Virtual IP) 설정

VIP는 고가용성을 제공하기 위해 노드에서 VIP를 활성화 설정합니다.

sudo ip addr add 172.19.0.10/24 dev eth0 label eth0:1
sudo ip addr show eth0:1

HAProxy 구성

HAProxy의 구성 파일(/etc/haproxy/haproxy.cfg)을 수정하여 로드 밸런싱 및 고가용성을 구성합니다.

 

  • haproxy.cfg 편집
vim /etc/haproxy/haproxy.cfg
  • node01 haproxy 구성
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    log                     global
    mode                    http
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend http-in
    bind *:80
    acl url_admin       path_beg       /admin
    use_backend bk_admin     if url_admin
    default_backend             bk_web

frontend https-in
    bind *:443 ssl crt /etc/ssl/ha_sangchul_kr/unified_ha_sangchul_kr.pem
    acl url_admin       path_beg       /admin
    use_backend bk_admin     if url_admin
    default_backend             bk_web

backend bk_web
    balance     roundrobin
    server      web1 172.19.0.3:8080 check
    server      web2 172.19.0.2:8080 check

backend bk_admin
    balance     roundrobin
    server      web1 172.19.0.3:8080 check
    server      web2 172.19.0.2:8080 check

listen stats
    #bind *:1936
    bind *:9000
    stats enable
    stats uri /haproxy_stats
    stats refresh 10s
haproxy -c -f /etc/haproxy/haproxy.cfg -V
  • node02 haproxy 구성
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    log                     global
    mode                    http
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend http-in
    bind *:80
    acl url_admin       path_beg       /admin
    use_backend bk_admin     if url_admin
    default_backend             bk_web

frontend https-in
    bind *:443 ssl crt /etc/ssl/ha_sangchul_kr/unified_ha_sangchul_kr.pem
    acl url_admin       path_beg       /admin
    use_backend bk_admin     if url_admin
    default_backend             bk_web

backend bk_web
    balance     roundrobin
    server      web1 172.19.0.3:8080 check
    server      web2 172.19.0.2:8080 check

backend bk_admin
    balance     roundrobin
    server      web1 172.19.0.3:8080 check
    server      web2 172.19.0.2:8080 check

listen stats
    bind *:9000
    stats enable
    stats uri /haproxy_stats
    stats refresh 10s
haproxy -c -f /etc/haproxy/haproxy.cfg -V

HAProxy 재시작

sudo systemctl restart haproxy

HAProxy 상태 확인

sudo systemctl status haproxy

HAProxy에 통계 페이지

웹 브라우저에서 http://VIP:9000에 접속하여 HAProxy 통계 페이지를 확인

http://192.168.100.201:9001/haproxy_stats

haproxy_stats1

http://192.168.100.201:9002/haproxy_stats

haproxy_stats2

 

728x90