【问题标题】:Cassandra lost data after restartingCassandra 重启后数据丢失
【发布时间】:2018-04-09 20:49:53
【问题描述】:

我遇到了一个问题。我生成一些数据,并获取所有数据。它运作良好。之后,我关闭了所有 CassandraDaemons 并重新启动它们,我无法获取所有数据,因为某些列的数据丢失了。我不知道为什么会这样。有没有人可以给我一些建议?非常感谢。顺便说一句,我用的是 Cassandra 2.1,复制因子是 1。

【问题讨论】:

  • 使用 Cassandra,您可以在不同的一致性级别 (CL) 上进行查询。您在哪个 CL 上编写和阅读以及您是如何编写/阅读的(即 cqlsh 或驱动程序等)?
  • 一致性级别为 ONE。我通过 Thrift API 读写数据。
  • 好像是Cassandra在重启的时候没能重播commitlog,导致数据丢失。但我不知道为什么。修复数据丢失的一种解决方案是在杀死 CassandraDaemons 之前使用 nodetool 强制将数据刷新到 SSTable 中。
  • 对不起,我想是因为我在杀死 ​​Cassandra 之前清除了缓存。以为守护进程仍在运行时不会释放缓存的内存。然而,我错了。
  • 对不起,我想是因为我在杀死 ​​Cassandra 之前清除了缓存。以为守护进程仍在运行时不会释放缓存的内存。然而,我错了。

标签: cassandra


【解决方案1】:

似乎是Cassandra在重启时未能重放commitlog,导致数据丢失。但我不知道为什么。修复数据丢失的一种解决方案是在杀死 CassandraDaemons 之前使用 nodetool 强制将数据刷新到 SSTable。

【讨论】:

  • 您总是可以在停止节点之前排空。您在提交日志重放时看到了哪些类型的错误?
  • 实际上,我没有看到任何关于重播提交日志的错误,但我看到了诸如“未找到提交日志文件;跳过重播”之类的信息。那么,写commitlog的时候,数据不是直接写入磁盘的吗?缓存的提交日志一起排空了吗?我不确定实施。感谢您的帮助。
  • 所以这里最好的资源是关于 Cassandra 如何写入数据的文档:docs.datastax.com/en/cassandra/3.0/cassandra/dml/…
  • 如果没有提交日志,这并不罕见,如果您在停止之前耗尽,则重启时该节点上不应有任何数据丢失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多