因此,我有一个应用程序,它大部分时间都处于休眠状态,但每月有几天需要高负荷。由于我们是在 EC2 上部署的,因此我希望大部分时间只保持一台 Cassandra 服务器处于运行状态,然后在负荷高峰期,我希望再启动一台服务器(具有比第一台更多的 RAM 和 CPU)来帮助处理负载。最好的方法是什么?我应该采取不同的方法吗?
关于我计划做的事情的一些说明:
- 立即启动节点并修复
- 爆发时间结束后,停用强大的节点
- 使用始终在线的服务器作为种子节点
我的主要问题是如何让节点共享所有数据,因为我想要复制因子为 2(这样两个节点都拥有所有数据),但如果只有一台服务器,那么这种方法行不通。我应该启动 2 台额外的服务器而不是一台吗?
答案1
看来你可以很容易地更改复制因子。
这也提到了Cassandra 维基,您可以在其中找到增加和减少复制因子的说明。
这意味着应该可以做到这一点:
- 将复制因子从 1 改为 2
- 启动并修复突发节点,以便它接收所有数据的副本
- ... 做工作 ...
- 退役突发节点
- 将复制因子从 2 改回 1
- 运行清理
答案2
根据我的经验,动态更改复制因子效果并不好 :-( 您最终可能会遇到模式不一致的问题,至少对我来说,这很耗时。
只是大声思考,但另一条可能的路线可能是(改变时间以适应):
- 在 cassandra.yaml 中增加 GC 宽限期(这决定了墓碑在从磁盘清除之前可以存活多长时间)到 30 天
- 每 15 天左右启动第二个节点,无论是否需要。确保在运行之间保留其数据/提交日志等。这意味着当您需要启动第二个节点时,您可以更快地开始
比第一个拥有更多的 RAM 和 CPU
Cassandra 可以有效地按每个节点负责的环大小划分工作负载。让第二个节点将第一个节点的容量增加一倍,或者添加 2 个与第一个节点大小相同的节点,这样更容易划分环。
但是,在删除节点时,仍然需要手动的节点工具干预,因为提示的切换将在剩余节点上不必要地填满磁盘。