gpt4 book ai didi

cassandra - 2 节点 Cassandra 集群中的故障转移和复制

转载 作者:行者123 更新时间:2023-12-02 22:56:13 42 4
gpt4 key购买 nike

我在 2 节点 Cassandra 集群上运行 KairosDB,RF = 2,写入 CL = 1,读取 CL = 1。如果 2 个节点处于事件状态,客户端会将一半数据发送到节点 1(例如从 METRIC_1 到 METRIC_5000 的指标)另一半数据发送到节点 2(例如,指标从 METRIC_5001 到 METRIC_10000)。理想情况下,每个节点始终拥有所有数据的副本。但如果一个节点死亡,客户端会将所有数据发送到存活节点。

客户端开始向集群发送数据。 30 分钟后,我将节点 2 关闭了 10 分钟。在这10分钟内,客户端将所有数据正确发送到节点1。之后,我重新启动节点2,客户端继续正常向2个节点发送数据。一小时后我停止了客户端。

我想检查节点 2 挂掉时发送到节点 1 的数据是否已自动复制到节点 2。为此,我关闭了节点 1,并在节点 2 死亡时从节点 2 查询数据,但没有返回任何内容。这让我以为数据没有从节点1复制到节点2。我发了一个问题Doesn't Cassandra perform “late” replication when a node down and up again? 。看起来数据是自动复制的,但是太慢了。

我期望两台服务器中的数据是相同的(出于冗余目的)。这意味着当节点 2 失效时发送到系统的数据必须在节点 2 可用后自动从节点 1 复制到节点 2(因为 RF = 2)。

我有几个问题:

1) 复制真的很慢吗?还是我配置有问题?

2)如果客户端向每个节点发送一半数据(如本问题所示),我认为可能会丢失数据(例如,节点 1 从客户端接收数据,而节点 1 正在将数据复制到节点 2 时,它突然宕机)。我说得对吗?

3) 如果我在 2) 中是正确的,我将这样做:客户端将所有数据发送到两个节点。这可以解决 2) 问题,并且如果一个节点已死亡且稍后可用,还可以利用复制的优势。但我想知道,这会导致数据重复,因为两个节点都接收相同的数据。这里有什么问题吗?

谢谢!

最佳答案

您可以检查 cassandra.yaml 配置文件中hinted_handoff_enabled 的值吗?

对于您的问题:是的,在某些情况下您可能会丢失数据,直到完全实现复制为止,Cassandra 并不完全进行后期复制 - 有三种机制。

据我所知,如果您运行的版本大于 0.8,提示的切换应该在节点重新启动后复制数据,而无需修复,除非数据太旧(10 分钟内不应该出现这种情况)。我不知道为什么这些切换在重新启动时没有发送到您的副本节点,值得进行一些调查。

否则,当您重新启动节点时,您可以强制 Cassandra 通过运行修复(例如通过运行 nodetool Repair)来确保数据一致。

根据您的描述,我感觉您在协调器节点和获取数据的节点之间感到困惑(即使这两个节点保存数据,区别也很重要)。

顺便说一句,您所描述的节点 1 和节点 2 之间的指标分片的客户端行为是什么? KairosDB 和 Cassandra 都不是这样工作的,是您自己的客户端将指标发送到不同的 KairosDB 实例吗?

Cassandra 分区不是根据指标名称进行的,而是根据行键进行的(确切地说是分区键,但与 kairosDB 相同)。因此,每个唯一系列的每 3 周数据将根据哈希码关联一个 token ,该 token 将用于集群上的分片/复制。KairosDB 能够与多个节点通信,并在作为协调节点的节点之间进行轮询。

我希望这会有所帮助。

关于cassandra - 2 节点 Cassandra 集群中的故障转移和复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790072/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com