sstableverify — SSTable 오류·손상 검증
sstableverify — SSTable 오류·손상 검증
sstableverify는 주어진 테이블에 대한 SSTable(들)에 오류나 손상이 없는지 검사하는 도구예요. 데이터 파일의 체크섬과 값을 검증해 디스크 손상 여부를 확인할 때 사용합니다.
관련 문서: CASSANDRA-5791
이 도구 실행 전에 Cassandra를 반드시 중지해야 해요. 그렇지 않으면 예상치 못한 결과가 발생할 수 있으며, 스크립트는 Cassandra가 정지되었는지 검증하지 않습니다.
WARNING
이 도구의 위험에 관한 논의는 CASSANDRA-9947과 CASSANDRA-17017을 참고하세요. 구체적으로: "검증에 실패한 sstable을 unrepaired로 표시하지만, 그것은 생각한 대로 동작하지 않아요. 그 의미는 로컬 노드가 다음 리페어에서 그 sstable을 사용하지만, 다른 노드는 사용하지 않는다는 뜻입니다. 그래서 우리가 하는 일이라고는 그것에서 읽을 수 있는 데이터를 다른 복제본으로 스트리밍하는 것뿐입니다. 원격 노드의 sstable을 마법처럼 로컬 sstable의 데이터에 대응하도록 표시할 수 있다면 동작하겠지만, 그럴 수 없습니다."
이 도구는 사용자가 위험을 이해하고 그래도 사용을 시도하려는 의사가 있음을 나타내는 -f 또는 --force 플래그를 요구합니다.
본문
기본 사용법은 다음과 같습니다.
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