Haproxy 설치 및 설정

bhs9610·2020년 9월 5일
0

Linux

목록 보기
1/1

Haproxy

Load Balancer 로 사용 할 수 있는 오픈소스인 Haproxy 설치와 설정에 대해 공부내용을 정리한다. Haproxy는 다양한 설정과 Active Health Check 이 가능해 안정적으로 운영할 수 있다.

환경

KVM 위에 Centos 7 으로 올렸다. yum 을 사용해서 손쉽게 패키지를 다운받을 수 있으나, 기존 repo 있던 Haproxy 패키지는 버전이 낮아 최선버전으로 설치하기 위해 컴파일해 설치한다. 모든 실행은 root 권한으로 한다.
(http://www.haproxy.org/)

사전설정 (nat)

proxy # 192.168.120.10/24
node1 # 192.168.120.9/24
node2 # 192.168.120.8/24

간단한 아키텍쳐

(HOST 에서 Haproxy 서버로 curl 을 하여 동작을 확인)

Haproxy 설치 및 세팅

Haproxy 최신 버젼을 빌드하는데 필요한 패키지를 다운한다.

yum install gcc openssl pcre-static pcre-devel systemd-devel

Haproxy 를 다운로드 한 뒤 압축을 풀어준다.

wget http://www.haproxy.org/download/1.8/src/haproxy-2.1.4.tar.gz
tar zxvf haproxy-2.1.4.tar.gz

SSL 인증서와 systemd 을 통해 컨트롤 하기 위해 컴파일 설정을 해준다. (굳이 필요없으면 안해줘도 된다)

make TARGET=generic USE_OPENSSL=1 USER_SYSTEMD=1

Haproxy 를 설치 해준다.

make install   (/usr/local/sbin/haprxoy) 에 실행파일이 설치된다.

정상적을 설치되었는지 확인한다.

sudo haproxy -v

Haproxy 를 systemd 에 등록한다. (Haproxy git repo 확인)

sudo wget "http://git.haproxy.org/?p=haproxy-1.8.git;a=blob_plain;f=contrib/systemd/haproxy.service.in" -O /etc/systemd/system/haproxy.service
sudo systemd daemon-reload

Haproxy 관련 디렉토리를 만들어 준다.

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/log/haproxy
sudo mkdir -p /etc/haproxy/certs
sudo mkdir -p /etc/haproxy/errors/

haproxy.cfg 옵션

haproxy.cfg 의 옵션은 (https://cbonte.github.io/haproxy-dconv/) 에서 자세하게 확인 할 수 있다. 여기서는 기본적인 옵션만 설명한다. 여러 섹션으로 나누어져 있으며 섹션 하단에 파라미터를 추가하는 방식으로 구성된다.

# global
- daemon 
데몬형식 fork 하면서 실행 하는 파라미터 만약 추가 하지 않을 경우 백그라운드로 돌려야 한다.

- maxconn
최대 연결 수를 지정한다 (ulimit -n) 을 통해 해당 서버의 기본 프로세스가 오픈 할 수 있는 
갯수 만큼 지정 할 수 있다.

# defaults
- mode (http,tcp,health)
  * tcp : 해당 포트에 대한 어플리케이션 프록시이다.
    http : http 인스턴스에서 작동한다.
    health : 단순한 health check 모드이다.

- timeout connect : 전체 외부 클라이언트에서 실제 real 서버 까지의 time out 설정
  timeout client : 외부 클라이언트에서 vip 까지의 timeout 설정
  timeout server : vip 서버에서 실제 real 서버 까지의 timeout 설정

# frontend
- bind
bind 는 apache 의 binding 설정과 비슷 하며, 해당 서버로 listening 되는
아이피와 포트를 지정한다

- default_backend
frontend 에서 받은 정보를 backend server 로 보낼 이름을 지정한다 
servers 라는 backend 설정된 아이피로 포워딩된다

# backend servers
- server <name> <address>[:[port]][param*] 형태로 명시된 아이피와 포트로 데이터를 보낸다.

# listen
- frontend + backend 한번에 설정 가능한 섹션이다.

Haproxy balance 옵션

backend 에서 사용 할 balancing 알고리즘을 설정 할 수 있다.

  • roundrobin : 순서대로 데이터를 보낸다.
  • static-rr : 서버에 weight 가중치를 부여해, 부여된 가중치에 따라 연결된다.
  • balance_url_param : HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 조사후 조건에 맞는 서버로 분배한다 (조건이 없는 경우 roundrobin 으로 처리한다)
  • balance hdr : HTTP Header 에서 hdr(name) 으로 지정된 조건이 있는 경우에 대해서만 분해한다 (조건이 없는경우 roundrobin 으로 처리한다)

Haproxy 설정

다른 설정 값은 바꾸지 않고 backend 와 frontend 만 설정해준다.

proxy# vim /etc/haproxy/haproxy.cfg
...
..

frontend web
    bind *:80
    default_backend   servers
    option forwardfor

backend servers
    balance roundrobin   #leastconn 설정도 가능하다.
    server web1 192.168.122.11:80 check 
    server web2 192.168.122.12:80 check

Haproxy Check

haproxy.cfg 설정이 이상 없는지 확인 한다.

haproxy -f /etc/haproxy/haproxy.cfg -c

Haproxy 구동 및 테스트

서비스 시작

systemctl start haproxy.service
systemctl enable haproxy.service

Haproxy 서버로 curl 을 찍어본다.

[root@NODE0 haproxy]# curl 192.168.120.10

node1

[root@NODE0 haproxy]# curl 192.168.120.10

node2

[root@NODE0 haproxy]# curl 192.168.120.10

node1

[root@NODE0 haproxy]# curl 192.168.120.10

node2

마무으리

로드벨런싱에 필요한 대부분의 기능과 쉬운 패키지 설치가 좋았지만, 설정과 관련된 방식이 좀 어려웠다. 구축 할 때 문서보면서 하면 금방 할 거같다. 다음에는 log 를 넘기는 것도 설정해봐야겠다.

Reference

profile
@changhyuni

0개의 댓글