关于如何扩展Cassandra有相当数量的文档,但是有没有一个好的资源,介绍如何“缩减”Cassandra并从集群中移除节点呢? 是将节点关闭,让集群再次同步,然后重复这个过程就可以了吗?
原因在于某个网站预计会出现高峰期的流量,从每天的几千次点击到几天内的数十万次。在此之前,该网站将被“升级”,启动多个Web服务器、Cassandra等实例。请求潮水退去后,目标是关闭不再使用的实例,而不是为闲置的服务器付费。
关于如何扩展Cassandra有相当数量的文档,但是有没有一个好的资源,介绍如何“缩减”Cassandra并从集群中移除节点呢? 是将节点关闭,让集群再次同步,然后重复这个过程就可以了吗?
原因在于某个网站预计会出现高峰期的流量,从每天的几千次点击到几天内的数十万次。在此之前,该网站将被“升级”,启动多个Web服务器、Cassandra等实例。请求潮水退去后,目标是关闭不再使用的实例,而不是为闲置的服务器付费。
如果您只是关闭节点并重新平衡集群,则有可能会丢失一些数据,这些数据仅存在于被移除的节点上并且尚未进行复制。
通过nodetool可以轻松实现安全的集群缩小。首先运行:
nodetool drain
当节点被移除时,为了停止接受写入和刷新内存表,请执行以下操作:
nodetool decommission
将节点的数据移动到其他节点,然后关闭该节点,并在其他节点上运行:
nodetool removetoken
要完全从集群中删除节点,可以使用NodeTool工具。详细文档可在此处找到:http://wiki.apache.org/cassandra/NodeTool
根据我的经验,我建议逐个删除节点,而不是批量删除。虽然需要更多时间,但在网络中断或硬件故障的情况下更加安全。
首先,在将要移除的节点上,将内存(memtable)刷新到磁盘上的 SSTables 中:
- nodetool flush
其次,运行以下命令以离开集群: - nodetool decommission
此命令将把该节点负责的范围分配给其他节点,并适当地复制数据。
要监视进程,可以使用以下命令: - nodetool netstats
找到了一篇关于如何从 Cassandra 中删除节点的文章。对我很有帮助 scaling down cassandra。所有操作都在那里逐步描述。