JUST WRITE

Master Node HA 구성(2) - HAProxy 세팅 본문

MLOps/Kubernetes

Master Node HA 구성(2) - HAProxy 세팅

천재보단범재 2023. 2. 2. 22:16

HAProxy 세팅

Master Node HA 구성(2)

지난 포스팅에 이어서 Kubernetes Master Node HA 구성을 하려고 합니다.

keepalived를 통해 고가용성 서버를 세팅하였습니다.

이번에는 keepalived 뒷단에 HAProxy를 두어 부하 분산을 하도록 하였다.

 

Master Node HA 구성(1) - keepalived 세팅

Master Node HA 구성(1) Bare Metal Server에 Kubernetes Cluster를 구축하는 업무를 맡게 되었습니다. 총 12대 Server를 1개의 Kubernetes Cluster로 구축하는 업무였습니다. 12대 중 3대를 Master Node, 9대를 Worker Node로 구

developnote-blog.tistory.com

HAProxy

HAProxy는 높은 성능의 TCP/HTTP LoadBalancer입니다.

기본적으로 Reverse Proxy로 형태로 동작합니다.

아래 포스팅에서 Reverse Proxy가 무엇인 정리 하였으니 참고해 주시길 바랍니다.

 

Proxy vs Reverse Proxy

Proxy vs Reverse Proxy System을 구성할 때 Network Traffic을 잘 처리하기 위해 Proxy Server를 구성한다. 근데 Proxy Server 말고 Reverse Proxy Server도 존재한다. 두 Proxy Sever의 차이가 무엇인지 이번 글을 통해 정리

developnote-blog.tistory.com

HAProxy로 layer4, layer7 LoadBalancing 역할로 세팅할 수 있습니다.

Server 앞단에 위치하여 Server로 들어오는 Request를 받아서 중간 처리 후 Server로 전달합니다.

OpenSource이지만 안정성과 성능이 뛰어나 많이 이용되고 있습니다.

HAProxy LoadBalancing

HAProxy 설치

아래 Command로 Selinux에서 HAProxy 어느 Port에나 접근할 수 있도록 세팅합니다.

# 각 Server에 세팅
$ setsebool -P haproxy_connect_any=1

그리고 HAProxy를 yum을 통해 설치 가능합니다.

# 각 Server에 install
$ yum install -y haproxy

HAProxy 설정

설치가 끝나면 HAProxy 설정이 필요합니다.

각 서버에 동일하게 설정합니다.

/etc/haproxy/haproxy.cfg를 수정하면 됩니다.

아래와 같이 세팅하였습니다.

global
# 로깅을 위한 설정
# https://redmine.haedongg.net/projects/knowledge/wiki/Rsyslog_%EC%84%A4%EC%A0%95_
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    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

#---------------------------------------------------------------------
# status web 설정
#---------------------------------------------------------------------
listen hastats
    mode http
    bind *:8080
    stats enable
    stats show-legends
    stats uri /haproxy-status
    stats auth username:password

#---------------------------------------------------------------------
# 프론트 엔드 설정
# 프론트 엔드에서 설정한 포트로 연결이 들어올 경우 백엔드로 보낸다
#---------------------------------------------------------------------

frontend http-in
    bind *:18080
    mode tcp
    default_backend httpproxy
#######################################

#---------------------------------------------------------------------
# 백엔드 설정
#---------------------------------------------------------------------
backend httpproxy
    balance     roundrobin
    mode tcp
    option tcp-check
    option tcplog
    server  server1 192.168.103.101:80 check
    server  server2 192.168.103.102:80 check

먼저 HAProxy에서 따로 WebUI를 제공한다.

8080 포트, /haproxy-status uri로 Web Page에 접근할 수 있다.

user를 설정할 수 있어 접근 제어를 할 수 있다.

listen hastats
    mode http
    bind *:8080
    stats enable
    stats show-legends
    stats uri /haproxy-status
    stats auth username:password

HAProxy WebUI

HAProxy는 기본적으로 frontend와 backend 설정으로 나누어진다.

frontend어떤 Request를 받을지 정의한다.

backend받은 Request를 어떻게 처리할지 정의한다.

아래 예시에서 frontend는 18080 포트로 들어오는 Request를 httpproxy라는 backend에서 처리하도록 한다.

backend는 LoadBalance 정책을 RoundRobin으로 처리하고 정의된 Sever로 분산한다.

frontend http-in
    bind *:18080
    mode tcp
    default_backend httpproxy

backend httpproxy
    balance     roundrobin
    mode tcp
    option tcp-check
    option tcplog
    server  server1 192.168.103.101:80 check
    server  server2 192.168.103.102:80 check

[참고사이트]

728x90
반응형

'MLOps > Kubernetes' 카테고리의 다른 글

Kubernets Cluster에 Worker Node 추가  (0) 2023.02.18
CoreDNS 설정 - Host 강제로 넣기  (0) 2023.02.12
Master Node HA 구성(1) - keepalived 세팅  (0) 2023.02.01
Control Plane Components  (0) 2023.01.21
Kubectl auto-completion 세팅  (0) 2022.12.02
Comments