我在1个节点上设置了Cassandra,并用数据淹没了它。然后,我配置了第二个节点、它的初始令牌、种子等,并在它上面启动了Cassandra。现在,当我在一个节点集群上运行我的Hector代码时,它为我提供了所有数据。但是,当我在2节点集群上运行相同的代码时,我得到的数据更少(列数和行数更少)。我不明白我做错了什么。我甚至尝试使用CassandraHostConfigurator添加一串主机,但仍然无法获得全部数据。我也尝试过运行nodetool修复,但仍然面临同样的问题
请帮帮我
发布于 2012-06-06 22:43:10
当您将节点添加到集群中时,您应该在cassandra.yaml中使用auto_bootstrap: true启动该节点,以便集群中的其他节点(在您的示例中是唯一的节点)将数据流传输到新节点(根据令牌)。
编辑对于Casssandra-1.0和更高版本,没有作为引导的选项,在这种情况下,我们必须启动第二个节点,并计算出新的令牌,它将开始流式处理,data.once流式处理已完成运行nodetool move <new_token>。有关更多信息,请参阅Adding nodes to cluster
如果不这样做,第二个节点将不具有根据令牌它应该持有的数据。当您尝试从Cassandra中读取数据时,它可能会根据token查找新添加的节点上的数据,但由于没有数据,因此无法获得正确的结果。
发布于 2012-06-12 12:49:10
通信
在添加一个节点到环之后,使用nodetool ring查看数据负载示例我的集群有3个节点,结果将类似:
192.168.23.84 datacenter1 rack1正常增长37.52 GB 33.33%
192.168.23.85 datacenter1 rack1正常增长37.5 GB 33.33%
192.168.23.86 datacenter1 rack1正常升级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);https://stackoverflow.com/questions/10913869
复制相似问题