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

时间:2017-06-05 12:05:02

标签: amazon-web-services cassandra cassandra-2.1

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

  1. 在该节点(http://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsDrain.html)上执行 nodetool drain
  2. 停止服务。
  3. 启动服务。
  4. 在Cassandra中,如果启用了持久写入,则不应该丢失数据 - 在意外重启的情况下会出现commitlog日志重放机制,因此如果只是重新启动,则不应丢失任何数据,而是重播commitlog可能需要一些时间。

    上述步骤是官方升级程序的一部分,应该是最安全的"选项。您可以执行 nodetool flush + restart,这将确保commitlog重放次数最少,并且可以比 drain 方法更快。

答案 1 :(得分:1)

  

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

基本上,是的。我假设你的射频为3,有6个节点,所以它应该不是什么大问题。如果你愿意,做我称之为“干净关机”的你可以先运行以下命令:

nodetool disablegossip
nodetool drain

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

sudo service cassandra stop

或者:

kill `cat cassandra.pid`

请注意,如果您没有完成这些步骤,那么您仍然可以。 drain只是将memtables刷新到磁盘。如果没有发生这种情况,则无论如何都会在启动时将提交日志与磁盘上的内容进行协调。这些步骤只会让您的启动更快。