スナップショットを新しいクラスターに復元
新しく作成された別のクラスターにクラスターを復旧して、スナップショットを復元する手順。
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 |
手順
新しいクラスターでスナップショットを復元するには、以下のようにします。
-
古いクラスターから、各ノードのIPに関連付けられているトークンのリストを取得します。
nodetool ring | grep -w ip_address_of_node | awk '{print $NF ","}' | xargs
-
新しいクラスターの各ノードの cassandra.yaml ファイルに、古いクラスターと同じnum_tokens設定を使用して、前のステップで取得したトークンのリストをinitial_tokenパラメーターに追加します。
警告: ノードがラックに割り当てられている場合は、新しいクラスターのトークンの割り当てとラックの割り当てが古いクラスターの割り当てと同じであることを確認します。
- 他に必要な変更があれば、新しいクラスターのcassandra.yaml ファイルおよびプロパティ・ファイルで行います。この場合、新しいノードが古いクラスター設定と一致するように変更してください。新しいクラスターでシード・ノードが設定されていることを確認してください。
-
新しい各ノードから、システム・テーブル・データを消去します。
sudo rm -rf /var/lib/cassandra/data/system/*
これにより、新しいノードは、再起動時に、cassandra.yaml に定義されている初期トークンを使用できます。
-
新しいクラスターのcassandra.yamlに指定したトークン範囲のリストを使用して、各ノードを起動します。
initial_token: -9211270970129494930, -9138351317258731895, -8980763462514965928, ...
- 新しいクラスターのスキーマを作成します。古いクラスターのすべてのスキーマは、新しいクラスターで再度生成する必要があります。
-
ノードを停止します。実行中のノードのデータ・ディレクトリー内のファイルが、memtableフラッシュまたはコンパクションで同一の名前が付けられた、フラッシュ済みのSSTableによって、自動的に上書きされる可能性があるため、
nodetool refresh
の使用は安全ではありません。同じ理由で、データ・ディレクトリーにファイルをコピーして、ノードを再起動することも機能しません。 - 同じディレクトリーを使用して、古いクラスターで取ったSSTableファイルのスナップショットを新しいクラスターに復元します。一方で、ターゲット・ディレクトリー名のUUIDコンポーネントが変更されていることに注意してください。復元を行わないと、新しいクラスターには再起動した際に読み取るデータがありません。
- ノードを再起動します。