作者:天使的泪无人知晓 | 来源:互联网 | 2023-05-26 15:36
我有一个带有三个节点的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活着"的声明.有两个节点,这意味着一个节点应该"活着"进行复制.
或者我误解了错误信息?
谢谢.
1> Andy Tolbert..:
您可能会收到此错误,因为您要查询的表所属的键空间的复制因子具有复制因子1,这是正确的吗?
如果您正在读取/更新的分区没有足够的可用副本(具有该数据的节点)以满足一致性级别,则会出现此错误.
如果您希望能够处理多个节点不可用,那么您可以做的是改变您的键空间以设置更高的复制因子,在这种情况下最好是三个,然后在每个节点上运行nodetool修复以获取所有节点所有节点上的数据.通过此更改,您将能够在丢失2个节点后继续读取,并以一致性级别读取.
此cassandra参数计算器是理解节点计数,复制因子和一致性级别的考虑因素的良好参考.
复制因子为1表示每行数据只有1个副本.因此,如果您有1个节点关闭且RF为1,则表示该节点上的所有数据现在都不可用.请参阅:http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html