cbbackupツールは、ローカルのデータと、リモートのノード、クラスタの両方など、さまざまなデータの組み合わせによるバックアップを可能にする柔軟なバックアップコマンドです:
単一ノード上の単一バケット
単一ノード上のすべてのバケット
クラスタ全体の単一バケット
クラスタ全体のすべてのバケット
バックアップは、単一ノード上のファイルを直接コピーすることによってローカルでも実行できますし、クラスタに接続してクラスタからバックアップ場所へデータをストリーミングすることによってリモートでも実行できます。バックアップは、実行中のノードもしくはクラスタでも、オフラインのノードでも実行できます。
cbbackupコマンドは簡単にリストアが可能な形式でデータを格納します。リストア時、cbrestoreを使用すると、どのような構成のクラスタへもリストアすることができます。情報の保存にcbbackupを使用した場合、送信元と宛先のクラスタが一致する必要はありません。
cbbackupコマンドは、ソース定義から宛先バックアップディレクトリに各ソースのデータをコピーします。バックアップファイルの形式はCouchbase特有のものであり、情報をクラスタにリストアするとき、すべてもしくは一部のバックアップデータをリストアすることができます。特定のキー(正規表現で指定)、もしくは特定のvBucketIDで保存されているデータすべてを指定することができます。データをリストアするクラスタ上で、あるバケット名の元のデータを別の名前のバケットへコピーすることを選択することもできます。
cbbackupコマンドは次の引数を取ります:
cbbackup [options] [source] [backup_dir]
引数は以下の通りです:
[options]
バックアップ処理のための1つ以上のオプション。これらは、クラスタへの接続のためのユーザ名とパスワードの情報、バックアップの種類の選択、およびバケットの選択を設定するために使用されます。サポートされている引数の完全なリストについては、「cbbackupツール」を参照してください。
主なオプションはcbbackupによってバックアップされるものを選択し、次を含みます:
--single-node
送信元指定により識別される単一ノードのみをバックアップします。
--bucket-source
または-b
指定したバケット名のみバックアップします。
[source]
ローカルのデータディレクトリへの参照か、リモートのノードもしくはクラスタの指定のどちらかによるデータの送信元です:
ローカルのディレクトリの指定
ローカルのディレクトリの指定は、couchstore-files
プロトコル接頭辞のURLとして定義されます。例:
couchstore-files:///opt/couchbase/var/lib/couchbase/data/default
この方法を使用すると、単一のノード上だけの指定されたバケットデータを明確にバックアップします。クラスタ間のバケットデータ全体、または単一ノード上のすべてのデータをバックアップするには、リモートのクラスタもしくはノードの指定を使用する必要があります。この方法では、バケット内で定義されたデザインドキュメントをバックアップしません。
リモートのクラスタもしくはノードの指定
ノードもしくはクラスタ内のノードで、ノードもしくはクラスタへのURLとして指定します。例:
http://HOST:8091
もしくは、区別のためcouchbase
プロトコル接頭辞を使用することができます:
couchbase://HOST:8091
管理者名とパスワードも認証のためにURLの両方の形態で組み合わせることができます。バックアップしたいデータバケットをデフォルト以外に名付けている場合、バケットの管理用の名前とパスワードを指定する必要があります:
couchbase://Administrator:password@HOST:8091
追加のオプションの組み合わせは、指定されたURLがクラスタ全体、単一のノード、または(ノードまたはクラスタの)単一のバケットを参照するかどうかを指定します。ノードとクラスタはリモート(またはローカル)でもかまいません。
この方法では、ビューおよびインデックスを定義するために使用するデザインドキュメントもバックアップします。
[backup_dir]
cbbackupを実行するノード上の、バックアップデータファイルを格納するディレクトリです。指定されたディレクトリ内に直接ファイルが格納されるので、これは絶対的で明示的なディレクトリである必要があります。データバックアップのコンポーネントを区別するためにディレクトリを追加で作成することはしません。
バックアップに指定したディレクトリは存在しない、もしくは存在していて他のファイルがない状態である必要があります。ディレクトリが存在しない場合、作成されますが、親ディレクトリがすでに存在する場合のみです。
バックアップディレクトリは、リモートノードもしくはクラスタをバックアップしている場合でさえも常にローカルノードで作成されます。バックアップファイルは、指定したバックアップディレクトリにローカルに保存されます。
バックアップは、IPで指定された実行中のクラスタもしくはノード上で行われます。
この基本構造を使用して、送信元クラスタの様々な組み合わせのデータをバックアップすることができます。様々な組み合わせの例を以下に示します:
すべてのノードとすべてのバケットのバックアップ
すべてのバケットとすべてのノードのデータで構成される、クラスタ全体をバックアップするには:
shell> cbbackup http://HOST:8091 /backups/backup-20120501 \ -u Administrator -p password [####################] 100.0% (231726/231718 msgs) bucket: default, msgs transferred... : total | last | per sec batch : 5298 | 5298 | 617.1 byte : 10247683 | 10247683 | 1193705.5 msg : 231726 | 231726 | 26992.7 done [####################] 100.0% (11458/11458 msgs) bucket: loggin, msgs transferred... : total | last | per sec batch : 5943 | 5943 | 15731.0 byte : 11474121 | 11474121 | 30371673.5 msg :84 |84 | 643701.2 done
複数のバケットをバックアップするとき、進捗状況のレポート、そして転送された情報の要約レポートがバケットのバックアップごとに一覧表示されます。msgs
カウントはバックアップされたドキュメントの数を表しています。byte
はドキュメントデータ全体のサイズを表しています。
この場合でのバックアップ対象の指定方法は、クラスタ内のノードのひとつのURLとなります。バックアップ処理は、バックアップコンテンツを作成するために、各ノードから直接データをストリーミングします。初期ノードは、データをバックアップすることができるように、クラスタ・トポロジを取得するためにのみ使用されます。
この方法で作成されたバックアップを使用すると、情報をリストアする方法をリストア時に選択することができます。任意のサイズや構成のクラスタの上に、データセット全体、または単一のバケット、またはその情報をフィルタリングするなどを選択できます。
すべてのノードの単一のバケットのバックアップ
クラスタ全体から情報のすべてを含む、単一のバケットのすべてのデータをバックアップするには:
shell> cbbackup http://HOST:8091 /backups/backup-20120501 \ -u Administrator -p password \ -b default [####################] 100.0% (231726/231718 msgs) bucket: default, msgs transferred... : total | last | per sec batch : 5294 | 5294 | 617.0 byte : 10247683 | 10247683 | 1194346.7 msg : 231726 | 231726 | 27007.2 done
-b
オプションでは、バックアップしたいバケットの名前を指定します。バケットが名前付きバケットである場合、そのバケットの管理者名とパスワードを提供する必要があります。
クラスタ全体をバックアップするには、クラスタ内の各バケットで同じ操作を実行する必要があります。
単一ノードのすべてのバケットのバックアップ
様々なバケットすべてにまたがる、単一のノードに格納されているすべてのデータをバックアップするには:
shell> cbbackup http://HOST:8091 /backups/backup-20120501 \ -u Administrator -p password \ --single-node
この方法を使用する場合、バックアップ対象の指定には、バックアップしたいノードを指定する必要があります。この方法を使用してクラスタ全体をバックアップするには、別々に各ノードをバックアップする必要があります。
単一ノードの単一バケットのバックアップ
単一ノード上の単一のバケットからデータをバックアップするには:
shell> cbbackup http://HOST:8091 /backups/backup-20120501 \ -u Administrator -p password \ --single-node \ -b default
この方法を使用する場合、バックアップしたいノードをバックアップ対象に指定する必要があります。
単一ノードの単一バケットと、同じノードに格納されたバックアップファイルのバックアップ
単一ノード上の単一バケットを、バックアップ元データと同じノード上に格納されているファイルと一緒にバックアップするには2つの方法があります。ひとつはノードを指定する方法と、もうひとつはファイルの格納先を指定する方法です。ノードを指定する方法は:
shell> ssh USER@HOST remote-shell> sudo su - couchbase remote-shell> cbbackup http://127.0.0.1:8091 /mnt/backup-20120501 \ -u Administrator -p password \ --single-node \ -b default
この方法は、ローカルノード上の単一のバケットのクラスタデータをバックアップし、ローカルのファイルシステムにバックアップデータを格納します。
(ノードの指定の代わりに)ファイルの格納先を指定すると、データファイルが元のディレクトリからバックアップディレクトリに直接コピーされるのでより早くなります。
shell> ssh USER@HOST remote-shell> sudo su - couchbase remote-shell> cbbackup couchstore-files:///opt/couchbase/var/lib/couchbase/data/default /mnt/backup-20120501
この方法を使用してクラスタ全体をバックアップするには、各ノードそして各バケットを別々にバックアップする必要があります。
最適なバックアップソリューションを選択することは、要件と、クラスタにデータをリストアする予定の方法に依存します。
cbbackupコマンドでは作成するデータベースファイルへバックアップされるキーのフィルタリングが可能です。これはデータセットの一部をバックアップしたい場合や、別のバケットにデータセットの一部を移動したい場合に特に役に立つでしょう。
キーの指定は正規表現の形式であり、cbbackupツール内のクライアントサイド上で実行されます。たとえば、'object'の接頭辞を持つキーがあるバケットから情報をバックアップするためには:
shell> cbbackup http://HOST:8091 /backups/backup-20120501 \ -u Administrator -p password \ -b default \ -k '^object.*'
上記では、バックアップファイルに指定された接頭辞に一致するキーだけをコピーします。データがリストアされるとき、バックアップファイルで記録されたキーのみがリストアされます。
正規表現のマッチング処理は、クライアント側で行われます。 これは、バケットの内容全体がcbbackupコマンドによってアクセスされる必要があり、正規表現に一致しない場合、捨てられることを意味します。
データをリストアするとき、キーベースの正規表現を使用することもできます。 バケット全体をバックアップし、cbrestoreを使用したリストア処理のときに選択したキーをリストアすることもできます。詳細については、「cbrestoreツールを使用したリストア」を参照して下さい。
cbbackupを使用しても、データを格納するローカルディレクトリを指定しても、またはcp、tarやその他のコマンドを使用してデータファイルを直接コピーしても、バックアップすることができます。
たとえば、cbbackup使用して:
shell> cbbackup \ couchstore-files:///opt/couchbase/var/lib/couchbase/data/default \ /mnt/backup-20120501
cpを使用すると、次のようになります:
shell> cp -R /opt/couchbase/var/lib/couchbase/data/default \ /mnt/copy-20120501
この方法で情報をバックアップすることの制限は、同一構成のクラスタ内にある停止中のノードにしかデータをリストアできないということです (各ノードからconfig.dat
ファイルもコピーする必要があります)。