我很难在Apache Cassandra(版本3.0.9)上恢复快照。 据我所知,我遵循datastax博客上描述的过程以及其他几个(例如: http ://datascale.io/cloning-cassandra-clusters-fast-way/)。 然而,我可能会错过一些东西,每次我做一次恢复,数据就会丢失。
安装程序: 6个节点群集(1个DC,3个机架,每个2个节点)复制因子设置为3.计算机托pipe在AWS上。
备份程序(在每个节点上):
nodetool snapshot mykeyspace cqlsh -e 'DESCRIBE KEYSPACE mykeyspace' > /tmp/mykeyspace.cql nodetool ring | grep "$(ifconfig | awk '/inet /{print $2}' | head -1)" | awk '{print $NF ","}' | xargs > /tmp/tokens 我得到了由nodetool snapshot命令生成的文件,并将它们与S3上的标记和cql一起备份。
恢复过程(除非指定了每个节点):
(在创build新的虚拟机之后)
/var/lib/cassandra/commitlog/*和/var/lib/cassandra/system/ cassandra.yaml mykeyspace.cql还原mykeyspace /var/lib/cassandra/data/mykeyspace/ .db , .crc32 , .txt )到/var/lib/cassandra/data/mykeyspace/$table/ 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坚持这个参数的重要性:-)