そこにいくつかの同様の質問があることは知っていますが、私はまだこれについて混乱しています。このメカニズム(あるクラスタから別のクラスタへデータをコピーする)が必要なので、私は少し明確にしたいと考えています。Cassandra - あるクラスタから別のクラスタにsstableスナップショットをコピーする
非常に簡単なシナリオを想定しましょう。私は1つのcassandraクラスタ(C1)から別の(C2)にテーブルをコピーしたいと思います。コピーしているテーブルを「アイテム」といいます。
各クラスタのノード数が同じであるとします(クラスタ内のソースノードとターゲットノードはそれぞれ4個です)。重要であるかどうかはわかりません。
私はスナップショットとsstableloaderを使ってそのトリックを試みています。スナップショットを作成し、C1:N1(クラスタ1ノード1 .../myspace/item-xxxxxx /スナップショット/ #####)からターゲットテーブルディレクトリC2にスナップショットファイルをコピーできました。N1(クラスタ2ノード1:.../myspace/item-xxxxxx)。私はsstableloaderを使ってデータをロードし、nodetool修復を実行しました。完璧。唯一の問題は、ロードされたスナップショットがソースノードの1つのみであったため、データの一部(「1k行の約485」)が「復元」されていることです。だから、私はC1:N2からC2:N1にスナップショットをコピーしてロードすることを考えています。問題は、すべてのテーブルファイルが既にC2:N1に存在することです。スナップショットファイルをC1:N2からC2:N1のテーブルディレクトリにコピーすると、すでに存在するファイルが吹き飛ばされます。私は4つのターゲットノードをすべてチェックしませんでしたが、ターゲットのノード2をチェックしました。また、アイテムテーブルディレクトリもすでにデータファイルとともに存在していました。私はターゲット上のノードのすべてがデータファイルを持っていると推測しているので、他の3つのソースノードのスナップショットファイルをsstableloadする方法につきました。
ストーリーが短い(可能ならば): ソースクラスタの各ホストから複数のソーススナップショットファイルをターゲットクラスタにロードするにはどうすればよいですか?そして、問題を複雑にするには、ソースクラスタとターゲットクラスタのノード数が異なる場合は問題になります(ターゲット上のノード数を減らすことが潜在的に大きな問題になると思います)。
私の意見では、SOURCEクラスタでssableloaderを実行し、データをターゲットクラスタにストリーミングする方法は、実際には必要なものです。人生をもっと楽にしてくれるだろうと思います。
ありがとうございます。
-Jim
であなたのために行うことができますしている場合
だからsstableloader「-d IP」で実行されます。私がこれをしたら、それはターゲットIPであり、ターゲットノードの1つからそれを実行しています(そして、データをロードするためにスナップショットを使用しています)。たぶん私は間違っているだろう。あなたは、私がソースクラスタからそれを実行できると言った。私は "-d SourceIP"を置いていますか?その場合、接続先のクラスタIPはどこで指定しますか? –
'-d'は、ターゲットクラスタ内のいずれかのノードになります。どこからでもツールを実行できます。 –
お返事ありがとうございます。これに関する知識が不足して申し訳ありませんが、ソースクラスタをどのように指定して接続するのですか?ソースクラスタ上で実行するだけですか?つまり、ターゲットクラスタ上でsstableloaderを実行することはできません(ソースIPを指定しないため)。 –