如何从多节点cassandra集群重新启动一个活动节点?

问题描述:

我有一个6节点的生产cassandra集群。我对一个节点上的cassandra.yaml文件进行了一些更改,因此需要重新启动它。 如何在不丢失任何数据或导致任何集群相关问题的情况下执行此操作? 我可以在该特定节点上杀死cassandra进程并重新启动它。 集群信息: 6个节点。所有活动。 我正在使用AWS Ec2Snitch。如何从多节点cassandra集群重新启动一个活动节点?

谢谢。

如果您使用的复制因子大于1,而且在写/读操作中未使用ALL一致性设置,则可以执行下列步骤,而不会出现任何停机/数据丢失。如果您有上述限制之一,则需要在继续之前增加复制因子/更改请求一致性。

  1. 执行nodetool该节点(http://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsDrain.html)上漏
  2. 停止服务。
  3. 启动服务。

在卡桑德拉,如果耐用使能写操作,你不应该反正丢失数据 - 有commitlog日志重播的意外重启的情况下的机制,所以你不应该丢失任何数据,如果这样做只是重新启动,但重放commitlog可能需要一些时间。

上述步骤是官方升级程序的一部分,应该是“最安全”的选项。你可以做nodetool flush +重启,这样可以确保commitlog的重播会很小,并且可以比的方法更快。

+0

谢谢@nevsv,我会在分段集群上尝试这些,然后继续生产。我使用的复制因子是3,读取一致性是1.在完成维护活动后,我将在此分享我的经验。 –

我可以在该特定节点上杀死cassandra进程并重新启动它。

本质上说,是的。我假设你有6个节点的RF,所以它不应该是一个大问题。如果你想,做我称之为“干净关闭”,你可以先运行下面的命令:

nodetool disablegossip 
nodetool drain 

然后(取决于您的安装):

sudo service cassandra stop 

或者:

kill `cat cassandra.pid` 

请注意,如果您未完成这些步骤,您应该仍然可以。 drain只是将memtables刷新到磁盘。如果这种情况没有发生,那么提交日志与启动时磁盘上的内容一致。这些步骤只会让你的启动速度更快。

+0

谢谢@aaron。是的,我的确在使用复制因子3,并且读取一致性为1.如果我理解正确,我不需要删除或触摸数据目录,只需完成您提到的步骤即可停止并启动该过程。 –