서버 리밸런스
서버 리밸런스 (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를 고려하되, 무중단 보장이 약해질 수 있음을 인지하세요. - 리밸런스를 처리하는 컨트롤러가 재시작되면 리밸런스가 자동 재개되지 않으므로 결과를 확인하세요.