객체 스토리지를 위한 다중 사이트, 액티브-액티브 복제
객체 스토리지를 위한 액티브 복제
객체 스토리지를 위한 액티브 복제는 미션 크리티컬 프로덕션 환경의 중요한 요구사항입니다. RustFS는 현재 이 서비스를 제공하는 유일한 공급업체입니다. 버킷 수준 세분성에서 실행되며 다음 상황에서 사용됩니다:
RustFS는 아키텍처 선택과 데이터 변경률에 따라 동기식 및 준동기식 복제를 지원합니다. 위의 각 경우에서 복제는 가능한 한 엄격하게 일관성을 유지해야 합니다(대역폭 고려사항과 변경률을 고려).
대규모 복원력을 위해 설계된 RustFS 데이터 복제
주요 기능은 다음과 같습니다:
- ✅ 암호화되거나 암호화되지 않은 객체 및 관련 메타데이터(객체와 원자적으로 작성됨)
- ✅ 객체 버전
- ✅ 객체 태그(있는 경우)
- ✅ S3 객체 잠금 보존 정보(있는 경우)
핵심 기능
소스와 타겟 버킷이 동일한 이름을 가질 수 있는 능력
이는 중단 없이 원격 사이트로 투명하게 페일오버해야 하는 애플리케이션에 필요합니다.
소스와 타겟 간 자동 객체 잠금/보존 복제에 대한 기본 지원
복제 중에 데이터 무결성과 규정 준수 요구사항이 유지되도록 보장합니다.
준동기식 복제
버킷에서 변이가 발생한 후 즉시 객체를 업데이트할 수 있습니다. RustFS는 데이터 센터 내에서는 엄격한 일관성을, 데이터 센터 간에는 최종 일관성을 따라 데이터를 보호합니다.
알림 기능
복제 실패 이벤트를 푸시하는 알림 기능입니다. 애플리케이션이 이러한 이벤트를 구독하고 운영팀에 경고할 수 있습니다.
RustFS 액티브-액티브 복제 구현 시 고려사항
가장 기본적인 수준에서 모든 설계는 인프라, 대역폭, 지연시간, 복원력 및 규모를 고려해야 합니다. 순서대로 살펴보겠습니다:
인프라
RustFS는 복제 엔드포인트의 양쪽 끝에서 동일한 하드웨어를 사용할 것을 권장합니다. 유사한 하드웨어가 작동할 수 있지만, 이기종 하드웨어 프로파일을 도입하면 복잡성이 증가하고 문제 식별이 느려집니다.
대역폭
대역폭은 두 사이트를 지속적으로 동기화 상태로 유지하는 중요한 요소입니다. 사이트 간 최적 대역폭 요구사항은 들어오는 데이터의 비율에 의해 결정됩니다. 특히 대역폭이 피크를 처리하기에 부족한 경우, 변경사항이 원격 사이트로 대기열에 올라가고 결국 동기화됩니다.
지연시간
대역폭 다음으로 지연시간은 액티브-액티브 모델을 설계할 때 가장 중요한 고려사항입니다. 지연시간은 두 RustFS 클러스터 간의 왕복 시간(RTT)을 나타냅니다. 목표는 대역폭이 부과하는 예산 제약 내에서 지연시간을 가능한 한 가장 작은 수로 줄이는 것입니다. RustFS는 이더넷 링크와 네트워크에 대해 패킷 손실률이 0.01%를 초과하지 않고 RTT 임계값이 20밀리초를 초과하지 않을 것을 권장합니다.
아키텍처
현재 RustFS는 두 데이터센터 간의 복제만을 권장합니다. 여러 데이터센터 간의 복제가 가능하지만, 관련된 복잡성과 필요한 트레이드오프로 인해 이는 상당히 어렵습니다.
대규모 배포 아키텍처
RustFS는 위의 고려사항이 규모를 결정하는 가운데 소스와 타겟을 포함하여 각 데이터 센터에서 매우 큰 배포를 지원합니다.
자주 묻는 질문
복제 타겟이 실패하면 어떻게 됩니까?
타겟이 다운되면 소스는 변경사항을 캐시하고 복제 타겟이 복구된 후 동기화를 시작합니다. 기간, 변경 수, 대역폭 및 지연시간에 따라 완전한 동기화에 도달하는 데 약간의 지연이 있을 수 있습니다.
불변성의 매개변수는 무엇입니까?
불변성이 지원됩니다. 주요 개념은 이 문서에서 찾을 수 있습니다. 액티브-액티브 복제 모드에서 불변성은 객체가 버전 관리될 때만 보장될 수 있습니다. 소스에서 버전 관리를 비활성화할 수 없습니다. 타겟에서 버전 관리가 일시 중단되면 RustFS가 복제 실패를 시작합니다.
버전 관리가 일시 중단되거나 불일치가 있는 경우 다른 영향은 무엇입니까?
이러한 경우 복제가 실패할 수 있습니다. 예를 들어, 소스 버킷에서 버전 관리를 비활성화하려고 하면 오류가 반환됩니다. 소스 버킷에서 버전 관리를 비활성화하기 전에 먼저 복제 구성을 제거해야 합니다. 또한 타겟 버킷에서 버전 관리가 비활성화되면 복제가 실패합니다.
양쪽 끝에서 객체 잠금이 활성화되지 않은 경우 어떻게 처리됩니까?
객체 잠금은 소스와 타겟 모두에서 활성화되어야 합니다. 버킷 복제를 설정한 후 타겟 버킷을 삭제하고 재생성할 수 있지만 객체 잠금이 활성화되지 않은 경우 복제가 실패할 수 있는 에지 케이스가 있습니다. 객체 잠금 설정이 양쪽 끝에서 구성되지 않은 경우 일관성 없는 상황이 발생할 수 있습니다. 이 경우 RustFS는 자동으로 실패합니다.