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

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

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

注: この手順では、スナップショットの復元クラスターの構成および初期化について理解していることを前提とします。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

手順

新しいクラスターでスナップショットを復元するには、以下のようにします。
  1. 古いクラスターから、各ノードのIPに関連付けられているトークンのリストを取得します。
    nodetool ring | grep -w 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. ノードを再起動します。