收缩Cassandra集群的最佳方法

10

关于如何扩展Cassandra有相当数量的文档,但是有没有一个好的资源,介绍如何“缩减”Cassandra并从集群中移除节点呢? 是将节点关闭,让集群再次同步,然后重复这个过程就可以了吗?

原因在于某个网站预计会出现高峰期的流量,从每天的几千次点击到几天内的数十万次。在此之前,该网站将被“升级”,启动多个Web服务器、Cassandra等实例。请求潮水退去后,目标是关闭不再使用的实例,而不是为闲置的服务器付费。

3个回答

8

如果您只是关闭节点并重新平衡集群,则有可能会丢失一些数据,这些数据仅存在于被移除的节点上并且尚未进行复制。

通过nodetool可以轻松实现安全的集群缩小。首先运行:

nodetool drain

当节点被移除时,为了停止接受写入和刷新内存表,请执行以下操作:

nodetool decommission

将节点的数据移动到其他节点,然后关闭该节点,并在其他节点上运行:

nodetool removetoken

要完全从集群中删除节点,可以使用NodeTool工具。详细文档可在此处找到:http://wiki.apache.org/cassandra/NodeTool

根据我的经验,我建议逐个删除节点,而不是批量删除。虽然需要更多时间,但在网络中断或硬件故障的情况下更加安全。


在删除节点时,要停止接受写入并刷新内存表,然后运行命令:nodetool decommission。与此行相反的是,在我开始取消委派我的节点之后,它仍在接受写入,并且取消委派停留在UL状态中。请提供建议。 - DollyShukla

2
当你删除节点时,可能需要重新平衡集群,将一些节点移动到新的令牌上。在计划缩减规模时,您需要:
1 - 最小化移动次数。
2 - 如果必须移动节点,则最小化传输的数据量。
这里有一篇关于集群平衡的文章可能会有所帮助: 平衡您的Cassandra集群 此外,这个视频的开头是关于添加节点和删除节点操作以及在每个操作中最小化集群影响的最佳策略。
希望这两个参考资料足以为您规划缩减规模提供足够的信息。

0

首先,在将要移除的节点上,将内存(memtable)刷新到磁盘上的 SSTables 中:

- nodetool flush

其次,运行以下命令以离开集群: - nodetool decommission

此命令将把该节点负责的范围分配给其他节点,并适当地复制数据。

要监视进程,可以使用以下命令: - nodetool netstats

找到了一篇关于如何从 Cassandra 中删除节点的文章。对我很有帮助 scaling down cassandra。所有操作都在那里逐步描述。


3
为了避免URL被更改或删除,建议将主要步骤放入答案中。 - Alex Ott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接