私はApache Cassandra(バージョン3.0.9)でスナップショットを復元するのに苦労しています。)言うまでもなく、私はdatastaxブログで説明されている手順と他のいくつかの手順に従っていますones(例えば: http://datascale.io/cloning-cassandra-clusters-fast-way/ )。それでも私は何かが欠けているかもしれません、そして私が復元をするたびにデータが欠落しています。
セットアップ:レプリケーション係数が3に設定された6ノードのクラスター(1 DC、3ラック、それぞれ2ノード)。マシンはAWSでホストされます。
バックアップ手順(各ノード):
nodetool snapshot mykeyspace
_cqlsh -e 'DESCRIBE KEYSPACE mykeyspace' > /tmp/mykeyspace.cql
_nodetool ring | grep "$(ifconfig | awk '/inet /{print $2}' | head -1)" | awk '{print $NF ","}' | xargs > /tmp/tokens
Nodetool snapshotコマンドで生成されたファイルを取得し、トークンとcqlとともにS3にバックアップします。
復元手順(指定されていない限り、各ノードに対して):
(新しいVMを作成した後)
/var/lib/cassandra/commitlog/*
_および_/var/lib/cassandra/system/
_を削除しますcassandra.yaml
_に挿入するmykeyspace.cql
_からmykeyspaceを復元します.db
_内の_/var/lib/cassandra/data/mykeyspace/
_ファイルを削除.db
_、_.crc32
_、_.txt
_)を_/var/lib/cassandra/data/mykeyspace/$table/
_にコピーしますnodetool repair mykeyspace -full
_を実行します。結果:
行は常に欠落しており、各テーブルでほぼ同じ量ですが、同じ行になることはありません。トークンの前にキースペースを復元する、修復前に_nodetool refresh
_を実行するなど、手順を少し「混同」しようとしましたが、毎回同じ問題に遭遇しました。
私は「良い」復元に程遠くないので、私はかなり明白な何かを見逃していると思います。ログを分析しても、エラー/失敗のメッセージが表示されないため、実際には役に立ちませんでした。
どんな助けでも歓迎します:)もちろん、私は必要に応じてより多くの情報を与えることができます。
編集:誰もいない?最初に忘れていたcassandra version(3.0.9)で質問を更新しました。もう一度復元を試みましたが、うまくいきませんでした。これ以上の考えはありません: (
さて、話の終わり、愚かな私! cassandra.yamlのinitial_token
行が、復元手順中に誤って「seded」されました。 initial_token
キーの「:」の後にスペースがない場合、cassandraは起動に失敗します。したがって、行はコメント化されたままになり、トークンは解釈されませんでした!
tldr:
initial_token:<values>
=間違っていますinitial_token: <values>
=良いこのパラメータの重要性を強く主張してくれたJosh Purvisに感謝します:-)
そのブログ投稿のsed
コマンドは、-Dcassandra.load_ring_state=false
を$JVM_OPTS
に追加することになっていますが、現在の形式では効果がありません。
そのコマンドをブログの投稿から直接コピーしていた場合は、それが問題である可能性があります。代わりに、これをファイルの下部に配置することもできます。
Sudo sed -i '$ a\JVM_OPTS="$JVM_OPTS -Dcassandra.load_ring_state=false"' /etc/cassandra/cassandra-env.sh
また、この手順を実行した後、各ノードでnodetool repair -pr <ks>
を1つずつ実行する必要があります。