社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Couchbase cbbackup でデータをバックアップ・リストアしてみる

Couchbase server では公式のデータバックアップツールとして、cbbackup というものがある。
cbbackup | Couchbase Docs

Linux 上でインストールした Couchbase server に対して、バックアップを実行してみます。
環境
Version: 4.5.1-2844 Community Edition (build-2844)
Server Node数: 3
Bucket名: default

バックアップ前の状態
このように 100,000 件のレコードが登録されています。
f:id:blueskyarea:20181216145928p:plain
f:id:blueskyarea:20181216150103p:plain

バックアップ用コマンド

/opt/couchbase/bin/cbbackup couchbase://localhost:8091 /cb-backup -m full --single-node -u admin -p password

今回は couchbase server 上でそのままバックアップコマンドを実行するため、取得先サーバーとして、localhost を指定しています。
バックアップ先のディレクトリとして、/cb-backup を予め作成しておく必要があります。
"-m full" はフルバックアップを意味します
"--single-node" はバックアップするサーバを1台に絞ります(クラスター全体からバックアップしない)

実行すると、以下のようなメッセージが表示されます

# /opt/couchbase/bin/cbbackup couchbase://localhost:8091 /cb-backup -m full --single-node -u admin -p password
  [####################] 100.0% (33332/estimated 33332 msgs)
bucket: default, msgs transferred...
       :                total |       last |    per sec
 byte  :              2629467 |    2629467 |   300695.6
2018-12-16 01:38:07,871: mt could not find index server:0
done

バックアップ先に指定したディレクトリを見てみると、以下のようなファイルが生成されています。
実行時のタイムスタンプから、対象のバケット名やサーバ名など、思っていたよりも深いディレクトリ構造になっています。

# ls -alth cb-backup/2018-12-16T013759Z/2018-12-16T013759Z-full/bucket-default/node-172.26.0.3%3A8091/
total 4.8M
-rw-r--r-- 1 root root 3.9K Dec 16 01:38 seqno.json
drwxr-xr-x 2 root root 4.0K Dec 16 01:38 .
-rw-r--r-- 1 root root 4.8M Dec 16 01:38 data-0000.cbb
-rw-r--r-- 1 root root 5.6K Dec 16 01:38 snapshot_markers.json
-rw-r--r-- 1 root root  18K Dec 16 01:38 failover.json
drwxr-xr-x 3 root root 4.0K Dec 16 01:37 ..

データのクリア
一旦、すべてのデータをクリアします。
f:id:blueskyarea:20181216150145p:plain

リストア用コマンド

/opt/couchbase/bin/cbrestore /cb-backup couchbase://localhost:8091 -b default

実行すると以下のようなメッセージが表示されます。

# /opt/couchbase/bin/cbrestore /cb-backup couchbase://localhost:8091 -b default
  [####################] 100.0% (33332/estimated 33332 msgs)
bucket: default, msgs transferred...
       :                total |       last |    per sec
 byte  :              2629467 |    2629467 |   964675.8
done

リストア後の状態
f:id:blueskyarea:20181216150202p:plain
なんと、元あったデータの3分の1しか復元されていませんでした。
cbbackup 実行時に --single-node オプションをつけていた為、3台中1台分しかバックアップされていなかったようです。

改めて --single-node なしでバックアップ

# /opt/couchbase/bin/cbbackup couchbase://localhost:8091 /cb-backup -m full -u admin -p password
  [####################] 100.0% (100000/estimated 100000 msgs)
bucket: default, msgs transferred...
       :                total |       last |    per sec
 byte  :              7888890 |    7888890 |   293045.8
2018-12-16 05:51:27,091: mt could not find index server:0
done

ノード毎に3台分ディレクトリが生成されています。

# ls -alth /cb-backup/2018-12-16T055100Z/2018-12-16T055100Z-full/bucket-default/
total 20K
drwxr-xr-x 2 root root 4.0K Dec 16 05:51 node-172.26.0.3%3A8091
drwxr-xr-x 2 root root 4.0K Dec 16 05:51 node-172.26.0.1%3A8091
drwxr-xr-x 2 root root 4.0K Dec 16 05:51 node-172.26.0.2%3A8091
drwxr-xr-x 5 root root 4.0K Dec 16 05:51 .
drwxr-xr-x 3 root root 4.0K Dec 16 05:51 ..

改めてリストア
全てのデータがリストアされました。
f:id:blueskyarea:20181216150223p:plain

非常に基本的なバックアップを取得するつもりでしたが、オプションの意味を勘違いしていたことで、意図しない結果が得られました。
自分のドキュメント理解力も残念なところがありますが、試してみることが大切であると改めて感じます。