Couchbase Server機能解説：Backupサービス


## はじめに

Couchbase Serverは、データのバックアップをスケジュールすることができます。また、作成されたバックアップデータのマージをスケジュールすることもできます。これには、Backupサービスが用いられます。

## Backupサービス概要

Backupサービスは、クラスター上のすべてのバケット、または特定のバケットに対する、完全または増分データバックアップのスケジューリングをサポートします。（CouchbaseバケットとEphemeralバケットの両方をバックアップできます）。
Backupサービスでは、以前に作成したバックアップのマージをスケジュールすることもできます。
バックアップするデータはサービスごとに選択することもできます。たとえば、DataサービスとIndexサービスのデータのみをバックアップ用に選択し、他のサービスのデータを含めない場合があります。

Backupサービスは、Couchbase WebコンソールUI、CLI、REST　APIを使用して構成管理できます。

## Backupサービスの使い方

### バックアッププラン

Backupサービスは、管理者が定義したバックアッププランに基づいて自動化されます。バックアッププランには次の情報が含まれています。

- バックアップのターゲット情報（サービス、バケット）
- 実行するタスクのタイプ：バックアップ（完全または増分）、またはマージ
- タスクを実行するスケジュール

### リポジトリ
リポジトリは、バックアップされたデータが格納される場所です。
この場所は、クラスター内のすべてのノードからアクセス可能である必要があります。また、クラスター全体で一意の名前が割り当てられている必要があります。
リポジトリは、特定のバックアッププランに対して定義されます。

実行中の各タスクは、リポジトリに対してロックを維持します。そのため、同じリポジトリに対して実行中のタスクが存在する場合、新しいタスクは実行することができません。実行できないタスクはキューに入れられます。予期しないネットワーク遅延が発生した場合でも、スケジュールされた各タスクが、次のタスクが開始される前に完了するように、十分に大きい間隔を空けてタスクをスケジュールすることが推奨されます。

### 検査
特定のリポジトリに対して行われたバックアップの履歴に対して、正しく行われた有効なバックアップかどうかを検査することできます。

### 復元

リポジトリ内のバックアップデータを、クラスターの指定したバケットに復元することができます。その際、ドキュメントのキーと値をフィルタリングして、データのサブセットのみが復元されるようにすることもできます。データは元のキースペースに復元することも、別のキースペースに復元することもできます。

### アーカイブとインポート
リポジトリをアクティブにしておく必要がなくなった場合（つまり、継続的なバックアップとマージが引き続き発生しない場合）には、リポジトリをアーカイブすることができます。アーカイブされたリポジトリは、必要に応じてクラスタにインポートすることができます。

## Backupサービスの利用

### WEB管理コンソール

ここでは、WEB管理コンソールのバックプラン作成画面とレポジトリ作成画面を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/83599edf-b14e-14f3-4358-6d0c5d7c480f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/ba3c4f8a-04e7-a224-29ee-ac32256677f2.png)



### Backupサービスと`cbbackupmgr`

Backupサービスの基盤となるバックアップタスクは`cbbackupmgr`によって実行されます。
`cbbackupmgr`をコマンドラインで使用して、マニュアルで、バックアップとマージを実行することができます。
どちらも同じバックアップアーカイブ構造が用いられており、バックアップの内容を一覧表示し、特定のドキュメントを検索することができます。

Backupサービスと`cbbackupmgr`（独立して使用される場合）には、次のような違いがあります。

- Backupサービスでは、バックアップおよびアーカイブをローカルクラスター用に構成し、復元をリモートクラスター用に構成することもできます。これに対して、`cbbackupmgr`では、バックアップ、復元、およびアーカイブを、特定のクラスターに構成することになります。
- Backupサービスとは異なり、`cbbackupmgr`では、新しい完全バックアップごとに新しいリポジトリを作成する必要があります（`cbbackupmgr`における、同じリポジトリへの連続したバックアップは増分バックアップになります）。

ここでは、`cbbackupmgr`のサブコマンドを紹介します。

```cmd
$ cbbackupmgr
cbbackupmgr [<command>] [<args>]

  backup         Backup a Couchbase cluster
  collect-logs   Collect debugging information
  compact        Compact an incremental backup (Unsupported for 6.6.0+ backups)
  config         Create a new backup configuration
  help           Get extended help for a subcommand
  examine        Search inside a backup/repository for a specified document (Enterprise Edition Only)
  info           Provide information about the archive
  merge          Merge incremental backups together (Enterprise Edition Only)
  remove         Delete a backup permanently
  restore        Restore an incremental backup

Optional Flags:

     --version                Prints version information
  -h,--help                   Prints the help message
```

## Backupサービスのアーキテクチャ

Backupサービスには、リーダー・フォロワー・アーキテクチャが用いられています。`ns_server`によって、クラスタのBackupサービス・ノードのいずれかがリーダーとして選出されます。リーダーは、バックアップタスクのフォロワーに対するディスパッチを担当します。

リーダーが応答しなくなった場合、またはフェイルオーバーのために失われた場合、Backupサービスはリバランスが実行されるまで動作を停止します。このリバランスの過程で、`ns_server`は新しいリーダーを選出し、Backupサービスは再開されます。


### 関連情報

[Couchbase公式ドキュメント　Backup Service](https://docs.couchbase.com/server/current/learn/services-and-indexes/services/backup-service.html)