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

How to restart one live node from a multi node cassandra cluster?

我有一个包含 6 个节点的生产 cassandra 集群。我对一个节点上的 cassandra.yaml 文件做了一些更改,因此需要重新启动它。 我怎样才能在不丢失任何数据或导致任何与集群相关的问题的情况下做到这一点? 我可以终止该特定节点上的 cassandra 进程并重新启动它吗? 集群信息: 6个节点。都活跃。 我正在使用 AWS Ec2Snitch。

谢谢。

如果您使用的复制因子大于 1,并且没有在 writes/reads 上使用所有一致性设置,您可以执行下面列出的步骤,而不会造成任何 downtime/data 损失。如果您有上面列出的限制之一,您需要在继续之前增加复制 factor/change 请求的一致性。

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

在Cassandra中,如果启用了持久写入,无论如何你都不应该丢失数据 - 有一个commitlog日志重放机制以防意外重启,所以如果只是重启你不应该丢失任何数据,但是重放commitlog可以花一些时间。

上面写的步骤是官方升级过程的一部分,应该是"safest"选项。您可以执行 nodetool flush + 重启,这将确保提交日志重播最少,并且比 drain 方法更快。

Can I just kill the cassandra process on that particular node and start it again.

基本上,是的。我假设您的 RF 为 3,有 6 个节点,所以这应该没什么大不了的。如果你愿意,要执行我称之为 "clean shutdown" 的操作,你可以先 运行 以下命令:

nodetool disablegossip
nodetool drain

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

sudo service cassandra stop

或:

kill `cat cassandra.pid`

请注意,如果您没有完成这些步骤,您应该还是可以的。 drain 只是将内存表刷新到磁盘。如果那没有发生,无论如何都会在启动时将提交日志与磁盘上的内容进行核对。这些步骤只会让您的启动速度更快。