2

1 つのノードに Cassandra をセットアップし、データをあふれさせました。次に、2 番目のノード、その初期トークン、シードなどを構成し、その上で Cassandra を開始しました。1 ノード クラスターで Hector コードを実行すると、すべてのデータが得られました。しかし、2ノードクラスターで同じコードを実行すると、データが少なくなります(列と行の数が少なくなります)。私は自分が間違っていることを理解していません。CassandraHostConfigurator を使用してホストの文字列を追加しようとしましたが、それでもデータ全体を取得できません。nodetool repair も実行してみましたが、まだ同じ問題に直面しています

私を助けてください

4

2 に答える 2

1

クラスターにノードを追加するときは auto_bootstrap: truecassandra.yamlでそのノードを開始して、クラスター内の他のノード (この場合は唯一のノード) が (トークンに従って) データを新しいノードにストリーミングするようにする必要があります。

編集Casssandra-1.0 以降では、ブートストラップとしてのオプションはありません。この場合、計算された新しいトークンで 2 番目のノードを開始する必要があります。これにより、データのストリーミングが開始されますnodetool move <new_token>。詳細については、クラスタへのノードの追加を参照してください

これが行われない場合、2 番目のノードには、トークンに従って保持されるはずのデータがありません。また、Cassandra からデータを読み込もうとすると、トークンに従って新しく追加されたノードのデータを探している可能性がありますが、データがないため、正しい結果が得られません。

于 2012-06-06T14:43:10.203 に答える
0
  • すべてのファイアウォールを確認してください。iptables 構成は、ノードが別のノードと通信することを受け入れます

リングにノードを追加した後、nodetool ringデータ ロードの例を表示するために使用します。私のクラスターには 3 つのノードがあり、結果は次のようになります。

192.168.23.84 datacenter1 rack1 Up Normal 37.52 GB 33.33%
192.168.23.85 datacenter1 rack1 Up Normal 37.5 GB 33.33%
192.168.23.86 datacenter1 rack1 Up Normal 37.5 GB 33.33%

似ている場合は、ヘクターを使用するときに、次のコードを使用して、どのサーバーへのヘクター要求を確認しますか。

MutationResult result = mutator.execute();
logger.info(" host:" + result.getHostUsed().getHost());

宛先ホストにすべてのホストが含まれていることを再確認するために、何度も書き込んでみてください。

Hector の例を使用する場合、この CassandraHostConfigurator を使用して多くのホストをクラスターに追加します。

CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
                "192.168.23.84:9160,192.168.23.85:9160,192.168.23.86:9160");
cluster = HFactory.getOrCreateCluster("testcluster", cassandraHostConfigurator);
于 2012-06-12T04:49:10.297 に答える