Cassandra 改善故障转移时间

Cassandra improve failover time

我们正在使用 3 节点 cassandra 集群(每个节点在不同的虚拟机上),目前正在调查写入和读取操作期间的故障转移时间,以防其中一个节点死亡。 优雅地关闭一个节点时,故障转移时间非常好,但是,当杀死一个节点(通过关闭 VM)时,测试期间的延迟约为 12 秒。我猜这与 tcp 超时有关?

有什么办法可以调整吗?

编辑: 目前我们使用的是 Cassandra 版本 2.0.10。 我们正在使用 java 客户端驱动程序,版本 2.1.9.

更详细地描述一下情况: write/read 操作使用 QUROUM 一致性级别执行,复制因子为 3。集群由 3 个节点 (c1,c2,c3) 组成,每个节点位于不同的主机上(虚拟机)。客户端驱动程序连接到 c1。在测试期间,我关闭了 c2 的主机。从那时起,我们观察到客户端阻塞了 > 12 秒,直到其他节点意识到 c2 消失了。所以我认为这不是客户端问题,因为客户端连接到节点 c1,在这种情况下它仍然是 运行。

编辑: 我不相信 VM 中的 运行 cassandra 会影响网络堆栈。事实上,终止 VM 的效果是 TCP 连接不会终止。在这种情况下,远程主机只能通过某种超时机制(应用程序级协议超时或 TCP 超时)注意到这一点。 如果进程在 OS 级别被杀死,OS 的 TCP 堆栈将负责终止 TCP 连接(恕我直言,TCP 重置),使远程主机能够立即收到有关失败的通知。 然而,重要的是,即使在主机因硬件故障而崩溃,或主机因网络电缆被拔出而断开连接的情况下(在这两种情况下,TCP 连接都不会立即终止),故障转移时间仍然是低的。我已经尝试 sigkill VM 中的 cassandra 进程。在这种情况下,故障转移时间约为 600 毫秒,这很好。

亲切的问候

Failover times are pretty good when shutting down one node gracefully, however, when killing a node (by shutting down the VM) the latency during the tests is about 12 seconds

12 秒是一个相当大的值。进一步调查前的一些问题

编辑:对于要标记为关闭的节点,八卦协议正在使用 phi 应计检测器。该算法不具有二进制状态 (UP/DOWN),而是调整怀疑级别,如果该值高于阈值,则认为该节点关闭

为了避免由于微网络问题而标记节点,此算法是必要的。

cassandra.yaml 文件中查找此配置:

# phi value that must be reached for a host to be marked down.
# most users should never need to adjust this.
# phi_convict_threshold: 8

另一个问题是:您使用驱动程序的什么负载平衡策略?您是否使用了推测重试策略?