可以在不影响应用程序的情况下关闭一半的 Cassandra 节点吗?



如果有一个 4 节点的 Cassandra 集群,是否可以在不影响应用程序的情况下配置卡桑德拉,让一半的节点(在本例中为两个(关闭?

另外,节点可以在不 Cassandra 取消写入队列的情况下关闭多长时间?

这取决于客户端 CL 和 DC 复制因子。

假设 RF 为 4(全部(,如果客户端具有 CL=ONE 或 LOCAL_ONE,则应用程序不会注意到任何问题。任何其他客户端 CL 都会有问题(例如 cl=local_quorum 的 4 是 3,只允许一个节点关闭(。

让我们假设 RF=1 或 2。如果 CL=ONE 或 LOCAL_ONE,则应用程序将不受仅操作可用节点上数据的查询的影响。但是,对仅存在于不可用节点上的行的任何访问都会受到影响。换句话说,CL=ONE 或 LOCAL_ONE 仅在操作至少有一个节点可用于返回响应的数据时才有效(在此方案中,您只需要一个节点即可响应(。如果要查询的行位于两个不可用的节点上,则会收到如下错误消息:预期响应为 1,收到 0。

许多应用程序将 CL 配置为某种仲裁(本地或非本地( - 因此在这种情况下,应用程序肯定会失败,除非您有 RF=5(因此至少有 5 个节点(。仲裁 5 为 3,允许 2 个节点发生故障。

希望这是有道理的。

是的,假设您谈论的是一个数据中心中的所有四个节点,如果您将复制因子设置为 3 或更高,并且读取和写入一致性级别为 ONE。

对于写入,启动的节点将存储已关闭节点的提示,因此当它们重新启动时,它们可以写入数据。节点存储这些提示的时间可以在cassandra.yaml中设置。

最新更新