서버 리밸런스

서버 리밸런스 (Rebalance Servers)

Pinot 테이블의 세그먼트를 서버 간에 리밸런싱하는 방법을 상세히 안내해요.

출처: 문서

본문

개요 (Overview)

서버 리밸런스는 테이블의 세그먼트를 서버(인스턴스)에 다시 배치해 부하를 분산하고, 서버 추가·제거 시 세그먼트를 재분배하는 작업이에요. 서버 풀이 변하거나 부하 편향이 생기면 리밸런스로 세그먼트 배치를 개선할 수 있어요.

리밸런스 시점 (When to rebalance)

  • 새 서버를 추가해 세그먼트를 확장하고자 할 때.
  • 서버를 제거할 때 나머지 서버로 세그먼트를 옮길 때.
  • 부하가 특정 서버에 편향되어 있을 때 부하를 고르게 재분배하고자 할 때.

리밸런스 모드 (Rebalance modes)

  • With-downtime rebalance — IdealState를 한 번에 대상 할당으로 교체하고 레플리카 가용성을 보장하지 않아요. 비활성화된 테이블은 항상 이 모드로 리밸런싱돼요.
  • No-downtime rebalance — 구성된 레플리카 수가 항상 가용하도록 보장하면서 세그먼트를 이동해요. 이 모드는 ExternalView가 대상 할당에 도달한 뒤 반환해요.

무중단 리밸런스의 옵션 (Options for no-downtime rebalance)

  • minAvailableReplicas — 리밸런스 중 살려둘 최소 레플리카 수(기본값 1). 음수 값을 주면 사용 불가로 허용할 최대 레플리카 수를 의미해요.
  • bestEfforts — 무중단 계약을 달성할 수 없는 엣지 케이스에서도 리밸런스가 실패하지 않도록 계속 진행해요. 비활성화하면(기본값) 무중단 계약을 달성할 수 없을 때 리밸런스가 실패할 수 있어요.

할당 전략 (Assignment strategies)

  • 표준 할당 (Standard/Balanced) — 세그먼트와 레플리카를 서버에 고르게 분산해요.
  • 최적화 할당 (Optimized, 예: replica-group) — 세그먼트를 레플리카 그룹으로 묶어 라우팅과 부하를 최적화해요.

리밸런스 실행 (Performing rebalance)

pinot-admin.sh RebalanceTable 명령으로 리밸런스를 수행해요:

pinot-admin.sh RebalanceTable -zkAddress localhost:2181 -clusterName PinotCluster -tableName myTable -reassignInstances -includeConsuming -downtime
  • reassignInstances — 세그먼트 재할당 전에 인스턴스를 재할당해요.
  • includeConsuming — 실시간 테이블의 CONSUMING 세그먼트도 재할당해요.
  • downtime — 다운타임을 허용해요.
  • bestEfforts — 무중단 계약을 달성할 수 없어도 계속 진행해요.
  • minAvailableReplicas — 살려둘 최소 레플리카 수를 지정해요.

모범 사례 (Best practices)

  • 무중단 리밸런스가 중요하면 downtime을 false로 두고 minAvailableReplicas을 적절히 설정하세요.
  • 엣지 케이스에서 리밸런스가 실패하지 않게 하려면 bestEfforts를 고려하되, 무중단 보장이 약해질 수 있음을 인지하세요.
  • 리밸런스를 처리하는 컨트롤러가 재시작되면 리밸런스가 자동 재개되지 않으므로 결과를 확인하세요.

더 알아보기 (Learn more)