我知道,当我们在Cassandra中写入数据时,分区键由分区程序散列,然后使用该值来确定数据将存储到集群中的哪个节点中。然后Cassandra在节点环中以顺时针方向复制数据。
如果分区程序确定的节点已关闭,那么Cassandra如何找到要查找记录的节点?难道我们不会在这里失去分区的优势吗?
发布于 2020-04-06 12:54:58
根据分区键的值计算的哈希标识拥有数据的所有副本(如果使用RF > 1)。这由驱动程序使用(当使用令牌感知负载平衡策略时),或者通过协调节点向其中一个可用的副本发送请求,因此您可以继续接收数据(当然,如果您有足够的节点来满足指定的一致性级别)。
发布于 2020-04-06 12:29:15
如果节点关闭,则可以将数据发送到复制副本,具体取决于您的复制因素和一致性级别,如果未满足所需的确认次数,则请求可能会失败。当然,根据您的复制因子和CL,读请求是否会被处理。这取决于您有多少副本以及您期望收到多少确认。
有一个很酷的机制用来帮助这种情况,它是暗示移交。为了简单起见,如果您将复制因子设置为1,并且负责数据的节点关闭,则协调器将为其存储数据一段时间(小时),然后当节点再次启动时,协调器将向其发送丢失的数据。
更简单地说,这就像是邻居在你不在的时候拿走了你的邮件。这是为小的失败和不长的失败而做的。如果邻居要照看邮局好几年,那可不是什么好事情。
这里有一个链接解释了提示是如何工作的
https://www.datastax.com/blog/2011/05/understanding-hinted-handoff-cassandra-08
我希望这能有所帮助!
https://stackoverflow.com/questions/61059582
复制