Skip to content

객체 검사 및 자동 복구

RustFS 아키텍처 및 자가 복구 설계

단일 서버 다중 디스크 아키텍처

RustFS는 단일 서버 다중 디스크 설계를 채택하여 여러 디스크를 하나의 논리적 저장소 풀로 구성하고 객체 저장소 서비스를 제공합니다. 각 객체는 쓰기 시 여러 데이터 샤드(shard)와 중복 샤드로 분할되어 서로 다른 디스크에 분산 저장되어 신뢰성과 성능을 향상시킵니다.

자가 복구 설계 원칙

  1. 데이터 무결성 검증: 체크섬(checksum) 메커니즘을 결합하여 객체 샤드 데이터가 읽기 시 일관성을 유지하도록 보장합니다. 예를 들어 ZFS는 읽기 시 각 데이터 블록의 체크섬을 검증하고 검증 실패 시 복구를 수행합니다.
  2. 샤드 중복 및 오류 수정: 오류 수정 코드(erasure coding)를 통해 중복 샤드를 생성하며, 일부 데이터 샤드가 손실되거나 손상되었을 때 중복 샤드를 사용하여 원본 객체를 재구성할 수 있습니다.
  3. 다단계 자가 복구 트리거: 읽기 시 온라인 자가 복구, 백그라운드 스캔 자가 복구 및 수동 트리거 자가 복구를 포함하여 성능과 데이터 신뢰성을 모두 고려합니다.

객체 자가 복구 원리

검증 및 오류 수정

RustFS는 객체 쓰기 단계에서 객체를 k개의 데이터 샤드와 m개의 중복 샤드로 분할하고, 지정된 오류 수정 매개변수에 따라 n=k+m개의 블록 장치에 분산 저장합니다. 읽기 시 샤드가 손상되거나 손실된 것을 발견하면 다른 완전한 샤드에서 재구성할 수 있습니다.

데이터 검증 및 복구(Scrub & Repair)

RustFS는 저장소 풀에 대해 정기적으로 경량 검증(light scrub)과 심층 검증(deep scrub)을 수행합니다:

  • 경량 검증은 객체 메타데이터와 샤드 크기를 비교하여 손상을 발견하면 즉시 표시합니다.
  • 심층 검증은 샤드 데이터를 비트 단위로 읽고 체크섬을 검증하여 숨겨진 불량 블록이나 bit rot 문제를 감지하고 복구할 수 있습니다.

데이터 스캔에서 불일치를 발견하면 RustFS는 자동으로 Repair 프로세스를 호출하여 손상된 샤드를 중복 샤드로 재구성하고, 복구된 샤드를 원본 디스크나 백업 디스크에 다시 써서 다음 액세스 시 데이터가 완전하도록 보장합니다.

자가 복구 프로세스

읽기 시 온라인 자가 복구

클라이언트가 GET 또는 HEAD 요청을 실행할 때마다 RustFS는 먼저 해당 객체의 모든 데이터 샤드를 확인합니다:

  1. 모든 데이터 샤드가 완전하면 데이터를 직접 반환합니다.
  2. 샤드가 손실되거나 손상된 경우 시스템은 중복 샤드를 기반으로 누락된 샤드를 계산하고 복구한 후 클라이언트에게 완전한 객체를 반환합니다. 이 메커니즘은 MinIO의 읽기 시 자가 복구 프로세스와 일치하며, 클라이언트 요청에 영향을 주지 않고 데이터를 투명하게 복구할 수 있습니다.

백그라운드 스캔 자가 복구

RustFS는 내장 객체 스캐너를 가지고 해시 방식으로 저장소 풀의 1/1024 객체를 순회하며 무결성 검사를 수행합니다:

  • 객체 스캐너는 정기적으로(구성 가능한 빈도) 경량 검증을 실행합니다.
  • 손상을 발견하면 즉시 자가 복구 재구성 프로세스를 트리거합니다. 기본적으로는 리소스 오버헤드를 줄이기 위해 심층 bit rot 검사를 수행하지 않으며, 필요에 따라 심층 검증 기능을 활성화할 수 있습니다.

수동 트리거 자가 복구

관리자는 명령줄 도구를 사용하여 전체 자가 복구를 실행할 수 있습니다:

bash
rc admin heal start --all

이 작업은 전체 저장소 풀을 스캔하고 모든 객체에 대해 완전한 검증과 복구를 수행하며, 리소스 소비가 크므로 저점기 동안 신중하게 사용해야 합니다.

사용 예시

bash
# 현재 자가 복구 상태 확인
rc admin heal status
# 지정된 버킷(bucket)의 자가 복구 시작
rc admin heal start --bucket photos
# 진행 중인 자가 복구 작업 중지
rc admin heal stop

요약

RustFS의 객체 자가 복구는 MinIO, Ceph 및 ZFS 등의 시스템의 성숙한 설계를 결합하여, 다단계 트리거 검증 및 복구 프로세스를 통해 단일 기기 다중 디스크 및 다중 기기 다중 디스크 환경에서 샤드 손상, 디스크 장애 및 bit rot 등의 문제에 효과적으로 대응할 수 있으며, 객체 저장소의 높은 신뢰성과 가용성을 보장합니다.

Apache License 2.0 하에 출시되었습니다.