탄력적 확장 및 축소
Apache Doris는 온라인 탄력적 확장 및 축소를 지원합니다. 서비스 중단 없이 노드를 동적으로 추가하거나 제거하여 비즈니스 성장에 대응하거나 유휴 리소스를 회수할 수 있습니다. BE 노드의 확장 및 축소는 클러스터 가용성에 영향을 주지 않지만 데이터 마이그레이션을 유발하므로, 사용량이 적은 시간대에 수행하세요.
적용 시나리오
| 시나리오 | 권장 작업 | 설명 |
|---|---|---|
| FE 읽기 처리 용량 부족 | Observer FE 추가 | Observer는 Master 선출에 참여하지 않으며, 메타데이터 읽기 처리량을 높이는 데 사용됩니다 |
| FE 고가용성 부족 | Follower FE 추가 | Master와 Follower의 총수를 홀수로 유지하세요. 3개 또는 5개를 권장합니다 |
| BE 스토리지 또는 컴퓨팅 리소스 부족 | BE 추가 | BE를 추가하면 시스템이 자동으로 리밸런싱을 수행하여 데이터를 점진적으로 고르게 분산합니다 |
| 특정 BE 노드 제거 | BE 축소(DECOMMISSION) | 먼저 데이터를 마이그레이션한 후 노드를 오프라인으로 전환합니다. 프로덕션 환경에서 권장합니다 |
| 노드에 장애가 발생하여 즉시 제거해야 함 | BE 축소(DROP) | 노드를 즉시 오프라인으로 전환하며 데이터가 손실될 수 있습니다. 비정상 상황에서만 사용하세요 |
사전 요구 사항
- 클러스터 관리자 권한이 있어야 하며,
ALTER SYSTEM작업을 실행할 수 있어야 합니다. - 각 노드의 IP, 포트, 역할(Follower / Observer / BE)이 계획되어 있어야 합니다.
- 새로 추가하는 FE 노드의
http_port는 클러스터 내 모든 기존 FE 노드의http_port와 같아야 합니다. - BE 축소는 사용량이 적은 시간대에 수행하고, 마이그레이션되는 데이터를 수용할 수 있도록 충분한 디스크 공간을 확보해야 합니다.
FE 클러스터 확장 및 축소
FE 역할 설명
Doris FE 노드에는 다음 세 가지 역할이 있습니다. 모든 FE 노드는 전체 메타데이터를 보유합니다.
| 역할 | Master 선출 참여 여부 | 메타데이터 읽기/쓰기 | 용도 |
|---|---|---|---|
| Master | 예(하나만 존재) | 읽기 + 쓰기 | 메타데이터 읽기와 쓰기를 처리합니다. Master의 메타데이터 변경 사항은 BDB JE 프로토콜을 통해 다른 노드에 동기화됩니다. 클러스터당 Master는 하나만 허용됩니다 |
| Follower | 예 | 읽기 | 메타데이터 읽기를 처리합니다. Master에 장애가 발생하면 Follower들이 선출 절차를 시작하여 새 Master를 선출합니다. Master와 Follower의 총수는 홀수로 유지하는 것을 권장합니다 |
| Observer | 아니요 | 읽기 | 메타데이터 읽기를 처리합니다. Master 선출에 참여하지 않으며, FE 읽기 처리 용량을 확장하는 데 사용됩니다 |
일반적으로 FE 노드 하나는 BE 노드 10~20개를 지원할 수 있으며, 대부분의 워크로드에서는 FE 노드 3개면 충분합니다.
FE 클러스터 확장
새 FE 노드를 추가할 때는 다음 사항에 유의하세요.
- 새 FE의
http_port는 클러스터 내 모든 기존 FE 노드의http_port와 같아야 합니다. - Follower 노드를 추가할 때는 클러스터 내 Master와 Follower 노드의 총수를 홀수로 유지하는 것을 권장합니다.
show frontends명령은 현재 클러스터에 있는 모든 노드의 포트와 역할을 표시합니다.
-
FE 노드를 시작합니다.
fe/bin/start_fe.sh --helper <leader_fe_host>:<edit_log_port> --daemon -
FE 노드를 등록합니다.
노드를 Follower FE로 등록합니다.
ALTER SYSTEM ADD FOLLOWER "<follower_host>:<edit_log_port>";또는 노드를 Observer FE로 등록합니다.
ALTER SYSTEM ADD OBSERVER "<observer_host>:<edit_log_port>"; -
새로 추가한 FE 노드의 상태를 확인합니다.
show frontends;
FE 클러스터 축소
축소할 때는 클러스터에 남아 있는 Master와 Follower 노드의 총수가 여전히 홀수인지 확인하세요. 다음 명령으로 노드를 제거합니다.
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "<fe_host>:<edit_log_port>";
축소 후에는 제거한 FE 노드의 배포 디렉터리 아래에 있는 파일을 수동으로 삭제하세요.
BE 클러스터 확장 및 축소
BE 클러스터 확장
-
BE 프로세스를 시작합니다.
be/bin/start_be.sh -
BE 노드를 등록합니다.
ALTER SYSTEM ADD backend '<be_host>:<be_heartbeat_service_port>';
등록이 완료되면 새 BE가 자동으로 클러스터에 합류하고, Doris는 기존 데이터를 새 노드로 점진적으로 재분산합니다.
BE 클러스터 축소
BE 노드를 축소할 때는 DROP 또는 DECOMMISSION을 선택할 수 있습니다. 두 방식의 차이는 다음과 같습니다.
| 항목 | DROP | DECOMMISSION |
|---|---|---|
| 노드 제거 방식 | 노드를 곧바로 오프라인으로 전환하고 BE 노드를 제거합니다 | 명령 실행 후 해당 BE의 데이터를 다른 노드로 마이그레이션하려고 시도합니다. 마이그레이션이 완료되면 BE 노드가 자동으로 오프라인으로 전환됩니다 |
| 적용 시점 | 실행 즉시 적용됩니다 | 데이터 마이그레이션이 완료된 후 적용됩니다. 클러스터의 현재 데이터 양에 따라 수 시간에서 하루까지 걸릴 수 있습니다 |
| 복제본이 하나인 테이블 처리 | 데이터가 손실될 수 있습니다 | 데이터가 손실되지 않습니다 |
| 여러 노드 동시 제거 | 데이터가 손실될 수 있습니다 | 데이터가 손실되지 않습니다 |
| 프로덕션 환경 권장 여부 | 프로덕션 환경에서는 권장하지 않습니다 | 프로덕션 환경에서 권장합니다 |
DROP으로 BE 노드 제거
노드에 장애가 발생했거나 테스트 환경에서 노드를 즉시 제거해야 할 때 사용합니다.
ALTER SYSTEM DROP backend "<be_host>:<be_heartbeat_service_port>";
DECOMMISSION으로 BE 노드 제거
프로덕션 환경에서는 DECOMMISSION을 권장합니다. 먼저 데이터를 마이그레이션한 후 노드를 오프라인으로 전환합니다.
ALTER SYSTEM DECOMMISSION backend "<be_host>:<be_heartbeat_service_port>";
DECOMMISSION 명령 사용 시 유의 사항:
- DECOMMISSION은 비동기 작업입니다. 실행 후
SHOW backends;에서 BE 노드의SystemDecommissioned상태가true로 표시되면 해당 노드의 제거 작업이 진행 중이라는 의미입니다. - DECOMMISSION 명령은 실패할 수 있습니다. 예를 들어, 남은 BE의 스토리지 공간이 제거 대상 BE의 데이터를 수용하기에 부족하거나 남은 머신 수가 최소 복제본 수를 충족하지 못하면 명령을 완료할 수 없으며, 해당 BE의
SystemDecommissioned는true로 유지됩니다. - DECOMMISSION 진행 상황은
TabletNum으로 확인할 수 있으며, 이 값은SHOW PROC '/backends';로 조회합니다. 제거 작업이 진행 중이면TabletNum이 계속 감소합니다. CANCEL DECOMMISSION BACKEND "<be_host>:<be_heartbeat_service_port>";로 제거 작업을 취소할 수 있습니다. 취소 후에는 해당 BE에 현재 남아 있는 양의 데이터가 그대로 유지되며, Doris가 나중에 리밸런싱을 수행합니다.balance_slot_num_per_path매개변수를 조정하여 데이터 마이그레이션 속도를 변경할 수 있습니다.
자주 묻는 질문
질문: 새로 추가한 FE 노드가 시작되지 않으면 어떻게 하나요?
기존 FE와 http_port가 다르거나, Leader FE를 지정하는 데 --helper를 사용하지 않았기 때문입니다. http_port 설정을 fe.conf에서 확인하세요. 처음 시작할 때는 --helper <leader_fe_host>:<edit_log_port>를 사용하세요.
질문: ALTER SYSTEM ADD FOLLOWER 실행 후에도 클러스터가 새 노드를 인식하지 못하면 어떻게 하나요?
노드가 시작되지 않았거나, 네트워크에 연결할 수 없거나, 방화벽이 포트를 차단하고 있을 수 있습니다. show frontends로 노드 상태를 확인하고 edit_log_port에 접근할 수 있는지 확인하세요.
질문: DECOMMISSION이 오랫동안 완료되지 않으면 어떻게 하나요?
남은 BE의 스토리지 공간이 부족하거나, 남은 노드 수가 최소 복제본 수보다 적기 때문입니다. BE 노드를 더 추가하거나, 노드를 제거하기 전에 클러스터를 확장하세요. SHOW PROC '/backends';로 TabletNum이 계속 감소하고 있는지 확인하세요.
질문: 진행 중인 DECOMMISSION을 취소하려면 어떻게 하나요?
CANCEL DECOMMISSION BACKEND "<be_host>:<be_heartbeat_service_port>";를 실행하세요. 이후 Doris가 리밸런싱을 수행합니다.
질문: 데이터 마이그레이션이 너무 느리면 어떻게 하나요?
기본 마이그레이션 동시 실행 수가 낮게 설정되어 있습니다. balance_slot_num_per_path 매개변수를 조정하여 마이그레이션 속도를 높이세요.
질문: FE 축소 후 디스크 공간이 확보되지 않으면 어떻게 하나요?
축소 명령이 성공한 후, 제거한 FE 노드의 배포 디렉터리를 수동으로 삭제하여 정리하세요.