Cassandra 快照恢复:随机丢失数据

P. *_*der 5 backup data-loss restore cassandra database-backup

我很难在 Apache Cassandra(3.0.9 版)上恢复快照。据我所知,我正在遵循 datastax 博客上描述的程序以及其他几个程序(例如:http ://datascale.io/cloning-cassandra-clusters-fast-way/ )。然而我可能会遗漏一些东西,每次我进行恢复时,数据都会丢失。

设置: 6 节点集群(1 个 DC,3 个机架,每个机架有 2 个节点),复制因子设置为 3。机器托管在 AWS 上。

备份程序(在每个节点上):

  1. nodetool snapshot mykeyspace
  2. cqlsh -e 'DESCRIBE KEYSPACE mykeyspace' > /tmp/mykeyspace.cql
  3. nodetool ring | grep "$(ifconfig | awk '/inet /{print $2}' | head -1)" | awk '{print $NF ","}' | xargs > /tmp/tokens

我获取由 nodetool snapshot 命令生成的文件,并将它们与 S3 上的令牌和 cql 一起备份。

恢复过程(对于每个节点,除非指定):

(在创建新虚拟机之后)

  1. 下载快照、令牌和密钥空间
  2. 停止服务 cassandra
  3. 删除/var/lib/cassandra/commitlog/*/var/lib/cassandra/system/
  4. 将令牌插入 cassandra.yaml
  5. 启动服务 cassandra
  6. 仅从mykeyspace.cql一个节点恢复 mykeyspace
  7. 等待复制并停止服务 cassandra
  8. 删除.db文件夹中的文件/var/lib/cassandra/data/mykeyspace/
  9. 对于每个表,将快照文件 ( .db, .crc32, .txt)复制到/var/lib/cassandra/data/mykeyspace/$table/
  10. 重启服务cassandra
  11. 一次运行nodetool repair mykeyspace -full一个节点

结果 :

总是有缺失的行,每个表的数量大致相同,但永远不会相同。我试图“混淆”一些程序,比如在令牌nodetool refresh之前恢复密钥空间,在修复之前运行,但我每次都遇到同样的问题。

由于我离“好的”恢复不远了,我认为我错过了一些非常明显的东西。分析日志并没有真正的帮助,因为它们没有显示任何错误/失败消息。

欢迎任何帮助:) 如果需要,我当然可以提供更多信息。

编辑:没有人?我用cassandra版本(3.0.9)更新了这个问题,我首先忘记了。我再次尝试恢复,但没有运气。我真的没有更多的想法:(

P. *_*der 0

好了,故事结束了,笨蛋!在我的恢复过程中,cassandra.yaml 中的行initial_token被错误地“seded”。如果键的“:”后面没有空格initial_token,则 cassandra 无法启动。因此该行被保留注释并且标记不被解释!

总而言之:

  • initial_token:<values>= 错误
  • initial_token: <values>= 好

非常感谢 Josh Purvis 坚持认为此参数非常重要:-)