7.2 Cassandraスナップショットのバックアップ

 

7.2.1。スナップショットについて

Cassandraは、データディレクトリに保存されているすべてのディスクデータファイル(SSTableファイル)のスナップショットを取得して、データをバックアップします。システムがオンラインのときに、すべてのキースペース、単一のキースペース、または単一のテーブルのスナップショットを取得できます。

並列sshツール(psshなど)を使用して、クラスター全体のスナップショットを作成できます。これにより、最終的に一貫性のあるバックアップが提供されます。スナップショットの作成時にレプリカノードと一致するノードはありませんが、復元されたスナップショットは、Cassandraの組み込みの一貫性メカニズムを使用して一貫性を復元します。

システム全体のスナップショットを実行した後、各ノードで増分バックアップを有効にして、最後のスナップショット以降に変更されたデータをバックアップできます。memtableをディスクに更新してSSTableを作成するたびに、スナップショットは/データディレクトリにコピーされますバックアップサブディレクトリ(JNAが有効)。これらのSSTableにはバックアップされていないデータが含まれていないため、圧縮されたSSTableは/バックアップにスナップショットを作成しません。

7.2.2、スナップショットを撮る

nodetool snapshotコマンドを使用して、各ノードのスナップショットを作成します。グローバルスナップショットを取得するには、並列sshユーティリティ(psshなど)を使用してnodetool snapshotコマンドを実行します。

スナップショットはまずディスクへのすべてのメモリ書き込み操作(memtables)を更新し、次に各キースペースのSSTableファイルマッピングを作成します。データファイルのスナップショットを保持するには、ノードに十分な空きディスク領域が必要です。スナップショットに必要なディスク容量はごくわずかです。ただし、スナップショットでは古い古いデータファイルを削除できないため、スナップショットを使用すると、時間の経過とともにディスク使用率が急速に増大する可能性があります。スナップショットが完了したら、スナップショットファイルを必要に応じて別の場所に移動するか、そのままにしておくことができます。

注:  Cassandraは、テーブルsystem_schemaが存在する場合にのみ、スナップショットからデータを回復できます。テーブルsystem_schemaもバックアップすることをお勧めします。

ホスト名、JMXポート、およびキースペースを指定して、nodetool snapshotコマンドを実行します。次に例を示します。

$ nodetool -h localhost -p 7199 snapshot mykeyspace
  • 1

スナップショットは、data / keyspace / table_name-UUID / snapshots / snapshot_nameディレクトリに作成されます。各スナップショットディレクトリには、スナップショットからのデータの多くの.dbファイルが含まれています。

次に例を示します。

  • Cassandraパッケージのインストール:/var/lib/cassandra/data/mykeyspace/users-081a1500136111e482d09318a3b15cc2/snapshots/1406227071618/mykeyspace-users-ka-1-Data.db

  • Cassandra tarballインストール:install_location /data/data/mykeyspace/users-081a1500136111e482d09318a3b15cc2/snapshots/1406227071618/mykeyspace-users-ka-1-Data.db

7.2.3。スナップショットファイルを削除する

スナップショットを作成する場合、以前のスナップショットファイルは自動的に削除されません。不要になった古いスナップショットを削除する必要があります。

nodetool clearsnapshotコマンドは、各キースペースのスナップショットディレクトリから既存のすべてのスナップショットファイルを削除します。スナップショットを更新する前に古いスナップショットを消去するには、スナップショットバックアップの前にこのコマンドを実行する必要があります。

  • ノードのすべてのスナップショットを削除するには、nodetool clearsnapshotコマンドを実行します。次に例を示します。
    $ nodetool -h localhost -p 7199 clearsnapshot 
  • 1
  • すべてのノードのスナップショットを一度に削除するには、並列sshユーティリティを使用してnodetool clearsnapshotコマンドを実行します。 
    単一のスナップショットを削除するには、スナップショット名を指定してclearsnapshotコマンドを実行します。
    $ nodetool clearsnapshot -t <snapshot_name> 
  • 1

ファイル名とパスは、スナップショットのタイプによって異なります。スナップショットの名前とパスの詳細については、nodetools snapshotsを参照してください。

7.2.4。増分バックアップを有効にする

増分バックアップが有効な場合(デフォルトでは無効)、Cassandraは各更新可能なテーブルのSSTableをキースペースデータディレクトリの下のバックアップディレクトリにマップします。これにより、スナップショット全体を転送することなく、バックアップをオフサイトに保存できます。さらに、増分バックアップとスナップショットの組み合わせにより、信頼性の高い最新のバックアップメカニズムを提供できます。圧縮されたSSTableは、バックアップされていないデータを含まないため、/ backupsにマッピングファイルを作成しません。ポイントインタイムスナップショットとすべての増分バックアップおよびコミットログにより、完全なバックアップが形成されます。

スナップショットと同様に、Cassandraは増分バックアップファイルを自動的に消去しません。新しいスナップショットが作成されるたびに増分バックアップファイルをクリアするプロセスを設定することをお勧めします。

クラスター内の各ノードでcassandra.yaml構成ファイルを編集し、incremental_backupsの値をtrueに変更します。

7.2.5。スナップショットリカバリデータ

スナップショットからキースペースを復元するには、テーブルのすべてのスナップショットファイルが必要です。増分バックアップを使用する場合、スナップショットの作成後に作成されたすべての増分バックアップファイルとSSTable(修復、デコミッションなどから)が含まれます。

注:スナップショットおよび増分バックアップからの一時的な復元により、復元されるノードでCPUおよびI / Oアクティビティが集中的に発生する可能性があります。

7.2.6。ローカルノードからの回復

このメソッドは、スナップショットディレクトリ内のSSTableを正しいデータディレクトリにコピーします。

1.テーブルsystem_schemaが存在することを確認します。テーブルsystem_schemaが存在する場合、Cassandraはスナップショットからのみデータを回復できます。スキーマが存在せず、バックアップもされていない場合は、スキーマを再作成する必要があります。

2.必要に応じて、フォームを切り捨てます。

3.最新のスナップショットフォルダーを見つけます。次に例を示します。

data_directory/keyspace_name/table_name-UUID/snapshots/snapshot_name
  • 1

4.最新のスナップショットSSTableファイルディレクトリをdata_directory / keyspace / table_name-UUIDディレクトリにコピーします。

5. nodetool refreshを実行します。

注:特定の条件下では切り捨てる必要がない場合があります。たとえば、ノードがディスクを失った場合は、復元前にノードを再起動して、復元プロセスを開始する前にノードが新しい書き込みを引き続き受信できるようにする必要があります。 
通常、切り捨てが必要です。たとえば、データが誤って削除された場合、削除された論理削除後の書き込みタイムスタンプは、スナップショットのデータよりも遅くなります。リカバリが切り捨てられていない場合(墓石が削除されている場合)、Cassandraはリカバリされたデータを引き続きカバーします。この動作は他のタイプの書き換えでも発生し、同じ問題を引き起こします。

ノードが5.0.10より前のDataStax Enterpriseバージョンにある場合は、ノードを再起動してください。nodetoolの更新はディスク上の既存のLCSレベルを考慮しないため、この再起動が必要です。これにより、圧縮バックログが発生する可能性があります。

7.2.7。クラスターからのバックアップと復元

このメソッドは、sstableloaderを使用してスナップショットを復元します。

1.テーブルsystem_schemaが存在することを確認します。テーブルsystem_schemaが存在する場合、Cassandraはスナップショットからのみデータを回復できます。スキーマが存在せず、バックアップもされていない場合は、スキーマを再作成する必要があります。

2.必要に応じて、フォームを切り捨てます。

3.バックアップSSTableでsstableloaderツールを使用して、最新のスナップショットを復元します。 
sstableloaderはSSTableを正しいノードにストリーミングします。コミットログを削除したり、再起動ノードを削除したりする必要はありません。

注:特定の条件下では切り捨てる必要がない場合があります。たとえば、ノードがディスクを失った場合は、復元前にノードを再起動して、復元プロセスを開始する前にノードが新しい書き込みを引き続き受信できるようにする必要があります。 
通常、切り捨てが必要です。たとえば、データが誤って削除された場合、削除された論理削除後の書き込みタイムスタンプは、スナップショットのデータよりも遅くなります。リカバリが切り捨てられていない場合(墓石が削除されている場合)、Cassandraはリカバリされたデータを引き続きカバーします。この動作は他のタイプの書き換えでも発生し、同じ問題を引き起こします。

19件の元の記事を公開 賞賛4 170,000回+

おすすめ

転載: blog.csdn.net/u011250186/article/details/105682008