Datastax 6.8でのバックアップの取得と復旧

<h2>概要</h2>
今回はDSE6.8でのバックアップとリストアについて確認していきます。<br>
流れとしては以下になります。<br>
環境の準備→バックアップ→リストア<br>
ということで、まず環境の準備をしていきましょう。<br>

<h2>環境の準備</h2>
今回は3台のノードを準備し、１つのノードを構成しています。<br>
また、直接的には関係してこないですが、DCを2つに分けています。<br>
下ではkeyspaceを作成し、emailカラムをパーティションキーに指定しテーブルを作成して、そのあと3件INSERTしています。<br>

```
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
```


<h2>バックアップの取得</h2>
では次にバックアップを取得します。<br>
DSEではバックアップはnodetoolユーティリティを使用して取得します。<br>
ここで注意したいのが、OracleのようなバックアップとDSEのバックアップは根本から異なってくるということです。<br>
DSEのバックアップはdataファイルのハードリンクを取得するスナップショットなので非常に高速です。<br>

```
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
```

<h2>リストア</h2>
今回バックアップは取得していますが、リストアされたかわかるようにTRUNCATEでデータをいったん消しておきます。<br>
リストアの流れは以下の通りです。<br>
snapshotのフォルダから同テーブルのデータファイルを持つフォルダにファイルをコピーしてくる。<br>
↓<br>
sstableloaderを利用してリストアする。<br>
*今回TRUNCATEしているのでsnapshotフォルダ以下のTRUNCATE-user_by_email-*は削除しています。しかし、このようにTRUCATEなどをしたときは自然とバックアップが取られることが分かります。<br>

```
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
```
本来バックアップの取得からリストアまではすべてのノードで実施する必要がありますが、冗長だけなのでカットします。<br>