대상 풀 사용

대상 풀 리소스는 전달 규칙에서 들어오는 트래픽을 수신하는 인스턴스 그룹을 정의합니다. 전달 규칙이 트래픽을 대상 풀에 연결하면 Google Cloud Load Balancing은 소스 IP와 포트의 해시 및 대상 IP와 포트를 기준으로 이러한 대상 풀에서 인스턴스를 선택합니다. 인스턴스에 트래픽이 분산되는 방법에 대한 자세한 내용은 부하 분산 알고리즘을 참조하세요.

대상 풀은 TCPUDP 트래픽을 처리하는 전달 규칙에만 사용될 수 있습니다. 전달 규칙에 사용하려면 먼저 대상 풀을 만들어야 합니다. 각 프로젝트에는 최대 50개의 대상 풀이 있을 수 있습니다. 대상 풀에는 상태 확인이 하나만 있을 수 있습니다. 네트워크 부하 분산은 httpHealthChecks만 지원합니다.

네트워크 부하 분산은 Cloud Load Balancing 자동 확장 처리를 지원하므로 사용자는 이를 통해 CPU 사용률이나 커스텀 Stackdriver Monitoring 측정항목을 기준으로 대상 풀의 인스턴스 그룹에서 자동 확장을 수행할 수 있습니다. 자세한 내용은 네트워크 부하 분산을 기준으로 확장을 참조하세요.

대상 풀 속성

대상 풀을 구성하는 속성은 다음과 같습니다.

name
[필수] 이 대상 풀의 이름입니다. 이 프로젝트 내에서 고유한 이름으로서 1~63자여야 하며 정규 표현식 [a-z]([-a-z0-9]*[a-z0-9])?와 일치해야 합니다. 다시 말해 첫 문자는 소문자이고 그 다음에 오는 문자는 대시, 소문자, 숫자여야 합니다. 단, 마지막 문자에는 대시를 사용할 수 없습니다.
description
[선택사항] 이 대상 풀에 대해 사용자가 정의한 설명입니다.
region

[필수] 이 대상 풀을 배치할 지역의 정규화된 URL입니다. 원하는 인스턴스를 배치할 지역과 동일한 지역이어야 합니다. 예를 들어 다음과 같습니다.

"region" : "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]"
healthChecks[ ]

[선택사항] 이 대상 풀의 상태 확인 목록으로, 선택사항입니다. 특정 대상 풀에 상태 확인 하나만 연결할 수 있습니다. 자세한 내용은 상태 확인을 참조하세요.

instances[ ]

[필수] 이 대상 풀의 트래픽을 처리할 인스턴스 URL의 목록입니다. 모든 인스턴스는 대상 풀과 동일한 지역에 있어야 하지만, 여러 인스턴스가 단일 지역 내의 여러 영역에 속할 수 있습니다. 예를 들어 다음과 같습니다.

"instances" : [
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]",
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"
]
sessionAffinity

[선택사항] 백엔드 가상 머신 인스턴스를 선택하는 데 사용되는 방법을 제어합니다. 이 값은 대상 풀을 만드는 도중에만 설정할 수 있습니다. 이 값을 설정하고 나면 수정할 수 없습니다. 해시 방법은 다음 5개 값의 하위 집합을 기반으로 백엔드를 선택합니다.

  • 소스/대상 IP
  • 소스/대상 포트
  • 레이어 4 프로토콜(TCP, UDP)

가능한 해시는 다음과 같습니다.

NONE(해시 지정 안 함)(기본값)
5튜플 해싱으로, 소스 IP와 대상 IP, 소스 포트와 대상 포트, 프로토콜을 사용합니다. 각각의 새 연결은 임의의 인스턴스에 배정될 수 있지만 인스턴스가 정상 상태이면 특정 연결의 모든 트래픽은 같은 인스턴스에서 유지됩니다.
CLIENT_IP_PROTO
3튜플 해싱으로, 소스 IP와 대상 IP, 프로토콜을 사용합니다. 클라이언트에서 나오는 모든 연결은 동일 프로토콜이 사용되고 인스턴스가 정상 상태인 경우 동일 인스턴스에 배정됩니다.
CLIENT_IP
2튜플 해싱으로, 소스 IP와 대상 IP를 사용합니다. 클라이언트에서 나오는 모든 연결은 인스턴스가 정상 상태인 동안에 프로토콜에 관계없이 같은 인스턴스에 배정됩니다.

5튜플 해싱은 다수의 가상 머신에 걸쳐 트래픽을 적절히 분산합니다. 하지만 소스 포트가 변경될 수 있으므로 동일한 클라이언트에서 발생하는 두 번째 세션이 다른 인스턴스에 도달할 수 있습니다. 동일한 클라이언트에서 발생하는 모든 세션이 동일한 백엔드(백엔드가 정상인 경우)에 도달하게 하려면 CLIENT_IP_PROTO 옵션이나 CLIENT_IP 옵션을 지정하면 됩니다.

일반적으로 3튜플이나 2튜플 메서드를 선택하는 경우 세션 어피니티는 기본 5튜플 메서드보다 양호하지만 전체 트래픽은 균등하게 분산되지 않을 수 있습니다.

조각화된 UDP 패킷: 조각화될 가능성이 있는 UDP 트래픽의 부하를 분산하는 경우 세션 어피니티를 CLIENT_IP_PROTOCLIENT_IP로 설정합니다. NONE(5튜플 해싱)을 사용하지 마세요. UDP 조각(첫 번째 조각 제외)에는 포트 번호가 없으며 부하 분산기는 포트가 없는 조각을 삭제할 수 있기 때문입니다. 자세한 내용은 부하 분산 및 조각화된 UDP 패킷을 참조하세요.

backupPool

[선택사항] 또 다른 대상 풀 리소스의 정규화된 URL입니다. 이 기능을 사용하려면 failoverRatio도 정의해야 합니다. 기본 대상 풀의 정상적인 가상 머신 비율이 failoverRatio 이하이면 Google Cloud Load Balancing은 트래픽을 백업 풀에 전송합니다. 기본 대상 풀 하나에 백업 풀 한 개만 제공할 수 있습니다. 백업 풀은 기본 대상 풀과 동일한 리전에 있어야 합니다. 기본 대상 풀의 정상 인스턴스 비율이 구성된 장애 조치율 이하이면 Google Cloud Load Balancing은 다음 규칙을 따라 트래픽을 라우팅합니다.

  1. 기본 대상 풀이 비정상으로 선언되면(장애 조치율 이하) 트래픽은 백업 풀의 정상 인스턴스로 전송됩니다.
  2. 기본 대상 풀이 비정상으로 선언되었지만 백업 풀에 정상 인스턴스가 없으면 트래픽은 기본 풀에 남아 있는 정상 인스턴스로 전송됩니다.
  3. 기본 풀이 비정상이며 어느 풀에도 정상 인스턴스가 남아 있지 않으면 트래픽은 삭제되지 않도록 기본 풀의 모든 인스턴스로 전송됩니다.
  4. 기본 풀에 인스턴스가 포함되어 있지 않으며 백업 풀에 정상 인스턴스가 없으면 트래픽은 삭제되지 않도록 백업 풀에 있는 모든 인스턴스에 전송됩니다.

장애 조치는 최대 1개 수준만 지원됩니다. 예를 들어 대상 풀 A에 백업 풀 B가 있고 백업 풀 B에 백업 풀 C가 있는 경우 대상 풀 A용 트래픽은 백업 풀 B까지만 도달할 수 있고 백업 풀 C에는 도달할 수 없습니다.

failoverRatio

[선택사항] 0.01.0 사이의 부동 소수점으로, 이 대상 풀이 비정상으로 선언되는 시기를 결정합니다. 예를 들어 이 값을 .1로 설정한 경우 정상 인스턴스 수가 .1(10%) 미만이면 이 대상 풀은 비정상으로 선언됩니다. 장애 조치율이 0.0인 경우 풀이 정상으로 간주되려면 백엔드가 최소 한 개 이상 정상 상태여야 합니다. 장애 조치율을 1.0으로 설정한 경우 풀이 정상으로 간주되려면 모든 인스턴스가 정상 상태여야 합니다. backupPool 필드를 정의하는 경우 이 값을 정의해야 합니다.

아래 다이어그램에서는 장애 조치율과 백업 풀이 함께 작동하는 방식을 시각화하여 보여줍니다.

장애 조치율과 백업 풀 시각화

대상 풀 추가

gcloud compute를 사용하여 대상 풀을 추가하려면 target-pools create 명령어를 사용합니다.

gcloud compute target-pools create TARGET_POOL \
    [--backup-pool BACKUP_POOL] \
    [--description DESCRIPTION] \
    [--failover-ratio FAILOVER_RATIO] \
    [--http-health-check HEALTH_CHECK] \
    [--session-affinity SESSION_AFFINITY; default="NONE"]

API에서 대상 풀을 만들려면 다음 URI로 보내는 HTTP POST 요청을 작성합니다.

https://www.googleapis.com/v1/compute/projects/[PROJECT_ID]/regions/[REGION]/targetPools

{
  "name": name,
  "instances": [
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE]",
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE-2]",
  ]
}

대상 풀에서 인스턴스 추가 또는 제거

gcloud compute를 사용하여 대상 풀에 인스턴스를 추가하려면 target-pools add-instances 명령어를 사용합니다.

gcloud compute target-pools add-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

인스턴스를 제거하려면 target-pools remove-instances 명령어를 사용합니다.

gcloud compute target-pools remove-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

API에서 다음 URI에 POST 요청을 보냅니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeInstance
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addInstance

추가하거나 제거할 인스턴스에 대한 정규화된 URI를 요청 본문에 포함해야 합니다.

{
 "instances": [
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"},
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"}
  ]
}

자세한 내용은 targetPools.addInstance 메서드 및 targetPools.removeInstance 메서드의 API 참조 문서를 확인하세요.

대상 풀 나열

gcloud compute를 사용하여 기존 대상 풀을 나열하려면 target-pools list 명령어를 사용합니다.

gcloud compute target-pools list

더 자세한 출력을 얻으려면 describe 명령어를 사용하여 풀 이름을 지정합니다.

API에서 다음 URI에 GET 요청을 보냅니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools

대상 풀 설명

gcloud compute를 사용하여 단일 대상 풀에 대한 정보를 가져오려면 target-pools describe 명령어를 사용합니다.

gcloud compute target-pools describe TARGET_POOL

API에서 다음 URI에 비어 있는 GET 요청을 보냅니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

인스턴스의 상태 가져오기

대상 풀에 있는 특정 인스턴스나 모든 인스턴스의 현재 상태를 확인하려면 gcloud compute target-pools get-health 명령어를 사용하면 됩니다.

gcloud compute target-pools get-health TARGET_POOL \
    [--fields FIELDS [FIELDS ...]] \
    [--format FORMAT; default="yaml"] \
    [--limit LIMIT] \
    [--raw-links] \
    [--sort-by SORT_BY]

이 명령어는 구성된 상태 확인의 결정에 따라 상태를 정상 또는 비정상으로 반환합니다.

API에서 다음 URI로 보내는 HTTP POST 요청을 작성합니다. 이때 요청 본문에 인스턴스를 명시합니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/getHealth

{
  "instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"
}

대상 풀 삭제

대상 풀을 삭제하려면 먼저 대상 풀을 참조하는 전달 규칙이 없는지 확인해야 합니다. 현재 전달 규칙이 대상 풀을 참조하고 있는 경우에는 전달 규칙을 삭제하여 참조를 제거해야 합니다.

gcloud compute로 대상 풀을 삭제하려면 target-pools delete 명령어를 사용합니다.

gcloud compute target-pools delete TARGET_POOL

API에서 다음 URI에 비어 있는 DELETE 요청을 보냅니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

대상 풀에서 상태 확인 추가 또는 제거

상태 확인 객체는 임의의 대상 풀에 연결하거나 대상 풀에서 연결 해제할 수 있는 독립형 전역 리소스입니다.

대상 풀에 연결된 상태 확인이 없으면 Google Cloud Load Balancing은 모든 인스턴스를 정상으로 처리하고 트래픽을 대상 풀의 모든 인스턴스로 전송합니다. 하지만 상태 확인이 없는 대상 풀의 상태를 쿼리하면 상태가 unhealthy로 반환되어 대상 풀에 상태 확인이 없음을 나타냅니다. 인스턴스를 관리하는 데 도움이 되도록 대상 풀에 상태 확인이 연결되어 있는 것이 좋습니다.

gcloud compute로 대상 풀에 상태 확인을 추가하려면 target-pools add-health-checks 명령어를 사용합니다.

gcloud compute target-pools add-health-checks TARGET_POOL \
    --http-health-check HEALTH_CHECK

상태 확인을 제거하려면 target-pools remove-health-checks 명령어를 사용합니다.

gcloud compute target-pools remove-health-checks TARGET_POOL \
  --http-health-check HEALTH_CHECK

API를 사용하여 상태 확인을 연결하거나 연결 해제하려면 해당 URI로 보내는 HTTP POST 요청을 작성합니다.

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeHealthCheck
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addHealthCheck

연결하거나 연결 해제할 상태 확인을 요청 본문에 포함해야 합니다.

{
  "healthCheck": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/HEALTH_CHECK"
}

자세한 내용은 targetPools.addHealthChecktargetPools.removeHealthCheck의 API 참조 문서를 확인하세요.

백업 대상 풀 추가 또는 제거

대상 풀을 처음 만들 때 기본 대상 풀이 비정상 상태가 되는 경우 트래픽을 수신할 백업 대상 풀을 적용할 수 있습니다.

이전에 백업 대상 풀을 설정한 적이 없는 경우 기능이 올바르게 작동할 수 있도록 상태 확인도 설정해야 합니다.

gcloud compute로 백업 풀 리소스를 업데이트하려면 target-pools set-backup 명령어를 사용합니다.

gcloud compute target-pools set-backup TARGET_POOL \
    --backup-pool BACKUP_POOL \
    --failover-ratio FAILOVER_RATIO

API를 통해 백업 풀 업데이트 또는 제거 요청을 하려면 다음 URI로 POST 요청을 전송합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/setBackup?failoverRatio=FAILOVER

{
  "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/BACKUP_POOL"
}

빈 대상을 정의하거나 장애 조치율을 정의하지 않으면 이 대상 풀에서 백업 풀 동작이 중지됩니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...