sstableverify — SSTable 오류·손상 검증

sstableverify — SSTable 오류·손상 검증

sstableverify는 주어진 테이블에 대한 SSTable(들)에 오류나 손상이 없는지 검사하는 도구예요. 데이터 파일의 체크섬과 값을 검증해 디스크 손상 여부를 확인할 때 사용합니다.

관련 문서: CASSANDRA-5791

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

WARNING

이 도구의 위험에 관한 논의는 CASSANDRA-9947CASSANDRA-17017을 참고하세요. 구체적으로: "검증에 실패한 sstable을 unrepaired로 표시하지만, 그것은 생각한 대로 동작하지 않아요. 그 의미는 로컬 노드가 다음 리페어에서 그 sstable을 사용하지만, 다른 노드는 사용하지 않는다는 뜻입니다. 그래서 우리가 하는 일이라고는 그것에서 읽을 수 있는 데이터를 다른 복제본으로 스트리밍하는 것뿐입니다. 원격 노드의 sstable을 마법처럼 로컬 sstable의 데이터에 대응하도록 표시할 수 있다면 동작하겠지만, 그럴 수 없습니다."

이 도구는 사용자가 위험을 이해하고 그래도 사용을 시도하려는 의사가 있음을 나타내는 -f 또는 --force 플래그를 요구합니다.

출처: sstableverify — SSTable 오류·손상 검증

본문

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

sstableverify <options> <keyspace> <table>

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

옵션 설명
--debug 스택 트레이스 표시
-e, --extended 확장 검증
-h, --help 도움말 메시지 표시
-v, --verbose 상세 출력
-f, --force 도구 사용 허용(위험은 CASSANDRA-17017 참고)

기본 검증

이것이 기본 검증이에요. 그다지 빠른 과정은 아니며 메모리를 사용합니다. SSTable이 많다면 메모리 설정을 늘려야 할 수도 있어요.

예시:

sstableverify keyspace eventlog
Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB)
Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db')
Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db')
Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB)
Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db')
Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db')

확장 검증

확장 검증 중에는 개별 값들이 오류나 손상이 없는지 검증됩니다. 당연히 시간이 더 걸립니다.

예시:

root@DC1C1:/# sstableverify -e keyspace eventlog
WARN  14:08:06,255 Only 33.096GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots
Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB)
Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db')
Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db')
Extended Verify requested, proceeding to inspect values
Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') succeeded. All 33211 rows read successfully
Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB)
Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db')
Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db')
Extended Verify requested, proceeding to inspect values
Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') succeeded. All 17068 rows read successfully

손상된 파일

스크립트가 손상된 파일을 감지하면 그 파일들 목록이 출력됩니다.

예시:

sstableverify keyspace eventlog
Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') (7.416MiB)
Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db')
Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db')
Error verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db'): Corrupted: /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db

유사하지만(덜 상세한) 도구는 권장 조치를 보여줍니다:

nodetool verify keyspace eventlog
error: Invalid SSTable /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db, please force repair

더 알아보기 (Learn more)