Couchbase Server バックアップの基本

# はじめに

どんなデータベースにとっても、バックアップは必須の機能です。

本稿では、Couchbase Serverのバックアップについて、押さえておくべき基本を整理します。

# RPOとRTO

### Recovery Point Objective (RPO)
失われるデータの最大許容量（の測定値）。

### Recovery Time Objective (RTO)
災害後にサービスを復旧する必要がある時間（を計算するのに用いる測定基準）。

# cbbackupmgr入門

cbbackupmgrは、Couchbase Serverのエンタープライズエディションに含まれる機能です。

cbbackupmgrによるバックアップは、リポジトリ単位で管理されます。リポジトリ単位での初回バックアップがフル・バックアップとなり、その後の同じリポジトリでのバックアップは差分バックアップとなります。新たなフルバックアップを行う際は、改めてリポジトリ作成を実施します。

cbbackupmgrは、エンタープライズエディションでのみ利用できます。

## コマンド解説

### リポジトリ初期化（クラスター全体をバックアップ対象として指定）
```
$ cbbackupmgr config --archive /data/backup --repo cluster
```

### リポジトリ（範囲指定）

`--include-buckets`によってバックアップ対象バケットを指定。

```
$ cbbackupmgr config --archive /data/backup --repo single \
--include-buckets travel-sample
```

`--disable-data`によって、データをバックアップ対象から除く（インデックスのみをバックアップ）。

```
$ cbbackupmgr config --archive /data/backup --repo single \
--disable-data
```


### リスト（リポジトリの状態を表示）

```
$ cbbackupmgr list --archive /data/backup
```

### バックアップ実行
```
$ cbbackupmgr backup --archive /data/backup --repo cluster \
--cluster couchbase://127.0.0.1 --username Administrator --password couchbase
```

```
$ cbbackupmgr backup --archive /data/backup --repo single \
--cluster couchbase://127.0.0.1 --username Administrator --password couchbase
```

### 復元

```
$ cbbackupmgr restore --archive /data/backup --repo cluster \
```

### マージ

```
$cbbackupmgr merge --archive /data/backup --repo cluster \
--start 2016-03-22T14_00_16.892277632-07_00 \
--end 2016-03-22T14_00_38.668068342-07_00
```

### リポジトリの削除

```
$ cbbackupmgr remove --archive /data/backup --repo cluster
```

## アーカイブのレイアウト

## ディレクトリ構成

バックアップアーカイブには、バックアップリポジトリとログディレクトリが含まれます。

### バックアップリポジトリ
各バックアップリポジトリには特定のクラスターのバックアップが含まれます。バックアップリポジトリ内には、実行された時間に対応するタイムスタンプを持つ名前のバックアップが含まれます。

### logディレクトリ
logsディレクトリには、バックアップアーカイブで実行されるすべてのcbbackupmgrコマンドのログ情報が含まれます。

```
+ / (Backup Archive)
  + example (Backup Repository)
    backup-meta.json
    + {year}-{month}-{day}T{hr}_{min}_{sec}.{nanos}-{tz_hour}_{tz_min} (Backup)
      + {bucket name}-{bucket uuid} (Bucket Backup)
        bucket-config.json
        views.json
        indexes.json
        full-text.json
        + data
          shard-0.fdb
          shard-1.fdb
          shard-2.fdb
          shard-3.fdb
      + {bucket name}-{bucket-uuid} (Bucket Backup)
        bucket-config.json
        views.json
        indexes.json
        full-text.json
        + data
          shard-0.fdb
          shard-1.fdb
          shard-2.fdb
          shard-3.fdb
    + {year}-{month}-{day}T{hr}_{min}_{sec}.{nanos}-{tz_hour}_{tz_min} (Backup)
      + {bucket name}-{bucket-uuid} (Bucket Backup)
        bucket-config.json
        views.json
        indexes.json
        full-text.json
        + data
          shard-0.fdb
          shard-1.fdb
          shard-2.fdb
          shard-3.fdb
      + {bucket name}-{bucket-uuid} (Bucket Backup)
        bucket-config.json
        views.json
        indexes.json
        full-text.json
        + data
          shard-0.fdb
          shard-1.fdb
          shard-2.fdb
          shard-3.fdb
  + logs (Logs folder)
    backup.log
```

## 関連ファイル説明

バックアップが作成されると、指定されたバックアップリポジトリのバックアップ構成ファイル（backup-meta.json）に、バックアップの作成方法に関する情報が取得されます。
このファイルは、バックアップリポジトリのバックアップ構成を保存するために使用されます。バックアップが実行されるたびに、これらのオプションが読み取られ、クラスターに接続され、最後に中断したポイントからデータがバックアップされます。このファイルのすべてのパラメーターは、バックアップリポジトリの作成時に指定されます。バックアップ構成ファイルには、以下の例のようなデータが含まれます。

```
{
  "configuration": {
    "exclude_buckets": [],
    "only_include_buckets": ["bucket-1", "bucket-2"],
    "exclude_collections": [],
    "only_include_collections": [],
    "key_filter": "",
    "value_filter": "",
    "disable_cluster_config": true,
    "disable_bucket_config": false,
    "disable_views": false,
    "disable_gsi_indexes": false,
    "disable_queries": true,
    "disable_ft_indexes": false,
    "disable_data": false,
    "allow_bucket_creation": false
  }
}
```
### bucket-config.json
このファイルには、指定されたバケットのバケット構成のバックアップが含まれます。バケットパスワードを除くすべてのバケット構成パラメータがこのファイルに保存されます。

### views.json
このファイルには、特定のバケット内のすべてのデザインドキュメントとビューのバックアップが含まれます。
※ビューの利用は、現行バージョンでは推奨されていません。

### indexs.json
このファイルには、特定のバケット内のすべてのグローバルセカンダリインデックスのバックアップが含まれます。

### full-text.json
このファイルには、特定のバケット内のすべてのフルテキストインデックスのバックアップが含まれます。

### shard-*.fdb
データを含むforestdbファイル。シャードの数は、バックアップ中に使用されるクライアントの数によって決まります。クライアントの数は、cbbackupmgr-backupコマンドの--threadsフラグで指定されます。

# バックアップ失敗への対処

## エラーメッセージの例
```
Error backing up cluster: Not all data was backed up due to connectivity issues.
Check to make sure there were no server side failures during backup. See backup
logs for more details on what wasn't backed up.
```
```
Error backing up cluster: Partial backup error 2020
```

## エラーからの回復

下記のように`--resume`または`--purge`オプションを用いて実行します。エラー回復処理が行われない限り、そのリポジトリでの以降のバックアップは失敗します。

```
$ cbbackupmgr backup -a /data/backups -r example - c 172.23.10.5 \
-u Administrator -p password --resume
```

# cbbackupとcbrestore

## cbbackup

```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password
```
```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password \
  -m diff
```
```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password \
  -b beer-sample
```
```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password \
  --single-node
```
```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password \
  -k '^KEY:.*'
```
```
$ cbbackup http://10.112.193.101:8091 ~/backups -u Administrator -p password \
  -x data_only=1
```

## cbrestore

```
$ cbrestore ~/backups http://10.112.193.101:8091 -u Administrator \
  -p password
```
```
$ cbrestore ~/backups http://10.112.193.101:8091 -u Administrator \
  -p password -b beer-sample -B new-bucket
```
```
$ cbrestore ~/backups http://10.112.193.101:8091 -u Administrator \
  -p password -b beer-sample --from-date 2019-06-25 --to-date 2019-06-27
```
```
$ cbrestore ~/backups http://10.112.193.101:8091 -u Administrator \
 -p password -b default --k '^user:.*'
```

# 参考情報

[cbbackupmgr Tool](https://docs.couchbase.com/server/current/backup-restore/enterprise-backup-restore.html)

[cbbackup](https://docs.couchbase.com/server/current/cli/cbtools/cbbackup.html)

[cbrestore](https://docs.couchbase.com/server/current/cli/cbtools/cbrestore.html)

[RTO (Recovery Time Objective) vs. RPO (Recovery Point Objective),そして災害復旧計画](https://www.climb.co.jp/blog_veeam/veeam-backup-18990#:~:text=RPO(Recovery%20Point%20Objective%EF%BC%9A%E7%9B%AE%E6%A8%99,%E3%81%AE%E3%81%AB%E3%82%82%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82)