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的启动时间。
按照下面的步骤来安全关机:
- nodetool disablegossip
- nodetool disablethrift
- nodetool disablebinary(在卡桑德拉2的情况下。0以上)
- nodetool漏极
禁用闲话停止通信到其他节点,禁用节俭和二进制停止与客户端的通信。
最后耗尽所有表格。
现在停止卡桑德拉无论是杀或停止守护
nodetool drain
就足够了。
从Datastax文档关于nodeool drain
,
刷新从节点到磁盘上的所有SSTables memtables。 Cassandra停止监听来自客户端和其他节点的连接。运行节点工具后,需要重新启动Cassandra。
链接:nodetool drain
然后你就可以杀死或运行nodetool stopdaemon
。
该文档还提到了“在将节点升级到新版本的Cassandra之前,您通常使用此命令”。那么为什么要使用节点漏斗? –
因此,基本上你确定Cassandra不会将内存中的所有内容都刷新到磁盘,如果我们不做手动刷新/排水? –
当您写入数据时,Cassandra会将数据存储在commitlog中(以便更快地访问)。它不会在内存中存储数据,当你刷新/排空commitlog数据被写入数据库。这就是为什么当你杀死进程时,数据不会丢失。 –
但是在提交日志和sstable之间有memtable。我担心memtable中保存的数据。因为memtables中的数据在commitlog中没有被映射。说如果memtable_cleanup_threshold尚未到达并且我们正在关闭节点,那么memtable中存在的未刷新的数据将丢失,即使我执行flush/drain操作,我也会返回仅有提交日志的数据。 –