7

ある cassandra クラスターから別のリング サイズの別の cassandra クラスターにデータを移行する方法を見つけようとしています...たとえば、5 ノード クラスターから 7 ノード クラスターに移行します。

その特定のcassandraノードでSSTableのjsonファイルを作成するため、sstable2jsonを調べ始めました。私の考えは、リング内の各ノードの列ファミリーに対してこれを行うことでした。したがって、5 ノード リングでは、これにより 5 つの json ファイルが得られます。1 つのファイルは、各ノードに存在する列ファミリーに格納されたデータ用です。

次に、json ファイルを 1 つのファイルにマージし、json2sstable を使用して、サイズが 7 の新しいクラスターにインポートします。その後、cassandra がリング内のノード間でデータを均等に複製/バランスを取ることを望んでいました。しかし、一度書かれたSSTableは不変であることを読んだところです。したがって、今述べたことを実行すると、列ファミリーのすべてのデータが 1 つのノードにあるリングになってしまいます。

では、あるクラスターから別のリングサイズの別のクラスターにデータを移行するプロセスを理解するのを手伝ってくれる人はいますか?

4

4 に答える 4

9

ベター: 古いリングの sstables で bin/sstableloader を使用して、新しいリングにストリーミングします。

通常、sstableloader は次のような順序で使用されます。

  1. SSTableWriter を使用してローカルに sstables を作成する
  2. sstableloader を使用して、sstables 内のデータを適切なノードにストリーミングします (bin/sstableloader path-to-directory-full-of-sstables)。ディレクトリ名はキースペースであると想定されます。これは、既存の Cassandra データ ディレクトリを指す場合に当てはまります。

既存のクラスター A から新しいクラスター B にデータをストリーミングしようとしているので、クラスター A の各ノードのデータに対して sstableloader を実行するまでスキップできます。

sstableloader の使用の詳細については、このブログ投稿を参照してください。

于 2011-07-22T17:14:09.393 に答える
0

sstable2json を使用する必要はありません。スペースがあれば、次のことができます。

  1. 古いリングのすべてのノードからすべての sstables を取得する
  2. それらをすべて新しいサーバーのそれぞれにまとめます(同じ名前の名前を変更します)
  3. 新しいリングの各ノードで nodetool cleanup を実行すると、それらに属さないデータが破棄されます。
于 2011-07-22T20:25:27.873 に答える
0

次のような手順を実行できます。 1. 7 つのノードを 5 つのノードのクラスターに結合し、各ノードに独自のリング トークンを設定します。現時点では、12 個のノードを持つクラスターが存在する可能性があります。2. ステップ 1 で新しいクラスターから 5 つのノードを削除します。 3. 5 つのノードを独自に移動した後、各ノードのトークン リングをセットアップします。4. 7 ノード クラスタの修復。

于 2014-09-24T04:43:08.043 に答える
-1

これは見かけほど大きな問題ではないとあえて言いたい。

  1. http://wiki.apache.org/cassandra/Operations#Token_selectionに従って、新しいリングを作成し、各ノードのトークンを適切に定義します。
  2. 新しいリングにデータをインポートします。
  3. リングは、定義したトークンに基づいてバランスを取りますhttp://wiki.apache.org/cassandra/Operations#Import_.2BAC8_export
于 2011-07-22T07:03:42.230 に答える