sstablescrub — 손상된 SSTable 복구

sstablescrub — 손상된 SSTable 복구

sstablescrub은 손상된 SSTable을 고치는 도구예요. 스크럽(scrub) 과정은 SSTable을 다시 쓰면서 손상된 행을 건너뜁니다. 이렇게 손상된 행은 유실되기 때문에, 스크럽 후에는 반드시 리페어(repair)를 이어서 진행해야 해요.

관련 문서: CASSANDRA-4321

이 도구 실행 전에 Cassandra를 반드시 중지해야 해요. 그렇지 않으면 예상치 못한 결과가 발생할 수 있으며, 스크립트는 Cassandra가 정지되었는지 검증하지 않습니다.

출처: sstablescrub — 손상된 SSTable 복구

본문

기본 사용법은 다음과 같습니다.

sstablescrub <options> <keyspace> <table>

지원하는 옵션은 다음과 같습니다.

옵션 설명
--debug 스택 트레이스 표시
-h,--help 도움말 메시지 표시
-m,--manifest-check 실제로 sstable을 스크럽하지 않고 leveled manifest만 검사·복구
-n,--no-validate 컬럼 검증기(column validator)로 컬럼을 검증하지 않음
-r,--reinsert-overflowed-ttl CASSANDRA-14092의 영향을 받은 만료 날짜가 넘친(overflowed) 행을 최대 지원 만료 날짜인 2038-01-19T03:14:06+00:00으로 다시 기록. 원래 타임스탬프에 1밀리초를 더해, 영향받은 행의 컴팩션 중 생성되었을 수 있는 툼스톤을 덮어쓰기/대체합니다.
-s,--skip-corrupted 카운터 테이블의 손상된 행 건너뜀
-v,--verbose 상세 출력

기본 스크럽

옵션 없이 스크럽하면 먼저 스냅샷을 찍은 뒤, 손상되지 않은 모든 파일을 새 sstable로 기록합니다.

예시:

sstablescrub keyspace1 standard1
Pre-scrub sstables snapshotted into snapshot pre-scrub-1534424070883
Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') (17.142MiB)
Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') complete: 73367 rows in new sstable and 0 empty (tombstoned) rows dropped
Checking leveled manifest

검증 없이 스크럽

관련 문서: CASSANDRA-9406

--no-validate 옵션은 잘못 표현되었지만(misrepresented, 예: long 필드에 저장된 정수) 손상되지 않은 데이터를 유지하는 데 사용해요. 이 데이터는 보통 클라이언트에 오류를 일으키지 않습니다.

예시:

sstablescrub --no-validate keyspace1 standard1
Pre-scrub sstables snapshotted into snapshot pre-scrub-1536243158517
Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') (4.482MiB)
Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') complete; looks like all 0 rows were tombstoned

손상된 카운터 테이블 건너뛰기

관련 문서: CASSANDRA-5930

카운터 테이블이 sstablescrub이 완료되지 못하게 하는 방식으로 손상된 경우, --skip-corrupted 옵션으로 해당 카운터 테이블의 스크럽을 건너뛸 수 있어요. 이 우회 방법은 2.0+ 버전에서는 필요하지 않습니다.

예시:

sstablescrub --skip-corrupted keyspace1 counter1

오버플로 날짜 처리

관련 문서: CASSANDRA-14092

--reinsert-overflowed-ttl 옵션을 사용하면 최대 TTL을 넘겨(오버플로가 발생한) 행을 다시 기록할 수 있어요.

예시:

sstablescrub --reinsert-overflowed-ttl keyspace1 counter1

매니페스트 검사

Cassandra 2.0 버전부터 레벨 데이터가 별도의 manifest에서 sstable 메타데이터로 옮겨졌으므로, 이 옵션은 더 이상 의미가 없습니다.

더 알아보기 (Learn more)