将单节点 Cassandra 集群动态更改为双节点

将单节点 Cassandra 集群动态更改为双节点

因此,我有一个应用程序,它大部分时间都处于休眠状态,但每月有几天需要高负荷。由于我们是在 EC2 上部署的,因此我希望大部分时间只保持一台 Cassandra 服务器处于运行状态,然后在负荷高峰期,我希望再启动一台服务器(具有比第一台更多的 RAM 和 CPU)来帮助处理负载。最好的方法是什么?我应该采取不同的方法吗?

关于我计划做的事情的一些说明:

  • 立即启动节点并修复
  • 爆发时间结束后,停用强大的节点
  • 使用始终在线的服务器作为种子节点

我的主要问题是如何让节点共享所有数据,因为我想要复制因子为 2(这样两个节点都拥有所有数据),但如果只有一台服务器,那么这种方法行不通。我应该启动 2 台额外的服务器而不是一台吗?

答案1

看来你可以很容易地更改复制因子

这也提到了Cassandra 维基,您可以在其中找到增加和减少复制因子的说明。

这意味着应该可以做到这一点:

  • 将复制因子从 1 改为 2
  • 启动并修复突发节点,以便它接收所有数据的副本
  • ... 做工作 ...
  • 退役突发节点
  • 将复制因子从 2 改回 1
  • 运行清理

答案2

根据我的经验,动态更改复制因子效果并不好 :-( 您最终可能会遇到模式不一致的问题,至少对我来说,这很耗时。

只是大声思考,但另一条可能的路线可能是(改变时间以适应):

  1. 在 cassandra.yaml 中增加 GC 宽限期(这决定了墓碑在从磁盘清除之前可以存活多长时间)到 30 天
  2. 每 15 天左右启动第二个节点,无论是否需要。确保在运行之间保留其数据/提交日志等。这意味着当您需要启动第二个节点时,您可以更快地开始
  3. 比第一个拥有更多的 RAM 和 CPU

Cassandra 可以有效地按每个节点负责的环大小划分工作负载。让第二个节点将第一个节点的容量增加一倍,或者添加 2 个与第一个节点大小相同的节点,这样更容易划分环。

但是,在删除节点时,仍然需要手动的节点工具干预,因为提示的切换将在剩余节点上不必要地填满磁盘。

相关内容