ZooKeeper スナップショットおよびリストアガイド
ZooKeeper は機械の故障に対処できるように設計されています。ZooKeeper クラスタは、マシンの再起動などの一時的な障害から自動的に回復できます。ハードウェアの障害やディスクの破損などの原因による、N メンバーのクラスタに対して (N-1)/2 までの永続的な障害にも耐えることができます。メンバーが永続的に障害を起こすと、クラスタへのアクセスは失われます。クラスタが (N-1)/2 を超えるメンバーを永続的に失うと、クラスタは重大な障害を起こし、クォーラムを失います。クォーラムが失われると、クラスタはコンセンサスに達することができず、更新の受け入れを続けることができません。
このような重大な障害から回復するために、ZooKeeper はスナップショットとリストア機能を提供し、スナップショットからクラスタをリストアします。
- スナップショットとリストアは、管理サーバの API を介して接続されたサーバ上で動作します。
- スナップショットとリストアは、サーバが過負荷にならないようにレート制限されています。
- スナップショットとリストアでは、ルートパスでの認証と承認が必要です。サポートされている認証スキーマは、ダイジェスト、x509、IP です。
スナップショット
クラスタを回復するには、ZooKeeper クラスタからのスナップショットが必要です。ユーザは、最新の zxid を持つライブサーバから定期的にスナップショットを作成し、ローカルまたは外部ストレージ/ファイルシステム(例: S3)にデータをストリームできます。
# The snapshot command takes snapshot from the server it connects to and rate limited to once every 5 mins by default
curl -H 'Authorization: digest root:root_passwd' http://hostname:adminPort/commands/snapshot?streaming=true --output snapshotFileName
リストア
クラスタをリストアするには、入力ストリームとして単一のスナップショットが必要です。リストアは、クォーラムが失われたクラスタの回復や、シードデータを使用したまったく新しいクラスタの構築に使用できます。
すべてのメンバーは、同じスナップショットを使用してリストアする必要があります。推奨される手順を次に示します。
- リストアを開始する前に、クライアントポートまたはクライアントのセキュリティポートのトラフィックをブロックします。
- 該当する場合、スナップショット管理サーバコマンドを使用して、最新のデータベース状態のスナップショットを作成します。
- サーバごとに
- リストア後サーバを再起動したときに復元されたデータベースが上書きされないように、dataDir と dataLogDir 内のファイルを別の場所に移動します。
- リストア管理サーバコマンドを使用してサーバをリストアします。
- リストアが完了したら、クライアントポートまたはクライアントのセキュリティポートのブロックを解除します。
# The restore command takes a snapshot as input stream and restore the db of the server it connects. It is rate limited to once every 5 mins by default
curl -H 'Content-Type:application/octet-stream' -H 'Authorization: digest root:root_passwd' -POST http://hostname:adminPort/commands/restore --data-binary "@snapshotFileName"