데이터 적재 고가용성
Doris는 데이터 적재 중 고가용성을 보장하기 위해 여러 메커니즘을 제공합니다. 이 문서에서는 Doris의 기본 데이터 적재 동작과 데이터 적재 가용성을 높이기 위한 추가 옵션을 자세히 설명합니다. 특히 최소 데이터 적재 복제본 수(Min Load Replica Num) 기능을 중점적으로 다룹니다.
이 문서를 읽으면 다음을 할 수 있습니다.
- Doris의 기본 과반수 쓰기 전략과 작동 방식을 이해할 수 있습니다.
- 최소 데이터 적재 복제본 수를 사용하여 일부 복제본을 사용할 수 없는 상황에서도 데이터 적재 성공률을 높일 수 있습니다.
- 테이블 수준 및 전역 설정 방법과 두 설정 간의 우선순위를 익힐 수 있습니다.
적용 시나리오
| 시나리오 | 권장 전략 | 설명 |
|---|---|---|
| 데이터 신뢰성이 최우선인 경우 | 기본 과반수 쓰기 | 과반수 복제본에서 쓰기에 성공해야 데이터 적재가 성공한 것으로 간주합니다 |
| 일부 BE 노드를 일시적으로 사용할 수 없는 경우 | min_load_replica_num 설정 | 쓰기에 성공한 복제본 수가 과반수에 미치지 못해도 데이터 적재가 성공하도록 허용합니다 |
| 빠른 데이터 적재 속도가 요구되는 경우 | min_load_replica_num 설정 | 일관성보다 가용성을 우선합니다 |
기본 과반수 쓰기 전략
기본적으로 Doris는 데이터 신뢰성과 일관성을 보장하기 위해 과반수 쓰기 전략을 사용합니다.
- 쓰기에 성공한 복제본 수가 전체 복제본 수의 절반을 초과하면 데이터 적재가 성공한 것으로 간주합니다.
- 예를 들어 복제본이 세 개인 테이블의 경우, 데이터 적재가 성공하려면 최소 2개의 복제본에서 쓰기에 성공해야 합니다.
작동 방식
과반수 쓰기의 실행 흐름은 다음과 같습니다.
- 데이터 분배: 데이터 적재 작업은 먼저 관련된 모든 BE 노드에 데이터를 분배합니다.
- 병렬 쓰기: 각 BE 노드는 데이터 쓰기 작업을 병렬로 처리합니다.
- 쓰기 확인 응답: 데이터 쓰기를 완료한 각 BE 노드는 FE에 확인 응답을 보냅니다.
- 과반수 확인: FE는 쓰기에 성공한 복제본 수를 집계합니다. 이 수가 과반수에 도달하면 데이터 적재가 성공한 것으로 간주합니다.
- 트랜잭션 커밋: FE는 데이터 적재 트랜잭션을 커밋하여 외부에서 데이터를 조회할 수 있도록 합니다.
- 비동기 복제: 쓰기에 성공하지 못한 복제본에는 시스템이 백그라운드에서 데이터를 비동기적으로 복제하여 모든 복제본 간의 최종 일관성을 보장합니다.
과반수 쓰기 전략은 Doris에서 데이터 신뢰성과 시스템 가용성 사이의 균형을 맞추는 방식입니다. 특별한 요구 사항이 있는 시나리오를 위해 Doris는 최소 데이터 적재 복제본 수와 같은 추가 옵션을 제공하여 시스템의 유연성을 높입니다.
최소 데이터 적재 복제본 수
과반수 쓰기 전략은 데이터 신뢰성을 보장하지만, 일부 시나리오에서는 시스템 가용성에 영향을 줄 수 있습니다. 예를 들어 복제본이 두 개인 경우 데이터 적재를 완료하려면 두 복제본 모두에서 쓰기에 성공해야 합니다. 즉, 데이터 적재 중에는 어느 복제본도 사용할 수 없는 상태가 되어서는 안 됩니다.
이 문제를 해결하고 데이터 적재 가용성을 높이기 위해 Doris는 최소 데이터 적재 복제본 수(Min Load Replica Num) 옵션을 제공합니다.
기능 설명
최소 데이터 적재 복제본 수를 사용하면 데이터 적재 시 쓰기에 성공해야 하는 최소 복제본 수를 지정할 수 있습니다. 쓰기에 성공한 복제본 수가 이 값보다 크거나 같으면 데이터 적재가 성공한 것으로 간주합니다.
일반적인 사용 사례
- 일부 노드를 사용할 수 없는 상황에서도 데이터를 성공적으로 적재해야 하는 경우.
- 빠른 데이터 적재 속도가 요구되며, 가용성을 높이기 위해 일관성을 일부 희생할 수 있는 경우.
설정 방법
최소 데이터 적재 복제본 수는 테이블별 설정과 전역 설정을 모두 지원합니다.
1. 테이블별 설정
방법 A: 테이블 생성 시 설정
min_load_replica_num을 PROPERTIES에 지정하는 CREATE TABLE 문을 사용합니다.
CREATE TABLE example_table
(
id INT,
name STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES
(
'replication_num' = '3',
'min_load_replica_num' = '2'
);
방법 B: 기존 테이블 수정
ALTER TABLE을 사용하여 동적으로 조정합니다.
ALTER TABLE example_table
SET ( 'min_load_replica_num' = '2' );
2. 전역 설정
FE 설정 항목인 min_load_replica_num을 통해 설정합니다.
| 항목 | 값 |
|---|---|
| 설정 항목 | min_load_replica_num |
| 유효한 값 | 0보다 큰 값 |
| 기본값 | -1 (전역 최소 데이터 적재 복제본 수 설정이 비활성화되어 있음을 나타냅니다) |
FE 설정 항목을 조회하고 수정하는 방법은 FE 설정 문서를 참조하세요.
설정 우선순위
테이블 속성과 전역 설정이 모두 지정되어 있으면 다음 우선순위가 적용됩니다.
테이블 속성 > 전역 설정 > 기본 과반수 규칙
테이블 속성이 설정되지 않았거나 유효하지 않고 전역 설정이 유효한 경우, 해당 테이블의 최소 데이터 적재 복제본 수는 다음과 같습니다.
min(min_load_replica_num configured in FE, table replica count / 2 + 1)
기타 고가용성 메커니즘
최소 데이터 적재 복제본 수 옵션 외에도 Doris는 데이터 적재 가용성을 높이기 위해 다음 메커니즘을 사용합니다.
| 메커니즘 | 기능 |
|---|---|
| 데이터 적재 재시도 | 일시적인 문제로 실패한 데이터 적재 작업을 자동으로 재시도합니다 |
| 부하 분산 | 데이터 적재 작업을 여러 BE 노드에 분산하여 단일 노드에 과도한 부하가 걸리는 것을 방지합니다 |
| 트랜잭션 메커니즘 | 데이터 일관성을 보장하고 실패 시 자동으로 롤백합니다 |
자주 묻는 질문
Q1: min_load_replica_num이 replication_num보다 클 수 있나요?
아니요. 최소 데이터 적재 복제본 수는 "데이터 적재 시 쓰기에 성공해야 하는 최소 복제본 수"를 의미하므로 전체 복제본 수보다 작거나 같아야 합니다. 전역 설정이 적용되면 시스템은 자동으로 min(min_load_replica_num configured in FE, table replica count / 2 + 1)을 사용합니다.
Q2: min_load_replica_num을 활성화하면 쓰기에 성공하지 못한 복제본의 데이터가 손실되나요?
아니요. 데이터 적재가 커밋된 후에는 백그라운드 비동기 복제를 통해 쓰기에 성공하지 못한 복제본에도 최종적으로 데이터가 채워지므로 복제본 간의 일관성이 보장됩니다.
Q3: min_load_replica_num은 언제 사용해야 하나요?
일부 BE 노드를 일시적으로 사용할 수 없거나, 복제본 스케줄링이 아직 완료되지 않았거나, 강한 일관성보다 데이터 적재 가용성이 더 중요한 경우 이 옵션을 활성화할 수 있습니다. 이를 통해 소수 복제본의 이상으로 데이터 적재가 차단되는 것을 방지할 수 있습니다.
Q4: 테이블 속성과 전역 설정이 모두 지정되어 있으면 어느 쪽이 적용되나요?
테이블 속성이 우선합니다. 전역 설정은 테이블 속성이 설정되지 않았거나 유효하지 않은 경우에만 사용됩니다. 둘 다 설정되지 않은 경우 시스템은 기본 과반수 규칙을 적용합니다.