일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- Vision
- Spring
- kubernetes
- PostgreSQL
- Python
- Trino
- EC2
- helm
- Operating System
- CVAT
- aws s3
- tcp
- Kafka
- airflow
- grafana
- log
- Packet
- kubectl
- MAC address
- ip
- OS
- docker
- AWS
- zookeeper
- jvm
- Network
- CSV
- JavaScript
- kubeadm
- Today
- Total
JUST WRITE
Master Node HA 구성(2) - HAProxy 세팅 본문
Master Node HA 구성(2)
지난 포스팅에 이어서 Kubernetes Master Node HA 구성을 하려고 합니다.
keepalived를 통해 고가용성 서버를 세팅하였습니다.
이번에는 keepalived 뒷단에 HAProxy를 두어 부하 분산을 하도록 하였다.
HAProxy
HAProxy는 높은 성능의 TCP/HTTP LoadBalancer입니다.
기본적으로 Reverse Proxy로 형태로 동작합니다.
아래 포스팅에서 Reverse Proxy가 무엇인 정리 하였으니 참고해 주시길 바랍니다.
HAProxy로 layer4, layer7 LoadBalancing 역할로 세팅할 수 있습니다.
Server 앞단에 위치하여 Server로 들어오는 Request를 받아서 중간 처리 후 Server로 전달합니다.
OpenSource이지만 안정성과 성능이 뛰어나 많이 이용되고 있습니다.
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는 기본적으로 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
[참고사이트]
'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 |