cassandra 是否会刷新 nodetool stopdaemon 上的内存表。如果不是,该怎么做才能避免数据丢失

Sye*_*afa 5 cassandra data-loss nodetool datastax

我正在使用apache-cassandra-3.10

我知道优雅地停止 cassandra 的唯一方法是nodetool stopdaemon ,而不是kill -9 pid

但我想知道nodetool stopdaemon在关闭之前是否也将memtables中的数据刷新sstables

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

在对此进行研究之后,我读到了有关DURABLE_WRITES 的信息。持久写入实际上有什么作用?

此外,datastax 文档在设置 DURABLE_WRITES “不要使用 SimpleStrategy 在键空间上设置此属性”部分下指出

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

如果我的键空间配置为简单策略,我仍然无法从DURABLE_WRITES中受益,以防它有助于解决关机时的数据丢失问题?

在关闭之前手动运行nodetoollush是确保我们在关闭时不会丢失数据的唯一方法吗?

我从https://issues.apache.org/jira/browse/CASSANDRA-3564中了解到,尚未添加关闭时刷新的功能。

另外还有关于同一问题的开放票 https://issues.apache.org/jira/browse/CASSANDRA-12001

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

Sho*_*dar 3

Cassandra 非常强大且防碰撞。即使您终止/停止守护进程,您也可能不会丢失数据。但如果您安全关闭,则可以节省 Cassandra 的启动时间。

请按照以下步骤安全关闭:

  1. 节点工具禁用八卦
  2. 节点工具禁用节俭
  3. nodetool disablebinary(对于 Cassandra 2.0 及更高版本)
  4. 节点工具排水管

禁用 gossip 会停止与其他节点的通信,禁用 thrift 和 binary 会停止与客户端的通信。

最后下水道冲洗所有桌子。

现在通过终止或停止守护进程来停止 Cassandra