概要
今回はDSE6.8でのバックアップとリストアについて確認していきます。流れとしては以下になります。
環境の準備→バックアップ→リストア
ということで、まず環境の準備をしていきましょう。
環境の準備
今回は3台のノードを準備し、1つのノードを構成しています。また、直接的には関係してこないですが、DCを2つに分けています。
下ではkeyspaceを作成し、emailカラムをパーティションキーに指定しテーブルを作成して、そのあと3件INSERTしています。
CREATE KEYSPACE dse_qiita_backup_restore WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': 2, 'dc2': 1};
CREATE TABLE user_by_email (
email TEXT,
password TEXT,
user_id UUID,
PRIMARY KEY ((email))
);
INSERT INTO dse_qiita_backup_restore.user_by_email (email, password, user_id) VALUES
('aaa@gmail.com', 'aaa', 00000000-0000-0000-0000-000123456789);
INSERT INTO dse_qiita_backup_restore.user_by_email (email, password, user_id) VALUES
('bbb@gmail.com', 'bbb', 00000000-0000-0000-0000-000123456790);
INSERT INTO dse_qiita_backup_restore.user_by_email (email, password, user_id) VALUES
('ccc@gmail.com', 'ccc', 00000000-0000-0000-0000-000123456791);
SELECT * FROM dse_qiita_backup_restore.user_by_email ALLOW FILTERING;
email | password | user_id
---------------+----------+--------------------------------------
aaa@gmail.com | aaa | 00000000-0000-0000-0000-000123456789
ccc@gmail.com | ccc | 00000000-0000-0000-0000-000123456791
bbb@gmail.com | bbb | 00000000-0000-0000-0000-000123456790
バックアップの取得
では次にバックアップを取得します。DSEではバックアップはnodetoolユーティリティを使用して取得します。
ここで注意したいのが、OracleのようなバックアップとDSEのバックアップは根本から異なってくるということです。
DSEのバックアップはdataファイルのハードリンクを取得するスナップショットなので非常に高速です。
nodetool snapshot dse_qiita_backup_restore
Requested creating snapshot(s) for [dse_qiita_backup_restore] with snapshot name [1662787611693] and options {skipFlush=false}
Snapshot directory: 1662787611693
リストア
今回バックアップは取得していますが、リストアされたかわかるようにTRUNCATEでデータをいったん消しておきます。リストアの流れは以下の通りです。
snapshotのフォルダから同テーブルのデータファイルを持つフォルダにファイルをコピーしてくる。
↓
sstableloaderを利用してリストアする。
*今回TRUNCATEしているのでsnapshotフォルダ以下のTRUNCATE-user_by_email-*は削除しています。しかし、このようにTRUCATEなどをしたときは自然とバックアップが取られることが分かります。
node1
cqlsh > TRUNCATE dse_qiita_backup_restore.user_by_email
sudo sh -c 'cp /var/lib/cassandra/data/dse_qiita_backup_restore/user_by_email-b01545d130c811edba4925d1628f6955/snapshots/1662787611693/bb-* /var/lib/cassandra/data/dse_qiita_backup_restore/user_by_email-b01545d130c811edba4925d1628f6955'
sudo ls -al /var/lib/cassandra/data/dse_qiita_backup_restore/user_by_email-b01545d130c811edba4925d1628f6955/
total 48
drwxr-xr-x 4 cassandra cassandra 4096 9月 10 14:36 .
drwxr-xr-x 4 cassandra cassandra 4096 9月 10 14:23 ..
drwxr-xr-x 2 cassandra cassandra 4096 9月 10 14:23 backups
-rw-r--r-- 1 root root 47 9月 10 14:36 bb-1-bti-CompressionInfo.db
-rw-r--r-- 1 root root 106 9月 10 14:36 bb-1-bti-Data.db
-rw-r--r-- 1 root root 10 9月 10 14:36 bb-1-bti-Digest.crc32
-rw-r--r-- 1 root root 16 9月 10 14:36 bb-1-bti-Filter.db
-rw-r--r-- 1 root root 73 9月 10 14:36 bb-1-bti-Partitions.db
-rw-r--r-- 1 root root 0 9月 10 14:36 bb-1-bti-Rows.db
-rw-r--r-- 1 root root 4733 9月 10 14:36 bb-1-bti-Statistics.db
-rw-r--r-- 1 root root 94 9月 10 14:36 bb-1-bti-TOC.txt
drwxr-xr-x 3 cassandra cassandra 4096 9月 10 14:33 snapshots
sudo sstableloader -d 192.168.56.124 /var/lib/cassandra/data/dse_qiita_backup_restore/user_by_email-b01545d130c811edba4925d1628f6955
SELECT * FROM dse_qiita_backup_restore.user_by_email ALLOW FILTERING;
email | password | user_id
---------------+----------+--------------------------------------
aaa@gmail.com | aaa | 00000000-0000-0000-0000-000123456789
ccc@gmail.com | ccc | 00000000-0000-0000-0000-000123456791
bbb@gmail.com | bbb | 00000000-0000-0000-0000-000123456790
本来バックアップの取得からリストアまではすべてのノードで実施する必要がありますが、冗長だけなのでカットします。