2

我在 1 个节点上设置了 Cassandra,并用数据淹没了它。然后我配置了第二个节点、它的初始令牌、种子等,并在其上启动了 Cassandra。现在,当我在 1 个节点集群上运行我的 Hector 代码时,它给了我所有的数据。但是当我在 2 节点集群上运行相同的代码时,我得到的数据更少(列和行的数量更少)。我不明白我做错了什么。我什至尝试使用 CassandraHostConfigurator 添加一串主机,但我仍然没有获得全部数据。我也尝试运行 nodetool repair 但仍然面临同样的问题

请帮我

4

2 回答 2

1

当您将节点添加到集群中时,您应该 auto_bootstrap: truecassandra.yaml中启动该节点,以便集群中的其他节点(在您的情况下是唯一的节点)将流数据新节点(根据令牌)。

编辑对于 Casssandra-1.0 及以后的版本,没有选项作为引导程序,在这种情况下,我们必须使用计算出的新令牌启动第二个节点,它将开始流式传输数据。一旦流式传输完成运行nodetool move <new_token>。有关更多信息,请参阅将节点添加到集群

如果不这样做,第二个节点将没有根据令牌应该保存的数据。当您尝试从 Cassandra 中读取数据时,它可能正在根据令牌在新添加的节点上查找数据,但由于没有数据,您没有得到正确的结果。

于 2012-06-06T14:43:10.203 回答
0
  • 请检查你所有的防火墙,iptables 配置是接受节点通信到另一个

将节点添加到 ring 后,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%

如果类似,当你使用 hector 时,使用此代码检查 hector 对哪个服务器的请求:

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 回答