将单节点Cassandra群集dynamic更改为两个节点

所以我有一个应用程序,大部分时间都是非常hibernate的,但是这个应用程序需要在几个月内爆发。 由于我们在EC2上进行部署,因此我希望大部分时间只保留一台Cassandra服务器,然后在爆发时间内,我想再增加一台服务器(使用比先前更多的RAM和CPU)来帮助提供服务。 做这个的最好方式是什么? 我应该采取不同的方法吗?

关于我打算做什么的一些说明:

  • 带上节点并立即修复
  • 突发时间结束后,强大的节点退役
  • 使用永远在线的服务器作为种子节点

我的主要问题是如何让节点共享所有的数据,因为我想要一个复制因子2(所以这两个节点都拥有所有的数据),但只有一个服务器时,这将无法正常工作。 我应该提出2个额外的服务器,而不是一个?

看来,你可以很容易地改变复制因素 。

这也在Cassandra维基上提到,您可以在这里find增加和减less复制因子的说明。

这意味着应该可以这样做:

  • 将复制因子从1更改为2
  • 调出和修复你的爆发节点,以便它收到所有数据的副本
  • … 做工作 …
  • 分解突发节点
  • 将复制因子从2更改为1
  • 运行清理

根据我的经验,更改复制因子在我的经验中并不能很好地工作:-(对于我来说,最终可能会遇到架构分歧,这些分歧会花费很多时间来解决。

只是想大声,但另一个可能的路线可能是(改变时机,以适应):

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

Cassandra通过每个节点负责的环的数量来有效地分配工作量。 让第二个节点或者是第一个节点容量的两倍,或者增加两个与第一个节点相同大小的节点,可能会更容易,这样可以更容易地分割环。

当放弃节点时,这仍然需要手动节点工具干预,因为已提示的切换将在剩余节点上不必要地填满磁盘。