HAProxy 구성파일의 필수 섹션은 4가지가 있습니다.
(작성시 빈 줄과 들여쓰기는 무시됩니다. )
- Global
- Defaults
- Frontend
- Backend
[Global]
구성 파일의 맨위에는 global 섹션을 작성합니다.
HAProxy에 영향을 미치는 프로세스 전반의 보안 및 성능 조정을 정의 합니다.
Global 섹션 예 |
global maxconn 50000 log/dev/log local0 user haproxy group haproxy stats socket /run/haproxy/admin.sock user haproxy group haproxy mode660 level admin nbproc2 nbthread4 cpu-mapauto:1/1-40-3 ssl-default-bind-ciphersECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 ssl-default-bind-options ssl-min-verTLSv1.2 no-tls-tickets |
-. maxconn : HAProxy가 수락할 최대 연결 수를 제한합니다.
-. Log : 시작중에 발생하는 경고 및 런타임중에 발생하는 문제를 기록되도록 함.
(Syslog, journald, listen, /dev/log, 원격지 등…)
-. User / Group : HAProxy를 실행할 사용자 및 그룹 지정. 지정하지 않으면 ROOT가 실행합니다.
(반드시 루트 권한이 아닌 일반 사용자 계정으로 실행하도록 습관을 기르는것이 좋습니다.)
-. stats socket : 서버 및 상태 확인을 동적으로 비활성화 하고, 서버의 로그 밸런싱 가중치를 변경
-. nbproc /nbthead : HAProxy 시작시 각각의 프로세스와 Thread 수를 지정합니다.
-. ssl-default-bind-ciphers : SSL 및 TLS Ciphers 를 지정
-. ssl-default-bind-options : 이전 프로토콜에 대한 지원을 비활성화 하는 옵션
(ex. TLSv1.2 이상을 사용하는 연결만 수락)
[Defaults]
뒤에 오는 Frontend 및 Backend 섹션에 적용할 공통적인 설정을 작성합니다.
(뒤에 Frontend, Backend 섹션에서 설정을 덮어쓸 수 있습니다.)
Defaults 섹션 예 |
defaults timeout connect10s timeout client30s timeout server30s log global mode http option httplog maxconn3000 |
-. Timeout connect / Timeout client / Timeout server :
- timeout connect - Backend 연결될때까지 대기하는 시간(접미사 s는 초단위)
- timeout client - client가 반응이 올것으로 예상하는 시간
- timeout server - Backend 서버가 반응이 올것으로 예상하는 시간(시간이 지나면 timeout으로 close)
-. Log global : 로그는 글로벌 설정을 따른다.
-. Mode http : http 프로토콜을 사용하는 로그밸런싱 모드
(트래픽을 단순 tcp 수준이 아닌 HTTP 메시지를 사용할 수있는지 정의)
-. Option httplog : 로그 작성시 더 다양한 format 으로 작성, 일반적으로 option httplog 을 선호합니다.
로그 수준을 다운그레이드 하고자 하는 경우, 이후 frontend, Backend 섹션에서 다운그레이드 가능합니다.
-. Maxconn : 최대 연결수 지정(기본 2000)
[Frontend]
클라이언트가 연결될 수 있는 IP Address & Port 를 작성합니다.
다양한 Frontend 섹션을 만들어 추가할 수 있다.
예제에서는 www.mysite.com 이라는 label로 구분한다
Frontend 섹션 예 |
frontend www.mysite.com bind10.0.0.3:80 bind10.0.0.3:443 ssl crt /etc/ssl/certs/mysite.pem http-request redirect scheme https unless{ ssl_fc } use_backend api_servers if{ path_beg /api/ } default_backend web_servers |
-. Bind : IP와 Port 종종 ssl과 crt arguments를 작성합니다.
-. Http-request redirect : http를 https로 리다이렉트 한다.
-. Use_backend : 클라이언트로부터 들어오는 request를 뒷단 서버로 전달할 설정
If path_beg /api/와 같이, 특정 Path를 구분하여 전달 할 수도 있다.
-. Default_backend : use_backend의 규칙에 해당하지 않는 트래픽은 기본적으로 default_backend로 전달.
만약, use_backend or default_backend 둘다 사용되지 못했다면, 503 Service Unavailable error가 발생한다.
[Backend]
로드밸런스 단계로, Client로 부터 들어온 트래픽을 실제 뒷단 서버로 전달하는 섹션이다.
backend 섹션 예 |
backend web_servers balance roundrobin cookieSERVERUSED insert indirect nocache option httpchk HEAD / default-server check maxconn20 server server1 10.0.1.3:80 cookie server1 server server2 10.0.1.4:80 cookie server2 |
-. Balance : 로드 밸런스할 방식을 선택합니다. (roundrobin 방식 / leastconn 방식 등…)
-. Cookie : 쿠키 기반 지속성을 활성화 할 때 사용
-. Option httpchk : 상태확인을 Layer 4레벨이 아닌 Layer 7 단계로 백엔드 서버 체크를 합니다.
응답하지 않는 서버는 더 이상 요청을 처리하지 않습니다.
-. Default-server : 상태확인, 최대 연결 활성화 등과 같이 뒤따르는 모든 행동에 대한 기본값을 구성
-. Server : 실제 뒷단 서버의 IP와 Port를 작성합니다.
[Listen]
다음은 통계 페이지를 구성하는 간단한 예입니다.
Listen 섹션 예 |
listen stats bind*:8404 stats enable stats uri/monitor stats refresh5s |
[출처]
https://www.haproxy.com/blog/the-four-essential-sections-of-an-haproxy-configuration/
'IT Knowledge > HAProxy' 카테고리의 다른 글
HAProxy Log 설정하기! (2) | 2022.05.17 |
---|---|
keepalived 설정 파일 옵션 정리 (0) | 2022.01.29 |
Keepalived 설치 및 동작방식(feat. HAProxy의 고가용성 구성) (0) | 2022.01.29 |
HAProxy Install(디렉토리 지정 설치) (0) | 2022.01.24 |
HAProxy, 오픈소스 로드 밸런서 (0) | 2020.12.10 |
댓글