sstableupgrade — SSTable 버전 업그레이드·다운그레이드

sstableupgrade — SSTable 버전 업그레이드·다운그레이드

sstableupgrade는 주어진 테이블(또는 스냅샷)의 SSTable을 현재 Cassandra 버전으로 업그레이드해요. 이 과정은 보통 Cassandra 버전 업그레이드 후 수행합니다. 이 작업은 지정한 테이블의 SSTable을 현재 설치된 Cassandra 버전에 맞게 다시 기록(rewrite)합니다. sstableupgrade 명령은 SSTable을 이전 버전으로 다운그레이드하는 데에도 사용할 수 있어요.

스냅샷 옵션은 지정한 스냅샷만 업그레이드합니다. 현재 실행 중인 Cassandra 메이저 버전보다 오래된 메이저 버전에서 만든 스냅샷을 복원하려 할 때는, 먼저 스냅샷 업그레이드가 필요합니다. 이 작업은 주어진 스냅샷의 파일을 교체하며, 라이브 sstable에 대한 하드링크도 끊어버립니다.

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

출처: sstableupgrade — SSTable 버전 업그레이드·다운그레이드

본문

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

sstableupgrade <options> <keyspace> <table> [snapshot_name]

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

옵션 설명
--debug 스택 트레이스 표시
-h,--help 도움말 메시지 표시
-k,--keep-source 원본 sstable을 삭제하지 않음

테이블을 현재 Cassandra 버전으로 재작성

한 버전의 Cassandra SSTable 세트로 시작해 봅시다.

ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/
...
-rw-r--r--   1 user  wheel      348 Aug 22 13:45 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--   1 user  wheel  5620000 Aug 22 13:45 keyspace1-standard1-ka-1-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:45 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--   1 user  wheel    25016 Aug 22 13:45 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--   1 user  wheel   480000 Aug 22 13:45 keyspace1-standard1-ka-1-Index.db
-rw-r--r--   1 user  wheel     9895 Aug 22 13:45 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--   1 user  wheel     3562 Aug 22 13:45 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--   1 user  wheel       79 Aug 22 13:45 keyspace1-standard1-ka-1-TOC.txt

Cassandra 버전을 업그레이드한 뒤, sstable을 업그레이드하세요.

sstableupgrade keyspace1 standard1
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') complete.

ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/
...
drwxr-xr-x   2 user  wheel       64 Aug 22 13:48 backups
-rw-r--r--   1 user  wheel      292 Aug 22 13:48 mc-2-big-CRC.db
-rw-r--r--   1 user  wheel  4599475 Aug 22 13:48 mc-2-big-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:48 mc-2-big-Digest.crc32
-rw-r--r--   1 user  wheel    25256 Aug 22 13:48 mc-2-big-Filter.db
-rw-r--r--   1 user  wheel   330807 Aug 22 13:48 mc-2-big-Index.db
-rw-r--r--   1 user  wheel    10312 Aug 22 13:48 mc-2-big-Statistics.db
-rw-r--r--   1 user  wheel     3506 Aug 22 13:48 mc-2-big-Summary.db
-rw-r--r--   1 user  wheel       80 Aug 22 13:48 mc-2-big-TOC.txt

테이블을 현재 Cassandra 버전으로 재작성하고 구버전 테이블 유지

다시, 한 버전의 SSTable 세트로 시작합니다.

ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/
...
-rw-r--r--   1 user  wheel      348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--   1 user  wheel  5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--   1 user  wheel    25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--   1 user  wheel   480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db
-rw-r--r--   1 user  wheel     9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--   1 user  wheel     3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--   1 user  wheel       79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt

Cassandra 버전을 업그레이드한 뒤, 원본 sstable을 유지하면서 sstable을 업그레이드하세요.

sstableupgrade keyspace1 standard1 -k
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') complete.

ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/
...
drwxr-xr-x   2 user  wheel       64 Aug 22 14:00 backups
-rw-r--r--@  1 user  wheel      348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--@  1 user  wheel  5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db
-rw-r--r--@  1 user  wheel       10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--@  1 user  wheel    25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--@  1 user  wheel   480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db
-rw-r--r--@  1 user  wheel     9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--@  1 user  wheel     3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--@  1 user  wheel       79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt
-rw-r--r--   1 user  wheel      292 Aug 22 14:01 mc-2-big-CRC.db
-rw-r--r--   1 user  wheel  4596370 Aug 22 14:01 mc-2-big-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 14:01 mc-2-big-Digest.crc32
-rw-r--r--   1 user  wheel    25256 Aug 22 14:01 mc-2-big-Filter.db
-rw-r--r--   1 user  wheel   330801 Aug 22 14:01 mc-2-big-Index.db
-rw-r--r--   1 user  wheel    10312 Aug 22 14:01 mc-2-big-Statistics.db
-rw-r--r--   1 user  wheel     3506 Aug 22 14:01 mc-2-big-Summary.db
-rw-r--r--   1 user  wheel       80 Aug 22 14:01 mc-2-big-TOC.txt

스냅샷을 현재 Cassandra 버전으로 재작성

스냅샷 이름을 찾아보세요.

nodetool listsnapshots

Snapshot Details:
Snapshot name       Keyspace name                Column family name           True size          Size on disk
...
1534962986979       keyspace1                    standard1                    5.85 MB            5.85 MB

그런 다음 스냅샷을 재작성합니다.

sstableupgrade keyspace1 standard1 1534962986979
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') complete.

더 알아보기 (Learn more)