본문 바로가기
▶ Back-End/DataBase

Cassandra Snapshot Backup And Restore 방법

by 오늘도 코딩 2023. 10. 4.
728x90
반응형

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

 

 

728x90
728x90

댓글