5장. HAProxy 설정
이 장에서는 고가용성 환경에 HAProxy 서비스를 배포할 때 관리자가 직면할 수 있는 일반적인 구성 옵션을 강조하는 기본 설정 구성에 대해 설명합니다.
HAProxy에는 로드 밸런싱을 위한 자체 스케줄링 알고리즘 세트가 있습니다. 이러한 알고리즘은 5.1절. “HAProxy 스케줄링 알고리즘” 에 설명되어 있습니다.
HAProxy는
/etc/haproxy/haproxy.cfg
파일을 편집하여 구성됩니다.
HAProxy를 사용한 로드 밸런서 구성은 구성에 대한 다음 5개의 섹션으로 구성됩니다.
- 4개의 하위 섹션으로 구성된 proxies 섹션:
5.1. HAProxy 스케줄링 알고리즘
로드 밸런싱에 대한 HAProxy 예약 알고리즘은
/etc/haproxy/haproxy.cfg
구성 파일의 backend
섹션에 있는 balance
매개변수에서 편집할 수 있습니다. HAProxy는 여러 백엔드가 있는 구성을 지원하며 각 백엔드는 스케줄링 알고리즘을 사용하여 구성할 수 있습니다.
- 라운드 로빈 (
roundrobin
) - 실제 서버 풀 주위에 각 요청을 순차적으로 배포합니다. 이 알고리즘을 사용하면 모든 실제 서버가 용량 또는 로드와 관계없이 동일하게 처리됩니다. 이 스케줄링 모델은 라운드 로빈 DNS와 유사하지만 호스트 기반이 아닌 네트워크 연결 기반이므로 더 세분화됩니다. 로드 밸런서 라운드 로빈 스케줄링은 캐시된 DNS 쿼리로 인한 불균형이 발생하지 않습니다. 그러나 HAProxy에서는 이 스케줄러를 사용하여 서버 가중치의 구성을 수행할 수 있으므로 활성 서버 수는 백엔드당 4095로 제한됩니다.
- 정적 라운드 로빈 (
static-rr
) - 각 요청을 실제 서버 풀에 순차적으로 배포하지만 Round-Robin 에서는 서버 가중치 구성을 동적으로 허용하지 않습니다. 그러나 서버 가중치의 정적 특성으로 인해 백엔드의 활성 서버 수에 제한이 없습니다.
- 최소 연결 (
leastconn
) - 활성 연결이 더 적은 실제 서버에 더 많은 요청을 배포합니다. 세션 또는 연결 길이가 다양한 동적 환경을 사용하는 관리자는 이 스케줄러가 환경에 더 적합할 수 있습니다. 또한 관리자가 이 스케줄러를 사용하여 이동 중에 가중치를 조정할 수 있으므로 서버 그룹이 다른 용량을 가진 환경에도 이상적입니다.
- 소스 (
source
) - 소스 IP 주소를 요청하고 실행 중인 모든 서버의 가중치로 나뉘어 요청을 받을 서버를 결정하여 서버에 요청을 배포합니다. 모든 서버가 실행 중인 시나리오에서는 소스 IP 요청이 동일한 실제 서버에서 일관되게 제공됩니다. 실행 중인 서버의 수 또는 가중치가 변경되면 해시/체중 결과가 변경되었기 때문에 세션이 다른 서버로 이동될 수 있습니다.
- URI (
uri
) - 전체 URI(또는 URI의 구성 가능한 부분)를 해시하여 서버에 요청을 배포하고, 실행 중인 모든 서버의 가중치를 지정하여 요청할 서버를 결정합니다. 모든 활성 서버가 실행 중인 시나리오에서는 대상 IP 요청이 동일한 실제 서버에서 일관되게 제공됩니다. 이 스케줄러는 URI의 디렉토리 부분 시작 시 문자 길이와 해시 결과를 계산하기 위해 URI의 슬래시로 지정된 URI의 디렉터리 깊이로 추가로 구성할 수 있습니다.
- URL 매개변수 (
url_param
) - 소스 URL 요청에서 특정 매개변수 문자열을 찾고 실행 중인 모든 서버의 가중치로 해시 계산을 수행하여 서버에 요청을 배포합니다. URL에서 매개변수가 없는 경우 스케줄러는 기본적으로 Round-robin 스케줄링으로 설정됩니다. 수정자는 POST 매개변수를 기반으로 사용할 수 있으며, 관리자가 해시 결과를 계산하기 전에 관리자가 특정 매개 변수의 weight에 할당하는 최대 옥텟 수에 따라 대기 제한을 사용할 수 있습니다.
- 헤더 이름 (
hdr
) - 각 소스 HTTP 요청에서 특정 헤더 이름을 확인하고 실행 중인 모든 서버의 가중치로 해시 계산을 수행하여 서버에 요청을 분산합니다. 헤더가 없는 경우 스케줄러는 기본적으로 Round-robin 스케줄링으로 설정됩니다.
- RDP Cryostat (
rdp-cookie
) - 모든 TCP 요청에 대해 RDP 쿠키를 검색하고 실행 중인 모든 서버의 가중치로 나눈 해시 계산을 수행하여 서버에 요청을 배포합니다. 헤더가 없는 경우 스케줄러는 기본적으로 Round-robin 스케줄링으로 설정됩니다. 이 방법은 세션 무결성을 유지 관리할 때 지속성에 이상적입니다.