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

问题描述:

我使用Apache的卡桑德拉3.10cassandra是否在nodetool stopdaemon上刷新memtables?如果没有做什么,以避免数据丢失

我的理解,而不是杀-9 PID,只有这样,才能阻止卡桑德拉优雅是nodetool stopdaemon

但我想知道,如果nodetool stopdaemon刷新memtables数据关机前sstables

如果不刷新,则会导致数据丢失,当我使用nodetool stopdaemon停止节点时。

同样经过对此的研究,我读了关于DURABLE_WRITES。实际上持久性写入是什么?

此外,在设置DURABLE_WRITES部分的datastax文档状态“不要对使用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关闭任何数据丢失。基本上在关闭之前刷新所有表格,考虑使用简单策略。

任何帮助将不胜感激。

谢谢

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

按照下面的步骤来安全关机:

  1. nodetool disablegossip
  2. nodetool disablethrift
  3. nodetool disablebinary(在卡桑德拉2的情况下。0以上)
  4. nodetool漏极

禁用闲话停止通信到其他节点,禁用节俭和二进制停止与客户端的通信。

最后耗尽所有表格。

现在停止卡桑德拉无论是杀或停止守护

+0

因此,基本上你确定Cassandra不会将内存中的所有内容都刷新到磁盘,如果我们不做手动刷新/排水? –

+0

当您写入数据时,Cassandra会将数据存储在commitlog中(以便更快地访问)。它不会在内存中存储数据,当你刷新/排空commitlog数据被写入数据库。这就是为什么当你杀死进程时,数据不会丢失。 –

+0

但是在提交日志和sstable之间有memtable。我担心memtable中保存的数据。因为memtables中的数据在commitlog中没有被映射。说如果memtable_cleanup_threshold尚未到达并且我们正在关闭节点,那么memtable中存在的未刷新的数据将丢失,即使我执行flush/drain操作,我也会返回仅有提交日志的数据。 –

nodetool drain就足够了。
从Datastax文档关于nodeool drain

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

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

+0

该文档还提到了“在将节点升级到新版本的Cassandra之前,您通常使用此命令”。那么为什么要使用节点漏斗? –