没有足够的副本可用于一致性ONE的查询(需要1个但只有0个活着)

tim*_*erc 25 cassandra

我有一个带有三个节点的Cassandra集群,其中两个节点已启动.他们都在同一个DC.当我的Java应用程序写入集群时,我的应用程序出现错误,似乎是由Cassandra的一些问题引起的:

引起:com.datastax.driver.core.exceptions.UnavailableException:在com.datastax.driver.core.exceptions.UnavailableException.copy(UnavailableException.java)中,在一致性ONE(需要1但只有0)的查询中没有足够的副本可用于查询:79)

没有意义的部分是"1需要但只有0活着"的声明.有两个节点,这意味着一个节点应该"活着"进行复制.

或者我误解了错误信息?

谢谢.

And*_*ert 29

您可能会收到此错误,因为您要查询的表所属的键空间的复制因子具有复制因子1,这是正确的吗?

如果您正在读取/更新的分区没有足够的可用副本(具有该数据的节点)以满足一致性级别,则会出现此错误.

如果您希望能够处理多个节点不可用,那么您可以做的是改变您的键空间以设置更高的复制因子,在这种情况下最好是三个,然后在每个节点上运行nodetool修复以获取所有节点所有节点上的数据.通过此更改,您将能够在丢失2个节点后继续读取,并以一致性级别读取.

此cassandra参数计算器是理解节点计数,复制因子和一致性级别的考虑因素的良好参考.

  • 复制因子为1表示每行数据只有1个副本.因此,如果您有1个节点关闭且RF为1,则表示该节点上的所有数据现在都不可用.请参阅:http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html (3认同)