- 스냅샷이 무엇이고 어디에서 찾을 수 있는지
- 문제가 어떻게 나타나는지
- 가능한 복구 전략과 각 전략의 의미
Keeper 스냅샷 개요
스냅샷이란 무엇입니까?
스냅샷은 어디에서 찾을 수 있습니까?
/var/lib/clickhouse/coordination/snapshots/에 저장되며, keeper_server.xml 파일의 snapshot_storage_path에 지정한 사용자 지정 경로에 저장될 수도 있습니다. 스냅샷 이름은 증가하는 순서로 지정되며(예: snapshot.23), 최신 스냅샷일수록 숫자가 더 큽니다.
멀티 노드 클러스터에서는 각 Keeper 노드가 자체 스냅샷 디렉터리를 가집니다.
복구를 위해서는 노드 간 스냅샷의 일관성이 매우 중요합니다.
손상된 Keeper 스냅샷의 주요 증상과 징후
로그 징후:
스냅샷 손상을 진단하기 전에 Keeper 로그에서 특정 오류 패턴을 확인하십시오:
손상된 Keeper 스냅샷에서 복구하기
- 추가 손상을 방지하기 위해 모든 Keeper 노드를 중지합니다
- 전체 coordination 디렉터리를 안전한 위치에 복사해 모두 백업합니다
- 클러스터 정족수(quorum)를 확인하여 최소 1개의 노드에 정상 데이터가 있는지 검증합니다
1. 기존 Backup에서 복원
- Keeper 메타데이터(metadata) 또는 스냅샷 손상으로 인해 현재 데이터를 복구할 수 없습니다.
- 정상 상태로 확인된 Keeper 상태가 포함된 Backup이 있습니다.
- 메타데이터 일관성을 기준으로 가장 최신 Backup을 찾아 검증합니다.
- ClickHouse 및 Keeper 서비스를 종료합니다.
- Backup 디렉터리의 스냅샷 및 로그로 손상된 항목을 대체합니다.
- Keeper 클러스터를 다시 시작하고 메타데이터 동기화가 정상인지 검증합니다.
2. 이전 스냅샷으로 롤백
- 최근 스냅샷이 손상되었지만, 이전 스냅샷은 여전히 사용할 수 있습니다.
- 일관된 복구에 필요한 증분 로그가 온전하게 유지되어 있습니다.
- Keeper 디렉터리에서 유효한 이전 스냅샷(예: snapshot.19)을 찾아 선택합니다.
- 더 최신 스냅샷과 로그를 제거합니다.
- Keeper를 다시 시작하여 로그를 재생하고 메타데이터 상태를 복구합니다.
3. SYSTEM RESTORE REPLICA를 사용해 메타데이터 복원
- Keeper 메타데이터가 유실되었거나 손상되었지만 테이블 데이터는 여전히 디스크에 남아 있는 경우
- ZooKeeper/Keeper 메타데이터가 없어 테이블이 읽기 전용 모드로 전환된 경우
- 로컬에서 사용 가능한 데이터 파트를 기반으로 Keeper 메타데이터를 다시 만들어야 하는 경우
-
구성의
<path>로 설정된clickHouse-server데이터 경로에 테이블 데이터가 로컬에 존재하는지 확인하십시오. (기본값:/var/lib/clickhouse/data/) - 영향을 받는 각 테이블에 대해 다음을 실행하십시오.
- 데이터베이스 수준 복구를 수행하는 경우(Replicated 데이터베이스 엔진 사용 시):
- 동기화가 완료될 때까지 기다리십시오:
system.replicas에서is_readonly = 0인지 확인하고system.detached_parts를 모니터링하여 복구를 검증합니다
작동 방식
SYSTEM RESTORE REPLICA는 기존의 모든 파트를 분리한 뒤 Keeper에 메타데이터를 다시 생성한 다음(새 빈 테이블인 것처럼), 모든 파트를 다시 연결합니다. 이렇게 하면 네트워크를 통해 데이터를 다시 다운로드하지 않아도 됩니다.4. Keeper에서 레플리카 메타데이터 삭제 및 재생성
- 오류가 클러스터의 단일 레플리카에서 발생했고, Keeper의 메타데이터가 손상되었거나 일관되지 않은 경우
- “Part XXXXX intersects previous part YYYYY”와 같은 오류가 발생하는 경우
- 로컬 데이터는 유지하면서 레플리카의 Keeper 메타데이터를 완전히 재설정해야 하는 경우
- 영향을 받은 레플리카에서 테이블을 detach합니다:
- Keeper에서 레플리카의 메타데이터를 제거합니다(임의의 레플리카에서 실행):
- 테이블을 다시 ATTACH합니다(읽기 전용 모드로 전환됩니다):
- 레플리카 메타데이터를 복원합니다:
- 다른 레플리카와 동기화:
- 복구 후 모든 레플리카에서
system.detached_parts를 확인합니다
- ClickHouse 서버를 중지합니다
- 복구 플래그를 생성합니다:
- ClickHouse 서버를 시작합니다
- 서버가 자동으로 플래그를 삭제하고 모든 복제된 테이블을 복원합니다
- 로그를 확인하여 복구 진행 상황을 모니터링합니다
5. Keeper 클러스터 재구축
- 복구에 사용할 수 있는 유효한 스냅샷, 로그 또는 백업이 없습니다.
- 전체 Keeper 클러스터와 해당 메타데이터를 다시 생성해야 합니다.
- ClickHouse 클러스터와 Keeper 클러스터를 완전히 중지합니다.
- 스냅샷 및 로그 디렉터리를 정리하여 각 Keeper 노드를 초기화합니다.
- Keeper 노드 하나를 리더로 초기화한 다음, 다른 노드를 순차적으로 추가합니다.
- 외부 기록이 있는 경우 메타데이터를 다시 가져옵니다.