スナップショットを新しいクラスターに復元
新しく作成された別のクラスターにクラスターを復旧して、スナップショットを復元する手順
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 |
手順
新しいクラスターでスナップショットを復元するには、以下のようにします。
-
古いクラスターから、各ノードのIPに関連付けられているトークンのリストを取得します。
$ nodetool ring | grep 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コンポーネントが変更されていることに注意してください。復元を行わないと、新しいクラスターには再起動した際に読み取るデータがありません。
- ノードを再起動します。