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

Modified on: Fri, 26 Jul 2019 14:20:02 +0800

我很难在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
  4. 醇>

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

    恢复程序(除非已指定,否则为每个节点):

    (创建新VM后)

    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
    9. 文件夹中的/var/lib/cassandra/data/mykeyspace/文件
    10. 对于每个表复制快照文件(.db.crc32.txt)到/var/lib/cassandra/data/mykeyspace/$table/
    11. 重启服务cassandra
    12. 一次运行nodetool repair mykeyspace -full,一个节点
    13. 醇>

      结果:

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

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

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

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

最佳答案

好的,故事结束,愚蠢的我!在我的恢复过程中,cassandra.yaml中的initial_token行被错误地“发送”了。
如果initial_token键的':'后面没有空格,则cassandra无法启动。因此该行被评论并且令牌不被解释!

tldr:

  • initial_token:<values> = WRONG
  • initial_token: <values> = GOOD

非常感谢Josh Purvis坚持这个参数的重要性: - )

作者:P. Bender

相关问答

添加新评论