Cassandra에서 Snapshot을 이용한 Backup 및 Restore 방법
*Cassandra 설치 환경 생략
*Cassandra 기본 설정으로 진행
*자세한 설명 생략
▷ Table 생성
*Snapshot은 원하는 시점에 생성할 수 있다.( nodetool snapshot --table {table} {keyspace} )
*여기서는 Table 삭제 시 자동으로 생성된 Snapshot으로 진행
CREATE TABLE {Keyspace}.TB_TEST
(
TEST_CD TEXT,
TEST_NM TEXT,
PRIMARY KEY ((TEST_CD))
);
▷ Cassandra Backup 확인
*Data 생성 후에도 Cassandra Backup 폴더는 변하지 않는다.
#Cassandra Backup Data 위치
💡cd /opt/cassandra/data/data/{Keyspace Name}
# 위 테이블 생성 후 폴더 생성 확인
💡ll |grep test
# 확인
💡ll
total 20
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:23 tb_test-9214b6b0625411eeb8737b33ab87090f/
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:23 ./
drwxr-xr-x 129 cassandra cassandra 12288 Oct 4 01:23 ../
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:23 backups/
💡cd backups/
💡ll
total 8
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:23 ./
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:23 ../
▷ Data 생성
# 생성
INSERT INTO {Keyspace}.TB_TEST (TEST_CD, TEST_NM) VALUES ('TEST-HELLO1', 'TEST-HELLO1');
INSERT INTO {Keyspace}.TB_TEST (TEST_CD, TEST_NM) VALUES ('TEST-HELLO2', 'TEST-HELLO2');
# 확인
SELECT * FROM {Keyspace}.TB_TEST;
▷ Table 삭제
DROP TABLE {Keyspace}.TB_TEST;
▷ Cassandra Backup 확인
#Cassandra Backup Data 위치
💡cd /opt/cassandra/data/data/{Keyspace Name}
#폴더 수정 확인
💡ll |grep test
# Snapshot 생성 확인
💡ll
total 24
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:23 tb_test-9214b6b0625411eeb8737b33ab87090f/
drwxr-xr-x 4 cassandra cassandra 4096 Oct 4 01:34 ./
drwxr-xr-x 129 cassandra cassandra 12288 Oct 4 01:23 ../
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:23 backups/
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:34 snapshots/
#backups 폴더 확인
💡cd backups/
💡ll
total 8
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:23 ./
drwxr-xr-x 4 cassandra cassandra 4096 Oct 4 01:34 ../
#snapshots 폴더 확인
💡cd snapshots/
💡ll
total 12
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:34 ./
drwxr-xr-x 4 cassandra cassandra 4096 Oct 4 01:34 ../
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:34 dropped-1696383286312-tb_test/
#snapshots 관련 파일
💡cd dropped-1696383286312-tb_test/
💡ll
total 52
drwxr-xr-x 2 cassandra cassandra 4096 Oct 4 01:34 ./
drwxr-xr-x 3 cassandra cassandra 4096 Oct 4 01:34 ../
-rw-r--r-- 1 cassandra cassandra 88 Oct 4 01:34 manifest.json
-rw-r--r-- 1 cassandra cassandra 47 Oct 4 01:34 nb-1-big-CompressionInfo.db
-rw-r--r-- 1 cassandra cassandra 61 Oct 4 01:34 nb-1-big-Data.db
-rw-r--r-- 1 cassandra cassandra 10 Oct 4 01:34 nb-1-big-Digest.crc32
-rw-r--r-- 1 cassandra cassandra 16 Oct 4 01:34 nb-1-big-Filter.db
-rw-r--r-- 1 cassandra cassandra 30 Oct 4 01:34 nb-1-big-Index.db
-rw-r--r-- 1 cassandra cassandra 4719 Oct 4 01:34 nb-1-big-Statistics.db
-rw-r--r-- 1 cassandra cassandra 77 Oct 4 01:34 nb-1-big-Summary.db
-rw-r--r-- 1 cassandra cassandra 92 Oct 4 01:34 nb-1-big-TOC.txt
-rw-r--r-- 1 cassandra cassandra 902 Oct 4 01:34 schema.cql
▷ schema.cql 실행
*모든 Snapshot은 schema.cql에 정의된 대로 테이블을 생성/사용 하지 않으면 Data 유실 위험(중요)
*같은 이름의 Table을 생성해도, Cassandra 내부에서 Table을 기억(ID)
#DDL 복사
💡vi schema.cql
CREATE TABLE IF NOT EXISTS {Keyspace}.tb_test (
test_cd text PRIMARY KEY,
test_nm text
) WITH ID = 9214b6b0-6254-11ee-b873-7b33ab87090f
AND additional_write_policy = '99p'
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND cdc = false
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND memtable = 'default'
AND crc_check_chance = 1.0
AND default_time_to_live = 0
AND extensions = {}
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair = 'BLOCKING'
AND speculative_retry = '99p';
💡:q
#cqlsh을 통해 DDL 실행
💡cqlsh
💡CREATE TABLE IF NOT EXISTS {Keyspace}.tb_test (
16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND memtable = 'default'
AND crc_check_chance = 1.0
AND default_time_to_live = 0
AND extensions = {}
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair = 'BLOCKING'
AND speculative_retry = '99p'; ... test_cd text PRIMARY KEY,
... test_nm text
... ) WITH ID = 9214b6b0-6254-11ee-b873-7b33ab87090f
... AND additional_write_policy = '99p'
... AND bloom_filter_fp_chance = 0.01
... AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
... AND cdc = false
... AND comment = ''
... AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
... AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
... AND memtable = 'default'
... AND crc_check_chance = 1.0
... AND default_time_to_live = 0
... AND extensions = {}
... AND gc_grace_seconds = 864000
... AND max_index_interval = 2048
... AND memtable_flush_period_in_ms = 0
... AND min_index_interval = 128
... AND read_repair = 'BLOCKING'
... AND speculative_retry = '99p';
#Table 생성 확인
💡SELECT * FROM {Keyspace}.TB_TEST;
▷ Data 생성
#생성
INSERT INTO {Keyspace}.TB_TEST (TEST_CD, TEST_NM) VALUES ('TEST-HELLO3', 'TEST-HELLO3');
#확인
SELECT * FROM {Keyspace}.TB_TEST;
▷ Snapshot Backup Data Import
*import 명령 실행 시, Snapshot 사라짐(SSTable) → 상속
nodetool import -- {Keyspace} tb_test /opt/cassandra/data/data/{Keyspace}/tb_test-9214b6b0625411eeb8737b33ab87090f/snapshots/dropped-1696383286312-tb_test
▷ 결과 확인
*schema.cql로 생성한 Table에 INSERT 한 Data와 Backup 된 Data를 확인할 수 있다.
#확인
SELECT * FROM {Keyspace}.TB_TEST
#결과
TEST-HELLO1 TEST-HELLO1
TEST-HELLO2 TEST-HELLO2
TEST-HELLO3 TEST-HELLO3
▷ 관련 글
Cassandra 기본 개념
Apache Cassandra의 기본 개념을 간단히 소개 *자세한 설명 생략 ▷ Cassandra 란? *현재 Facebook과 twitter 등 에서 사용 - Apache Cassandra는 대용량 데이터를 관리하기 위해 설계된 시스템으로 분산형 오픈소
coding-today.tistory.com
'▶ Back-End > DataBase' 카테고리의 다른 글
Docker MariaDB 설치 방법 및 기본 사용 방법 (0) | 2024.07.01 |
---|---|
MySql ON DUPLICATE KEY UPDATE 구문 (0) | 2023.08.02 |
Mybatis Oracle BEGIN-END(PL/SQL) (0) | 2021.02.04 |
Mybatis foreach문(반복문/동적 SQL) (0) | 2021.02.04 |
Mybatis Oracle Paging Query(더보기 기능) (0) | 2021.02.03 |
댓글