2011-07-21 4 views
7

1つのcassandraクラスタから異なるリングサイズの別のcassandraクラスタにデータを移行する方法を理解しようとしています。 5ノードクラスタから7ノードクラスタへ。サイズNのCassandraクラスタからサイズN +/- Mの別のクラスタにデータを移行する方法

私はsstable2jsonを見てきました。なぜなら、特定のcassandraノード上のSSTable用のjsonファイルを作成するからです。私の考えは、リング内の各ノードの列ファミリでこれを行うことでした。だから、5ノードリングでは、これは私に5つのjsonファイル、各ノードにある列ファミリに格納されているデータ用の1つのファイルを与えるでしょう。

次に、jsonファイルを1つのファイルにマージし、json2sstableを使用してサイズの新しいクラスタにインポートします(7)。私は、cassandraがノード間で均等にデータを複製/均衡させることを望んでいましたリングでは、私はただSSTablesが一度書かれて不変であることを読んだ。だから私が言及したことをしたならば、私は1つのノード上にある私の列ファミリ内のすべてのデータを持つリングで終わるだろう。

誰かが、あるクラスタから別のリングサイズの別のクラスタにデータを移行するプロセスを理解する手助けをしてくれますか?

答えて

9

より良いhttp://wiki.apache.org/cassandra/Operations#Import_.2BAC8_exportを定義したトークンに基づいて自分自身のバランスをとるだろう。

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

  1. 右ノードにsstablesでデータをストリーミングするSSTableWriter
  2. 使用sstableloader(ビン/ sstableloaderパス・ツー・ディレクトリを使用してローカルsstablesを作成します。 -full-of-sstables)である。ディレクトリ名はキースペースであるとみなされます。既存のCassandraデータディレクトリを指す場合、その名前がキースペースになります。

新しいcluter Bに既存のクラスタAからデータをストリーミングするために探しているので、あなたはクラスタAに、各ノード上のデータに対して使用上の

詳細をsstableloaderを実行するにまっすぐにスキップすることができますsstableloaderはthis blog postです。

+0

私はぶらぶらして書くと、データを他のノードに複製しますか?また、リング内のすべてのノードからすべてのデータファイルを1つのフォルダに入れ、sstableloaderを実行すると、元のクラスタの3つのノードにデータが複製されたので、データが重複することはありませんか? – Turbo

+1

はい、データが重複してしまいます。コンパクションがそれを処理するので、問題はありません。また、「すべてのデータファイルを1つのフォルダに入れる」必要はありません。 (明確にするために編集されました) – jbellis

+0

こんにちはjbellis、情報ありがとう。私はこれが取るべき道だと思う。私のシナリオに関する情報を追加するために、ec2のhadoopを使ってデータモデルを生成し、それをecandのcassandraに保存しています。モデルが作られたら、私はキャッサンドラのデータをネットワークに引き込みます。私はモデルを生成するときにいくつかのスケーラビリティベネフィットを得るためにec2でかなり大きなカサンドラリングを作成します。しかし、ネットワーク内の宛先リングは、おそらく半分になります。だから私の計画はec2から私のネットワークにデータファイルをプルダウンしてからデータをインポートすることです。次のコメント... – Turbo

-1

私はこれが問題のように見えるかもしれないとは言いません。

  1. あなたの新しいリングを作成し、新しいリングにhttp://wiki.apache.org/cassandra/Operations#Token_selection
  2. インポートデータに従って適切に各ノードのトークンを定義します。新しいものにストリーミングするために、古いリングからsstables上で使用するビン/ sstableloader:
  3. リングは、あなたが
+0

2つの質問。新しいリングにデータをインポートすると、具体的にどのようにすればいいですか?どんなツール?新しいリングが元のリングと異なるサイズであれば重要ですか? – Turbo

+0

リンクはもう動作しません。 2番目の点はあいまいで無駄です – ftrujillo

0

sstable2jsonを使用する必要はありません。あなたができるスペースがある場合:

  1. は、新しいサーバーのそれぞれに一緒にすべてを入れて、古いリング上のすべてのノードからすべてのsstablesを取得し
  2. (同じ名前を持つ任意の名前を変更)
  3. 新しいリングの各ノードでnodetool cleanupを実行すると、それらのノードに属していないデータは破棄されます。
+0

2つのリングのサイズが異なる場合、これは機能しますか?元のリングが12ノードで、新しいリングが5ノードであるとします。 – Turbo

+0

はい。しかし、彼の答えで@jbellisが言及したsstableloaderスクリプトが優れています。現在のノードをスナップショットし、各スナップショットディレクトリから新しいクラスタにsstableloaderを実行します。 – Zanson

0

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

関連する問題