cassandra是否在nodetool stopdaemon上刷新memtables。如果没有做什么,以避免数据丢失

时间:2017-03-21 11:49:30

标签: apache cassandra datastax nodetool data-loss

我正在使用 apache-cassandra-3.10

我理解而不是 kill -9 pid ,优雅地阻止cassandra的唯一方法是 nodetool stopdaemon

但我想知道 nodetool stopdaemon 刷新 memtables 中的数据 sstables ,然后再关闭。

如果它没有刷新,那么当我使用nodetool stopdaemon停止节点时,它将导致数据丢失

在研究了这个之后,我读到了 DURABLE_WRITES 。持久写实际上做了什么?

此外,数据共享文档在设置DURABLE_WRITES 部分下说明“不要使用SimpleStrategy在键空间上设置此属性”

参考:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/create_keyspace_r.html

如果我的密钥空间配置了简单策略,如果它可以帮助解决关闭时的数据丢失,我仍然无法使用 DURABLE_WRITES 受益?

在关机之前手动运行 nodetool flush ,这是确保我们在关机时不会丢失数据的唯一方法吗?

我从https://issues.apache.org/jira/browse/CASSANDRA-3564读到,没有添加在关机时刷新的功能。

同样的问题还有一张开放票 https://issues.apache.org/jira/browse/CASSANDRA-12001

意图是使用nodetool stopdaemon避免在关闭时丢失任何数据。在关机之前基本上刷新所有表,考虑使用简单策略。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

Cassandra非常强大且可以防撞。即使你杀死/停止守护进程,你也可能没有数据丢失。但是如果你安全关机,那么你可以节省Cassandra的启动时间。

按照以下步骤安全关闭:

  1. nodetool disablegossip
  2. nodetool disablethrift
  3. nodetool disablebinary(如果是Cassandra 2.0及更高版本)
  4. nodetool drain
  5. 禁用八卦会停止与其他节点的通信,禁用thrift和二进制停止与客户端的通信。

    最后排水冲洗所有桌子。

    现在通过杀死或停止守护进程停止Cassandra

答案 1 :(得分:0)

nodetool drain就足够了。
从Datastax文档中了解nodeool drain

  

将所有memtables从节点刷新到磁盘上的SSTables。 Cassandra停止侦听来自客户端和其他节点的连接。运行nodetool drain后需要重启Cassandra   链接:nodetool drain

然后你可以杀死或运行nodetool stopdaemon