HAProxy에서의 LB
- 기본적으로 Reverse Proxy 방식으로 동작한다.
- 별도 conf 파일을 구성해 사용해야 한다.
Config 특징
로컬에 설치하면
/etc/haproxy/haproxy.cfg에 존재도커로 설치하면 따로 config 구성해서 proxy 컨테이너 올릴 때 볼륨 마운트 해주어야 함.
가장 중요한 네가지
global,defaults,frontend,backendswarm과 같이 별도의 DNS 맵핑이 필요한 작업에서는
resolvers라는 것을 통해 따로 맵핑작업을 수행해야 한다.c f) Swarm 환경에서 DNS 네임서버는
127.0.0.11:53
1. global
HAProxy에게 low한 level로부터 영향을 미치는 전체적인 보안이나 퍼포먼스 관련된 config
e.g)
1 2 3 4 5 6 7 8 9 10 11
global maxconn 50000 # HAProxy와 붙을 수 있는 최대 커넥션. Out of mem 방지 log /dev/log local0 # 로그 어디에 저장할지(IP 혹은 디렉토리) user haproxy # Root 권한 누구에게 줄지 group haproxy # Root 권한 누구에게 줄지 stats socket /run/haproxy/admin.sock user haproxy group haproxy mode 660 level admin # Runtime API 사용가능하게 함(런타임에 config 변경 등) nbproc 2 # Process, Thread 수 nbthread 4 # Process, Thread 수 ssl-default-bind-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE- ... # 보안 관련 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets # 보안 관련
2. defaluts
front, back의 디폴트를 설정. 즉, 중복을 줄이기 위한 목적
- 물론 오버라이드 가능.
HTTP, TCP 모드를 고를 수 있는데, 둘다 설정하면 TCP, HTTP 따로도 가능
e.g)
1 2 3 4 5 6 7 8
defaults timeout connect 10s # 서버로의 TCP 연결 지연시간 설정 timeout client 30s # Client와의 연결 지연시간. TCP 에선 timeout이 server와 같아야한다 timeout server 30s # Server와의 연결 지연시간 log global # Global section의 로그 설정을 따른다. mode http # HTTP 모드(더 높은 레벨의 트래픽 감지 필요 시.) or TCP 모드 option httplog # 잘 사용되지 않는 TCP로그보다 더 자세하게 maxconn 3000 # 디폴트 2천. 얼마나 front 연결의 최대 커넥션
3. frontend
client가 연결할 수 있는 IP와 port를 정의한다.
- HAProxy는 백엔드 서버 앞에서 Reverse Proxy 방식을 사용
많은 웹사이트에 노출시키기 위해서는 그만큼 많은 frontend서버를 사용할 듯
e.g)
1 2 3 4 5 6
frontend www.mysite.com # 각 웹사이트마다 www.mysite.com 처럼 네이밍가능 bind 10.0.0.3:80 # IP, Port 리스너 bind 10.0.0.3:443 ssl crt /etc/ssl/certs/mysite.pem # SSL 보안 http-request redirect scheme https unless { ssl_fc } # client가 redirect를 할 수 있도록 다른 URL제공 use_backend api_servers if { path_beg /api/ } # 어떤 백엔드 풀과 연결할지 default_backend web_servers
4. backend
LB 되기 위한 서버의 그룹에 대한 사항을 정의
e.g)
1 2 3 4 5 6 7 8 9 10 11
backend web_servers balance roundrobin # 서버 선택 알고리즘. roundrobin, leastconn cookie SERVERUSED insert indirect nocache # Sticky Session 유지를 위해 쿠키 전달 option httpchk HEAD / # 헬스체크. TCP는 connection 관련 체크만, HTTP는 # 성공적 HTTP 응답까지 오는지 체크. 디폴트로는 OPTTIONS 메서드를 # 통해 헬스체크 (2~300대 응답이 오는지) default-server check maxconn 20 # 헬스체크, maxconn 등 default config 설정 server server1 10.0.1.3:80 cookie server1 # 핵심 부분. IP 대신 도메인을 사용하면 시작시에 resolve된다. server server2 10.0.1.4:80 cookie server2 # 혹은 직접 resolvers를 통해 runtime에 업데이트되도록 구현 # 포트가 명시되지 않으면 클라이언트가 접속한 포트 사용 # maxxconn을 설정해야한다.(여기선 default-server에 설정)
Reference)
https://www.haproxy.com/blog/the-four-essential-sections-of-an-haproxy-configuration/