xDS 로드 밸런싱

xDS 로드 밸런싱 (xDS Load Balancing)

enable_xds_load_balancing이 Consul 서버 간에 xDS 스트림을 어떻게 분산하는지, 언제 활성화하고 언제 비활성화로 두어야 하는지 설명하는 문서예요.

출처: 문서

본문

이 페이지는 enable_xds_load_balancing이 Consul 서버 간에 xDS 스트림을 어떻게 분산하는지, 언제 활성화하고 언제 비활성화로 두어야 하는지 설명해요.

개요 (Overview)

서비스 메시 배포에서 각 사이드카 Envoy(또는 Consul 데이터플레인)는 Consul 컨트롤 플레인에 장수명 xDS 스트림을 유지해요. 다중 서버 클러스터에서는 한 서버가 병목이 되지 않도록 이러한 스트림이 정상 서버들에 분산되어야 해요.

enable_xds_load_balancing이 활성화되면 각 서버는 클러스터 크기와 연결된 프록시 수를 기반으로 스트림 한도를 적용해요. 서버가 한도 이상이면 새 스트림을 거부해 클라이언트가 다른 서버에 다시 연결하도록 해요.

이것이 중요한 이유 (Why this matters)

xDS 로드 밸런싱 없이 한 서버가 불균형한 수의 스트림을 받을 수 있어요. 이는 다음을 유발할 수 있어요:

  • 서버 간 고르지 않은 리소스 활용.
  • 영향을 받는 프록시에 대한 더 높은 업데이트 지연 시간.
  • 과부하된 서버가 실패하면 더 큰 장애 영향 범위(blast radius).

xDS 로드 밸런싱이 활성화되면 안정 상태 운영과 클러스터 변경 중에도 스트림 분포가 더 균등하게 유지돼요.

enable_xds_load_balancing 구성 (Configure enable_xds_load_balancing)

기본값은 false예요. 이 동작을 활성화하려면 명시적으로 true로 설정해야 해요.

VM 및 베어메탈 서버 (VM and bare metal servers)

performance {
  enable_xds_load_balancing = true
}

비활성화하려면 필드를 생략하거나 다음으로 설정해요:

performance {
  enable_xds_load_balancing = false
}

Kubernetes (Helm)

server.extraConfig를 통해 값을 설정해요:

server:
  extraConfig: |
    {
      "performance": {
        "enable_xds_load_balancing": true
      }
    }

밸런싱 작동 방식 (How balancing works)

각 서버는 다음을 기반으로 최대 스트림 수를 계산해요:

  • 카탈로그의 메시 프록시 총 수.
  • 정상 Consul 서버 수.
  • 정상적인 변동 중 채터(churn)를 줄이기 위한 10% 버퍼.

서버가 한도 이상일 때 새 xDS 연결이 도착하면 서버는 RESOURCE_EXHAUSTED를 반환하고 클라이언트에게 다른 서버를 시도하라고 요청해요.

한도는 다음 경우에 자동으로 업데이트돼요:

  • 프록시 서비스가 추가되거나 제거될 때.
  • 서버가 조인하거나, 떠나거나, 비정상이 될 때.

배포 지침 (Deployment guidance)

데이터플레인이 서버를 동적으로 발견하면 로드 밸런싱 거부를 받았을 때 다른 서버를 재시도할 수 있어요. 이 모델에서는 xDS 로드 밸런싱을 활성화해요.

Consul 서버 앞에 위치한 외부레이어 4 로드 밸런서 (External layer-4 load balancer in front of Consul servers)

서버 앞에 외부 로드 밸런서(NLB, HAProxy, Envoy Gateway)를 두면 enable_xds_load_balancing = false로 유지하고 로드 밸런서가 연결을 분산하도록 해요.

단일 정적 서버 주소 (권장하지 않음) (Single static server address)

모든 데이터플레인이 단일 서버 주소를 사용하고 로드 밸런서가 없다면, xDS 로드 밸런싱을 활성화하면 첫 번째 서버가 한도에 도달한 후 많은 데이터플레인이 스트림을 수립하지 못할 수 있어요. 디스커버리를 사용하거나 여러 서버 주소를 제공하세요.

설정 확인 (Verify the setting)

에이전트 self 엔드포인트를 사용해요:

$ curl -s http://localhost:8500/v1/agent/self | jq '.DebugConfig.EnableXDSLoadBalancing'

xDS 밸런싱 모니터링 (Monitor xDS balancing)

다음 메트릭을 추적해요:

$ curl -s http://localhost:8500/v1/agent/metrics?format=prometheus | grep xds

더 알아보기 (Learn more)