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

Abh*_*k S 5 amazon-web-services cassandra cassandra-2.1

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

谢谢。

nev*_*vsv 5

如果您使用大于 1 的复制因子,并且在写入/读取时未使用 ALL 一致性设置,则可以执行下面列出的步骤,而不会造成任何停机/数据丢失。如果您遇到上面列出的限制之一,则需要在继续之前提高复制因子/更改请求的一致性。

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

在 Cassandra 中,如果启用了持久写入,无论如何您都不应该丢失数据 - 有一种在意外重新启动时重放 commitlog 日志的机制,因此如果只是重新启动,您不应该丢失任何数据,但重放 commitlog 可能需要一些时间。

上面写的步骤是官方升级过程的一部分,应该是“最安全”的选项。您可以执行nodetool刷新+重新启动,这将确保提交日志重播最少,并且比耗尽方法更快。