내부 TCP/UDP 부하 분산 문제해결

이 가이드에서는 Google Cloud Platform 내부 TCP/UDP 부하 분산기의 구성 문제를 해결하는 방법을 설명합니다.

개요

이 가이드에서 다루는 문제의 유형은 다음과 같습니다.

  • 일반 연결 문제
  • 백엔드 장애 조치 문제(베타)
  • 다음 홉으로 사용되는 부하 분산기의 문제(베타)

시작하기 전에

문제를 조사하기 전에 다음 페이지를 숙지하시기 바랍니다.

일반 연결:

장애 조치:

다음 홉:

일반 연결 문제해결

  • 증상: 다른 리전의 VM 클라이언트에서 내부 TCP/UDP 부하 분산기에 연결할 수 없습니다.
  • 이유: 내부 TCP/UDP 부하 분산기는 리전을 기반으로 합니다. 해당 리전에서만 액세스할 수 있습니다.

내부 TCP/UDP 부하 분산기에 연결할 수 없는 경우 다음 문제를 확인하세요.

  • 백엔드 VM에 대한 상태 확인을 허용하도록 인그레스 허용 방화벽 규칙이 정의되어 있는지 확인합니다.
  • 인그레스 허용 방화벽 규칙이 클라이언트에서 백엔드 VM으로 들어오는 트래픽을 허용하는지 확인합니다.
  • 부하 분산기에 연결하는 클라이언트가 부하 분산기와 동일한 리전에 있는지 확인합니다.

공유 VPC 문제해결

공유 VPC를 사용 중인데 특정 서브넷에 새 내부 TCP/UDP 부하 분산기를 만들 수 없는 경우 조직 정책 때문일 수 있습니다. 조직 정책에서 허용되는 서브넷 목록에 서브넷을 추가하거나 조직 관리자에게 문의하세요. 자세한 내용은 constraints/compute.restrictSharedVpcSubnetworks 제약조건을 참조하세요.

장애 조치 문제해결

내부 TCP/UDP 부하 분산기의 장애 조치를 구성한 경우 발생할 수 있는 문제는 다음 섹션에서 설명합니다.

연결

  • 하나 이상의 장애 조치 백엔드를 지정했는지 확인합니다.
  • 장애 조치 정책 설정을 확인합니다.
    • 장애 조치율
    • 모든 백엔드 VM이 비정상적인 경우 트래픽 차단
    • 장애 조치 시 연결 드레이닝 사용 중지

관리형 인스턴스 그룹 및 장애 조치 관련 문제

  • 증상: 활성 풀이 기본 백엔드와 장애 복구 백엔드를 오락가락하며 바꿉니다.
  • 가능한 이유: 관리형 인스턴스 그룹을 자동 확장 및 장애 조치와 함께 사용하면 활성 풀이 기본 백엔드와 장애 조치 백엔드 간에 장애 조치 및 장애 복구를 반복할 수 있습니다. 이 설정이 도움이 되는 배포도 있으므로 GCP는 관리형 인스턴스 그룹에 장애 조치를 구성하지 못하게 하지 않습니다.

장애 조치 그룹의 연결 드레이닝 제한 사용 중지

백엔드 서비스가 프로토콜 TCP로 설정된 경우에만 연결 드레이닝을 사용 중지합니다.

연결 드레이닝이 사용 중지된 상태에서 UDP를 사용하여 백엔드 서비스를 만드는 경우 다음 오류 메시지가 표시됩니다.

gcloud beta compute backend-services create my-failover-bs
  --load-balancing-scheme internal
  --health-checks my-tcp-health-check
  --region us-central1
  --no-connection-drain-on-failover
  --drop-traffic-if-unhealthy
  --failover-ratio 0.5
  --protocol UDP
ERROR: (gcloud.beta.compute.backend-services.create) Invalid value for
[--protocol]: can only specify --connection-drain-on-failover if the protocol is
TCP.

장애 조치 백엔드용 API 버전

현재 장애 조치 옵션은 베타 API에서만 사용할 수 있습니다. failover options가 유효한 필드가 아니라는 오류와 함께 백엔드 서비스 생성에 실패하면 올바른 API(gcloud beta compute backend-services...)를 사용하여 백엔드 서비스를 생성했는지 확인합니다.

트래픽이 예기치 않은 백엔드 VM으로 전송됨

클라이언트 VM이 부하 분산기의 백엔드 VM을 겸하는 경우 부하 분산기 전달 규칙의 IP 주소로 전송된 연결에 항상 백엔드 VM 자체에서 응답하는 것이 정상적인 동작입니다. 자세한 내용은 단일 클라이언트에서 연결 테스트부하 분산된 VM에서 요청 전송을 참조하세요.

클라이언트 VM이 부하 분산기의 백엔드 VM이 아닌 경우:

  • 단일 클라이언트 요청의 경우 단일 클라이언트에서 연결 테스트를 참조하여 이 방법의 제한사항을 이해합니다.

  • 인그레스 허용 방화벽 규칙을 상태 확인을 허용하도록 구성했는지 확인합니다.

  • 장애 조치 구성의 경우 활성 풀의 구성원이 작동하는 방식과 GCP가 장애 조치 및 장애 복구를 수행하는 시기를 이해해야 합니다. 부하 분산기의 구성을 검사하세요.

    • GCP Console을 사용하여 각 백엔드 인스턴스 그룹의 정상 백엔드 VM 수를 확인합니다. 또한 GCP Console은 활성 풀에 있는 VM을 표시합니다.

    • 부하 분산기의 장애 조치율이 적절하게 설정되어 있는지 확인합니다. 예를 들어 기본 VM이 10개이고 장애 조치율이 0.2로 설정되어 있으면 정상 상태인 기본 VM이 2개 미만(10 × 0.2 = 2)일 때 GCP가 장애 조치를 수행한다는 의미입니다. 장애 조치율 0.0은 특별한 의미가 있습니다. GCP는 정상 상태인 기본 VM이 없을 때 장애 조치를 수행합니다.

기존 연결이 장애 조치 또는 장애 복구 중에 종료됨

백엔드 서비스의 장애 조치 정책을 수정합니다. 장애 조치 시 연결 드레이닝이 사용 설정되었는지 확인합니다.

다음 홉으로 사용되는 부하 분산기의 문제해결

커스텀 정적 경로의 다음 홉으로 내부 TCP/UDP 부하 분산기를 설정하면 다음과 같은 문제가 발생할 수 있습니다.

연결

  • 백엔드를 핑할 수 없는 경우 내부 TCP/UDP 부하 분산기가 다음 홉으로 설정된 경로는 TCP 및 UDP 트래픽에만 지원됩니다. ICMP와 같은 다른 프로토콜 패킷은 삭제됩니다.

  • 내부 TCP/UDP 부하 분산기를 커스텀 정적 경로의 다음 홉으로 사용할 때 모든 TCP 및 UDP 트래픽은 부하 분산기의 내부 백엔드 서비스에 구성된 프로토콜과 부하 분산기의 내부 전달 규칙에 구성된 포트에 관계없이 부하 분산기의 정상 백엔드 VM에 전달됩니다.

  • 커스텀 정적 경로의 다음 홉을 통해 백엔드 VM에 전달되어야 하는 트래픽 소스를 올바르게 식별하는 인그레스 허용 방화벽 규칙을 만들었는지 확인합니다. 백엔드 VM에 도달하는 패킷은 커스텀 정적 경로를 통해 전달되는 경우에도 소스 IP 주소를 보존합니다.

목적지 범위 값이 잘못됨

커스텀 정적 경로의 목적지 범위는 VPC 네트워크의 어느 서브넷 경로보다도 구체적일 수 없습니다. 커스텀 정적 경로를 만들 때 다음 오류 메시지가 표시되는 경우:

Invalid value for field 'resource.destRange': [ROUTE_DESTINATION].
[ROUTE_DESTINATION] hides the address space of the network .... Cannot change
the routing of packets destined for the network.
  • 서브넷 경로와 정확히 일치하거나 더 구체적인(마스크가 더 긴) 목적지를 사용하여 커스텀 정적 경로를 만들 수 없습니다. 자세한 내용은 적용 여부 및 순서를 참조하세요.

  • 패킷이 예상치 못한 목적지로 이동하는 경우 VPC 네트워크에서 목적지가 더 구체적인 다른 경로를 삭제합니다. GCP 경로 선택 방식을 이해하려면 라우팅 순서를 살펴보세요.

다음 홉용 API 버전

현재 다음 홉(--next-hop-ilb)으로 사용되는 내부 TCP/UDP 부하 분산기는 베타 API에서만 사용할 수 있습니다. 정적 경로 생성에 실패한 경우 올바른 API(gcloud beta compute routes create...)를 사용하여 경로를 만들었는지 확인합니다.

네트워크 태그가 지원되지 않음

다음 홉이 내부 TCP/UDP 부하 분산기인 경우 커스텀 정적 경로에 네트워크 태그를 할당할 수 없습니다. 예를 들어 다음 gcloud 명령어는 아래 나열된 오류 메시지를 생성합니다.

$ gcloud beta compute routes create example-route \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=internal-lb-forwarding-rule \
--tags='my_tag'

ERROR: (gcloud.beta.compute.routes.create) Could not fetch resource:
 - Invalid value for field 'resource.tags': ''. Tag is not supported for routes
 with next hop ilb.

다음 단계

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

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