スナップショットからの復元

スナップショットから復元する方法。

スナップショットからキースペースを復元するには、テーブルのすべてのスナップショット・ファイルが必要です。また、インクリメンタル・バックアップを使用している場合は、スナップショットを取得した後で作成されたすべてのインクリメンタル・バックアップ・ファイルが必要です。ストリームされたSSTable(リペア、使用廃止など)もハードリンクされ、含められます。

注: スナップショットおよびインクリメンタル・バックアップからの復元により、復元されるノード上で集中的なCPUおよびI/Oアクティビティが一時的に発生します。

ローカル・ノードからの復元

この方法によって、SSTableはスナップショット・ディレクトリーから適切なデータ・ディレクトリーにコピーされます。

  1. テーブル・スキーマが存在し、スナップショットの作成時と同じであることを確認してください。

    nodetool snapshotコマンドを実行すると、出力ディレクトリーにテーブル・スキーマが作成されます。テーブルが存在しない場合は、schema.cqlファイルを使用して再作成します。

  2. 必要に応じて、テーブルを切り詰めます
    注: 特定の条件では切り詰める必要がない場合もあります。たとえば、ノードでディスクが失われた場合、復元前に再起動する可能性があります。その結果、ノードは、復元の手順を開始する前に新しい書き込みを受け取り続けます。

    通常は、切り詰めが必要です。たとえば、偶発的なデータの削除があった場合、その削除によるトゥームストーンには、スナップショットのデータよりも後の書き込みタイムスタンプが含まれます。切り詰めずに(トゥームストーンを削除せずに)復元すると、データベースは復元されたデータをシャドウします。この動作は、他の種類の上書きに対しても発生し、同じ問題の原因になります。

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

    /var/lib/cassandra/data/keyspace_name/table_name-UUID/snapshots/snapshot_name

  4. 最新のスナップショットSSTableディレクトリーを/var/lib/cassandra/data/keyspace/table_name-UUIDディレクトリーにコピーします。

    すべてのインストールで、dataディレクトリーのデフォルトの場所は/var/lib/cassandra/dataです。

  5. nodetool refreshを実行します。

一元化されたバックアップからの復元

この方法では、sstableloaderを使用してスナップショットを復元します。

  1. SSTableのバージョンがDSEの現在のバージョンと互換性があることを確認してください。
    1. バージョンはファイル名に含まれています。
      互換性とアップグレード要件を判断するには、SSTableファイル名のバージョン番号を使用します。ファイル名の最初の2文字はバージョンで、最初の文字はメジャー・バージョンを示し、2番目の文字はマイナー・バージョンを示します。たとえば、次のSSTableバージョンはmcです。
      data/cycling/cyclist_expenses-2d955621194c11e7a38d9504a063a84e/mc-6-big-Data.db
    2. 適切なDSEバージョンのsstableupgradeを使用して、互換性があるバージョンを作成するには:
      表 1. SSTableの互換性とアップグレード・バージョン
      DSEバージョン SSTableバージョン sstableloader サポートされているバージョン sstableupgrade およびnodetool upgradesstablesでサポートされているバージョン
      4.0 jb jbのみ(アップグレードして読み込む必要があります) i*のみ
      4.5
      4.6
      4.7 ka kaおよびjb j*のみ
      4.8
      5.0.x ma kaおよびma k*のみ
      5.0.x mb ka、ma、およびmb kaおよびma
      5.0.x mc ka、ma、mb、およびmc ka、ma、およびmb
      5.1.x
  2. テーブル・スキーマが存在し、スナップショットの作成時と同じであることを確認してください。

    nodetool snapshotコマンドを実行すると、出力ディレクトリーにテーブル・スキーマが作成されます。テーブルが存在しない場合は、schema.cqlファイルを使用して再作成します。

  3. 必要に応じて、テーブルを切り詰めます
    注: 特定の条件では切り詰める必要がない場合もあります。たとえば、ノードでディスクが失われた場合、復元前に再起動する可能性があります。その結果、ノードは、復元の手順を開始する前に新しい書き込みを受け取り続けます。

    通常は、切り詰めが必要です。たとえば、偶発的なデータの削除があった場合、その削除によるトゥームストーンには、スナップショットのデータよりも後の書き込みタイムスタンプが含まれます。切り詰めずに(トゥームストーンを削除せずに)復元すると、データベースは復元されたデータをシャドウします。この動作は、他の種類の上書きに対しても発生し、同じ問題の原因になります。

  4. バックアップされたSSTable上でsstableloaderツールを使用して、最新のスナップショットを復元します。

    sstableloaderは、SSTableを適切なノードにストリーミングします。commitlogを削除したり、ノードをドレーンまたは再起動する必要はありません。