我正在使用 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避免在关闭时丢失任何数据。在关机之前基本上刷新所有表,考虑使用简单策略。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
Cassandra非常强大且可以防撞。即使你杀死/停止守护进程,你也可能没有数据丢失。但是如果你安全关机,那么你可以节省Cassandra的启动时间。
按照以下步骤安全关闭:
禁用八卦会停止与其他节点的通信,禁用thrift和二进制停止与客户端的通信。
最后排水冲洗所有桌子。
现在通过杀死或停止守护进程停止Cassandra
答案 1 :(得分:0)
nodetool drain
就足够了。
从Datastax文档中了解nodeool drain
,
将所有memtables从节点刷新到磁盘上的SSTables。 Cassandra停止侦听来自客户端和其他节点的连接。运行nodetool drain后需要重启Cassandra 链接:nodetool drain
然后你可以杀死或运行nodetool stopdaemon
。