대상 그룹
대상 그룹(Target Group)은 하나 이상의 등록된 대상에 요청을 라우팅하는 데 사용됩니다. 대상은 인스턴스, IP 주소와 같은 리소스로, 로드 밸런서에 유입된 트래픽이 대상들에 분산됩니다. 리스너(Listener)에서 수신한 트래픽은 각 리스너에서 설정한 조건에 따라 대상 그룹으로 라우팅됩니다. 대상 그룹에는 상태 확인 설정을 적용할 수 있으며, 대상 그룹에 포함된 모든 대상에 대하여 상태를 확인합니다.
대상 그룹 프로토콜과 라우팅 구성
대상 그룹은 프로토콜을 지정할 수 있고 대상 단위로 포트를 지정할 수 있습니다. 카카오클라우드에서는 HTTP
, HTTPS
, TCP
, UDP
, PROXY
프로토콜을 지원하며, 연결하려는 로드 밸런서 또는 리스너에 따라 대상 그룹 프로토콜 선택이 제한됩니다. 하나의 대상 그룹은 동일한 로드 밸런서의 여러 리스너에 연결될 수 있으나 두 개 이상의 로드 밸런서와는 연결할 수 없습니다.
로드 밸런서 | 리스너 프로토콜 | 대상 그룹 프로토콜 |
---|---|---|
ALB | HTTP | HTTP , PROXY |
HTTPS | HTTP | |
NLB | TCP | HTTP , HTTPS , TCP , PROXY |
UDP | UDP | |
TLS | TCP | |
DSRNLB | TCP | TCP |
UDP | UDP |
- DSRNLB에서 UDP 리스너를 사용 시 대상 인스턴스에 추가적인 설정이 필요하며, 특정 운영 체제만 지원합니다. 자세한 정보는 How-to Guides 문서를 확인하시기 바랍니다.
상태 확인 설정
로드 밸런서는 대상의 상태를 확인하기 위해 일정 주기로 상태 확인을 수행합니다. 대상 그룹에 상태 확인 설정을 적용하여 연결된 리소스의 상태를 확인하고 장애가 발생한 서버를 트래픽 분배 대상에서 제외할 수 있습니다.
대상 그룹을 생성할 때 상태 확인 사용 여부를 선택할 수 있습니다. 상태 확인을 사용하지 않는 경우에는 대상의 운영 상태가 No Monitor로 표시됩니다. 상태 확인 설정을 사용 상태로 설정하면, 상태 확인 유형과 체크 주기, 타임아웃 시간, 상태 전환 기준(성공 및 실패)을 설정할 수 있습니다. 유형으로 HTTP/HTTPS를 선택하는 경우에는 HTTP 메서드, 버전, 상태 코드, 체크 경로를 추가로 설정할 수 있습니다.
Direct Server Return Network Load Balancer(DSRNLB)는 상태 확인 설정을 위해 대상 인스턴스에 추가적인 설정이 필요합니다. 자세한 내용은 How-to Guides를 참조하세요.
대상 그룹의 프로토콜에 따라 적용 가능한 상태 확인 유형은 다음과 같습니다.
대상 그룹 프로토콜과 상태 확인 유형 조합
대상 그룹 프로토콜 | 상태 확인 유형 |
---|---|
HTTP | HTTP , PING |
HTTPS | HTTPS , PING |
TCP | PING , TCP |
UDP | TCP , HTTP |
PROXY | PING , TCP |
상태 확인 유형
상태 확인 유형 | 설명 |
---|---|
PING | 대상에 패킷을 전송하고 대상이 보낸 응답을 확인(ICMP Ping) |
HTTP | 설정한 경로로 패킷을 전송하고 응답을 확인 |
HTTPS | 인증서를 사용하는 대상을 대상으로 HTTP와 동일한 방식으로 응답을 확인 |
TCP | TCP 프로토콜 포트를 이용하여 대상의 상태를 확인 |
대상
대상 그룹으로 전달된 트래픽은 대상에 분산됩니다. 대상 그룹이 연결된 로드 밸런서와 동일한 가용 영역(Availability Zone) 및 Virtual Private Cloud(VPC)에 있는 인스턴스를 대상으로 선택할 수 있습니다. 대상 등록 시에는 포트 번호를 함께 지정하며, 한 대상 그룹 내에서는 동일한 인스턴스와 포트 조합을 중복해서 등록할 수 없습니다. 이때 인스턴스와 포트 조합을 판단하는 기준은 인스턴스의 기본 네트워크 인터페이스의 기본(Primary) 프라이빗 IP입니다. 사용하지 않는 대상은 연결을 해제할 수 있습니다. 연결 해제 시 라우팅 대상에서만 해제되며 인스턴스에는 영향을 미치지 않습니다.
- DSRNLB는 대상의 포트와 이 대상이 속한 대상 그룹에 연결된 리스너 프로토콜의 포트가 동일해야 정상적으로 작동합니다. 자세한 내용은 How-to Guides를 참조하세요.
- DSRNLB 사용 시 대상 인스턴스에 추가적인 설정이 필요합니다. 자세한 내용은 How-to Guides를 참조하세요.
- DSRNLB 사용 시 로드 밸런서와 대상 인스턴스는 동일한 서브넷에 존재해야 합니다.
상태
대상은 두 가지의 상태 정보를 확인할 수 있습니다. 리소스가 정상적으로 생성되었는지 또는 수정이나 삭제가 진행 중인지를 알려주는 프로비저닝(Provisioning) 상태와, 생성된 리소스가 사용 가능한 상태인지를 알려주는 운영(Operating) 상태입니다. 두 가지의 상태 모두 하위 리소스의 상태를 조합하여 표시됩니다.
대상의 상태를 확인하기 위해서는 상태 확인 설정을 적용해야 합니다. 상태 확인 설정 적용 시 대상 그룹에 등록된 모든 대상에 대하여 주기적으로 상태 확인을 수행합니다. 각각의 대상 상태는 대상 그룹 상세에서 확인할 수 있으며, 정상 상태가 아닌 대상은 트래픽 분산 대상에서 자동으로 제외됩니다. 이후 다시 정상 상태로 판단되면 트래픽을 라우팅합니다.
대상의 프로비저닝 상태
상태 | 정의 |
---|---|
Active | 대상 프로비저닝 성공 |
Error | 대상 프로비저닝 실패 |
Creating | 대상 생성 진행 중 |
Updating | 대상 수정 진행 중 |
Deleting | 대상 삭제 진행 중 |
대상의 운영 상태
상태 | 정의 |
---|---|
Healthy | 대상이 정상적으로 동작함 |
Draining | 대상의 가중치가 0으로 입력된 상태 |
Offline | 대상 그룹에 인스턴스를 추가하여 상태 확인을 기다리는 중 |
No Monitor | 상태 확인을 사용하지 않음 |
Unhealthy | 상태 확인에 응답하지 않거나 상태 확인에 실패 |
Invalid | 대상으로 등록된 인스턴스가 삭제됨 |
보안 그룹
보안 그룹(Security Group)은 로드 밸런서와 연결하여 로드 밸런서에 도달하고 나갈 수 있는 트래픽을 제어합니다. 로드 밸런서가 정상적으로 동작하기 위해서는 상태 확인용 포트 및 IP가 통신할 수 있도록 규칙을 구성해야 합니다. 이를 위해 해당 IP를 대상으로 추가한 인스턴스의 보안 그룹 인바운드 규칙을 추가해야 합니다.
상태 확인 유형을 Ping
으로 사용 시, 같은 방법으로 ICMP 포트를 인바운드 규칙으로 설정해야 합니다.
알고리즘
대상 그룹의 알고리즘은 대상에 트래픽을 라우팅하는 방식입니다. 카카오클라우드 Load Balancing 서비스에서 제공하는 알고리즘은 다음의 3가지입니다.
라운드 로빈(Round Robin)
: 대상 그룹 내의 대상에 순차적으로 트래픽을 분산하는 방식.최소 연결(Least Connections)
: 연결 수가 적은 대상에 우선적으로 트래픽을 분산하는 방식.소스 IP(Source IP Hash)
: 동일한 IP 헤더를 사용하는 클라이언트는 반드시 동일한 대상에게 트래픽을 전송하는 방식.
고정 세션
기본적으로 선택한 알고리즘에 따라 적절한 대상으로 트래픽이 라우팅됩니다. 한편, 고정 세션(Sticky Session) 기능을 사용하여 로드 밸런서가 사용자의 세션을 특정 대상에 바인딩할 수 있습니다. 이렇게 하면 세션 중에 사용자로부터 들어오는 모든 요청이 동일한 대상으로 전송됩니다. 이 기능은 클라이언트에게 지속성을 제공하기 위해 상태 정보를 유지하는 서버에 유용합니다.
카카오클라우드는 HTTP Cookie, App Cookie, 소스 IP 유형의 고정 세션 기능을 제공합니다. 리스너와 대상 그룹의 프로토콜 조합에 따라 설정 가능한 유형이 다르며, 설정한 유형에 따라 추가 입력이 필요한 항목이 있습니다.
고정 세션 방식
고정 세션 | 정의 |
---|---|
HTTP Cookie | 로드 밸런서가 임의로 생성한 쿠키를 사용해 연결 - Stickiness duration 추가 설정 |
App Cookie | 사용자가 구체적으로 명시한 쿠키 이름을 사용해 연결 - Stickiness duration, Cookie name 추가 설정 |
소스 IP | 클라이언트의 IP를 기준으로 연결 - Sticky IP-netmask 추가 설정 |
리스너와 대상 그룹 프로토콜 조합에 따라 설정 가능한 유형
리스너-대상 그룹 프로토콜 | 고정 세션 |
---|---|
HTTP-HTTP | HTTP Cookie, App cookie |
TCP-TCP | 소스 IP |
UDP-UDP | 소스 IP |
트래픽 가중치
사용자 환경에 따라 대상별로 서로 다른 트래픽 가중치를 부여할 수 있습니다. 대상 그룹 생성 시에는 모든 대상이 동일한 트래픽 가중치를 갖습니다. 대상 그룹 생성 후 트래픽 가중치 설정에서 0 이상 256 이하의 정수 형태로 입력할 수 있으며, 가중치 환산 계산식에 의하여 환산값이 표시됩니다. 그리고 환산된 값의 비율로 트래픽이 분배됩니다.
- 가중치 환산 = (가중치/256)*100 (소수점 첫째 자리 올림)
가중치를 0으로 설정하면 대상의 상태는 Draining
으로 표시되지만, 해당 대상에 연결된 세션은 세션이 종료될 때까지 유지됩니다. 그러므로 대상 그룹에서 특정 대상을 제외하고 싶은 경우, 즉시 연결을 해제하는 것보다 가중치를 0으로 변경 후 해제하는 것이 좋습니다. 서비스를 이용 중인 사용자의 연결이 강제로 종료되지 않기 때문에 안정적으로 서비스를 운영할 수 있습니다.
모니터 포트
모니터 포트에서 상태 확인이 이루어집니다. 기본 설정은 대상의 트래픽 포트와 동일합니다. 사용자의 설정에 따라 다른 포트로 변경할 수 있습니다만, 상태 확인 결과와 실제 서비스 가능 여부가 다를 수 있어 권장하지 않습니다.
대상 포트와 모니터 포트 설정에 따른 경우
모니터 포트 설정 | 대상 상태 확인 결과 | 대상의 실제 서비스 상태 | 로드 밸런싱 작동 여부 | 설명 |
---|---|---|---|---|
대상 포트와 동일 | Healthy | Healthy | O | |
Unhealthy | Unhealthy | X | ||
대상 포트와 다름 | Healthy | Healthy | O | |
Healthy | Unhealthy | O | 서버가 정상적인 서비스를 제공하지만, 상태 확인 결과 Healthy로 판단되어 요청을 전달하지 않는 상태 → 다른 서버의 처리량이 증가해 장애가 발생해도 대응하기 어려움 | |
Unhealthy | Healthy | X | 서버가 정상적인 서비스를 제공하지 못하지만, 상태 확인 결과 Healthy로 판단되어 요청을 전달하는 상태 → 클라이언트는 서비스를 이용할 수 없음 | |
Unhealthy | Unhealthy | X |