Milvus CDC
Milvus CDC(Change Data Capture)는 한 Milvus 클러스터에서 다른 클러스터로 데이터 변경 사항을 복제합니다. CDC를 사용하여 Milvus용 주-대기 재해 복구 토폴로지를 구축할 수 있습니다.
주-대기 토폴로지에서는 하나의 클러스터가 주 클러스터 역할을 수행하며 쓰기 작업을 처리합니다. 하나 이상의 대기 클러스터는 주 클러스터로부터 변경 사항을 지속적으로 수신하며 읽기 트래픽을 처리할 수 있습니다. 주 클러스터를 사용할 수 없거나 유지보수가 필요한 경우, 서비스 트래픽을 대기 클러스터로 전환할 수 있습니다.
아키텍처
일반적인 토폴로지는 다음과 같이 구성됩니다.
- 주 클러스터: 복제를 위한 소스 클러스터입니다. 읽기 및 쓰기 요청을 처리합니다.
- 스탠바이 클러스터: 복제를 위한 대상 클러스터입니다. 프라이머리로부터 변경 사항을 수신하며, 스탠바이 상태로 유지되는 동안 읽기 전용입니다.
- CDC 노드: 현재 주 클러스터의 WAL 변경 사항을 대기 클러스터로 전달하는 Milvus 구성 요소입니다. 스위치오버 또는 장애 조치 후 주 클러스터가 될 가능성이 있는 각 클러스터에 CDC를 배포해야 합니다.
- 복제 토폴로지: 클러스터-a → 클러스터-b와 같이 구성된 소스-대상 간 관계입니다.
다음은 해당 토폴로지를 보여주는 그림입니다.
CDC 워크플로우
지원되는 토폴로지
가장 일반적인 CDC 배포 방식은 프라이머리 1개와 스탠바이 1개로 구성됩니다:
Application writes
|
v
Primary cluster A -- CDC replication --> Standby cluster B
Milvus CDC는 또한 단일 프라이머리, 다중 스탠바이 토폴로지도 지원합니다:
Primary cluster A -- CDC replication --> Standby cluster B
\-- CDC replication --> Standby cluster C
Milvus CDC는 두 개 이상의 클러스터가 동시에 쓰기 트래픽을 수신하는 다중 프라이머리 또는 액티브-액티브 배포를 지원하지 않습니다.
주 노드 및 대기 노드의 동작
| 역할 | 읽기 | 쓰기 | 복제 동작 |
|---|---|---|---|
| 주 노드 | 예 | 예 | 변경 사항을 스탠바이 클러스터로 전송 |
| 스탠바이 | 예 | 아니요 | 주 클러스터로부터 복제된 변경 사항을 수신합니다 |
대기 클러스터는 직접 쓰기 요청을 거부합니다. 이를 통해 스플릿 브레인 현상을 방지하고 복제 토폴로지의 일관성을 유지합니다.
계획된 전환(Switchover) 대 장애 조치(Failover)
Milvus CDC는 서비스 트래픽을 현재 프라이머리에서 스탠바이 클러스터로 이동시키는 두 가지 방법을 제공합니다.
| 작업 | 다음과 같은 경우에 사용합니다 | 데이터 손실 | 예상 동작 |
|---|---|---|---|
| 스위치오버 | 현재 주 서버에 여전히 접속할 수 있거나, 계획된 유지보수를 수행 중인 경우 | RPO = 0 | 역할이 변경되기 전에 나머지 복제 데이터가 도착할 때까지 대기 |
| 페일오버 | 현재 주 서버를 사용할 수 없으며 신속하게 복구할 수 없는 경우 | 가능 | 쓰기 작업이 재개될 수 있도록 스탠바이 노드를 즉시 승격시킵니다 |
현재 프라이머리가 여전히 응답할 수 있는 경우에는 스위치오버를 사용합니다. 원래 프라이머리를 기다리는 것보다 가용성 복구가 더 중요한 경우에만 페일오버를 사용합니다.
CDC 지연 및 그 중요성
CDC 지연이란 프라이머리 클러스터에 기록되었으나 아직 스탠바이 클러스터에 적용되지 않은 데이터의 양을 말합니다.
CDC 지연은 다음 두 가지 복구 옵션 모두에 영향을 미칩니다:
- 스위치오버 중 CDC 지연이 적을수록 일반적으로 작업이 더 빨리 완료됩니다.
- 페일오버 시, CDC 지연은 원래의 주 클러스터를 사용할 수 없게 될 경우 손실될 수 있는 데이터 범위를 나타냅니다.
CDC 지연을 지속적으로 모니터링하고 가능한 한 낮게 유지해야 합니다. ‘CDC 복제 설정’ 페이지에는 CDC 지연을 추정하는 PromQL 예제가 포함되어 있습니다.
CDC 복제에서의 대량 가져오기
CDC 복제 토폴로지에서 대량 가져오기는 ` auto_commit=false`와 함께 2단계 커밋(2PC) 모드를 사용해야 합니다. 가져오기 및 커밋 작업을 프라이머리 클러스터에서만 실행하고, 가져오기 파일이 프라이머리 및 스탠바이 클러스터 모두에서 사용 가능하도록 해야 합니다. 자세한 내용은 CDC 복제에서의 대량 가져오기를 참조하십시오.
제한 사항
Milvus CDC에는 현재 다음과 같은 제한 사항이 있습니다.
- 단일 프라이머리 토폴로지만 지원합니다.
- 액티브-액티브(active-active) 또는 다중 프라이머리(multi-primary) 쓰기 기능은 지원하지 않습니다.
- 스탠바이 클러스터는 읽기 트래픽을 처리할 수 있지만, 스탠바이 상태로 있는 동안에는 직접 쓰기를 거부합니다.
- 페일오버 시, 기존 주 클러스터에 기록되었으나 아직 대기 클러스터로 복제되지 않은 데이터가 손실될 수 있습니다.
- 구성된 채널 레이아웃(
pchannels)은 각 클러스터의 실제 채널 레이아웃과 일치해야 합니다.
자주 묻는 질문
스탠바이 클러스터에서 쿼리를 처리할 수 있습니까?
예. 스탠바이 클러스터는 읽기 트래픽을 처리할 수 있습니다. 그러나 프라이머리가 되기 전까지는 쓰기 요청을 수락할 수 없습니다.
Milvus CDC는 액티브-액티브 쓰기를 지원합니까?
아니요. Milvus CDC는 단일 프라이머리 토폴로지를 위해 설계되었습니다. 여러 클러스터에 동시에 쓰기를 수행하면 스플릿 브레인 및 데이터 불일치가 발생할 수 있습니다.
스위치오버 시 데이터가 손실되나요?
아니요. 스위치오버는 스탠바이 클러스터가 프라이머리 클러스터가 되기 전에 나머지 데이터가 복제되기를 기다립니다.
페일오버 시 데이터가 손실되나요?
발생할 수 있습니다. 기존 프라이머리에 기록되었으나 아직 스탠바이로 복제되지 않은 데이터는 손실될 수 있습니다.
페일오버 중에 얼마나 많은 데이터가 손실될 수 있나요?
잠재적인 데이터 손실량은 프라이머리가 사용 불가능해진 시점의 CDC 지연 시간 범위 내에서 발생합니다.