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

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

安装程序: 6个节点群集(1个DC,3个机架,每个2个节点)复制因子设置为3.计算机托pipe在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一起备份。

恢复过程(除非指定了每个节点):

(在创build新的虚拟机之后)

  1. 下载快照,令牌和密钥空间
  2. 停止服务cassandra
  3. 删除/var/lib/cassandra/commitlog/*/var/lib/cassandra/system/
  4. 将令牌插入cassandra.yaml
  5. 开始服务cassandra
  6. 仅在一个节点上从mykeyspace.cql还原mykeyspace
  7. 等待复制并停止服务cassandra
  8. 删除文件夹/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)更新了这个问题,我首先忘记了这个问题。 我再次尝试恢复,但没有运气。 我真的没有更多的想法真的:(

该博客文章中的sed命令(应该在$JVM_OPTS添加-Dcassandra.load_ring_state=false对当前格式没有影响。

如果您直接从博客文章复制该命令,则可能是这个问题。 你可以尝试这个,而不是把它放在文件的底部:

sudo sed -i '$ a\JVM_OPTS="$JVM_OPTS -Dcassandra.load_ring_state=false"' /etc/cassandra/cassandra-env.sh

你也需要在每个节点上nodetool repair -pr <ks>执行节点nodetool repair -pr <ks>

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

tldr:

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

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