スナップショットを新しいクラスターに復元

新しく作成された別のクラスターにクラスターを復旧して、スナップショットを復元する手順

vnodeが有効(128トークン)な3ノード構成のDataStax EnterpriseクラスターからSSTableデータ・ファイルのスナップショットをコピーし、新しく作成した別の3ノード・クラスター(128トークン)上に復元するとします。新しいクラスターのトークンの範囲とまったく同じに指定できないため、トークンの範囲は一致しません。そのため、古いクラスターで使用したトークンを新しいクラスターに指定する必要があります。

注: この手順では、スナップショットの復元クラスターの構成および初期化について理解していることを前提とします。
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。

パッケージ・インストールInstaller-Servicesインストール

/etc/dse/cassandra/cassandra.yaml

tarボール・インストールInstaller-No Servicesインストール

installation_location/resources/cassandra/conf/cassandra.yaml

手順

新しいクラスターでスナップショットを復元するには、以下のようにします。

  1. 古いクラスターから、各ノードのIPに関連付けられているトークンのリストを取得します。
    $ nodetool ring | grep ip_address_of_node | awk '{print $NF ","}' | xargs
  2. 新しいクラスターの各ノードのcassandra.yamlファイルに、古いクラスターと同じnum_tokens設定を使用して、前のステップで得たトークンのリストをinitial_tokenパラメーターに追加します。
  3. 新しいノードが古いクラスターの設定と一致するよう、その他の必要な変更を新しいクラスターのcassandra.yamlとプロパティ・ファイルに加えます。新しいクラスターでシード・ノードが設定されていることを確認してください。
  4. 新しい各ノードから、システム・テーブル・データを消去します。
    $ sudo rm -rf /var/lib/cassandra/data/system/*

    これにより、新しいノードは、再起動時に、cassandra.yamlに定義されている初期のトークンを使用できます。

  5. 新しいクラスターのcassandra.yamlに指定したトークンの範囲のリストを使用して、各ノードを起動します。
    initial_token: -9211270970129494930, -9138351317258731895, -8980763462514965928, ...
  6. 新しいクラスターのスキーマを作成します。古いクラスターのすべてのスキーマは、新しいクラスターで再度生成する必要があります。
  7. ノードを停止します。実行中のノードのデータ・ディレクトリー内のファイルが、memtableフラッシュまたはコンパクションで同一の名前が付けられた、フラッシュ済みのSSTableによって、自動的に上書きされる可能性があるため、nodetool refreshの使用は安全ではありません。同じ理由で、データ・ディレクトリーにファイルをコピーして、ノードを再起動することも機能しません。
  8. 同じディレクトリーを使用して、古いクラスターで取ったSSTableファイルのスナップショットを新しいクラスターに復元します。一方で、ターゲット・ディレクトリー名のUUIDコンポーネントが変更されていることに注意してください。復元を行わないと、新しいクラスターには再起動した際に読み取るデータがありません。
  9. ノードを再起動します