从数据、摘要、索引和过滤器文件恢复 cassandra 节点

Restoring cassandra node from data, digest, index and filter files

我一头扎进了整个 Cassandra 世界,任务是将一个 8 节点集群 运行将一个古老版本的 Cassandra (1.0.8) 迁移到一个新集群 运行 ning 2.1.13 .. 我做了很多谷歌搜索,但没有找到关于如何管理此迁移的任何结论,所以与其花时间进一步谷歌搜索并因为我的问题缺乏好的答案而感到沮丧,我决定跳入其中并为我的新集群启动一个节点。

在我的新节点上,我进入了旧节点上的 DESC KEYSPACE [键空间],并对那里的输出进行了一些修改(它创建了列族而不是 tables,有些东西是以其他方式定义,而不是较新的 CQL 想要的)我能够在我的新节点上创建所需的 tables。

然后我继续将 /raid0/cassandra/data/[keyspace] 的内容 scp 到我位于 /raid0/cassandra/data/[keyspace] 的新节点,这样做我想我可以 运行 nodetool repair 或 nodetool refresh,或其他一些不错的 nodetool 命令,以使其从数据文件夹中重建所有内容,但似乎我正在尝试的内容不起作用,因为我的 tables 没有任何内容,当我 运行 SELECT COUNT(*) FROM [table] 时,它们仍然只是 return 0;在 cqlsh.

任何人都可以帮助我弄清楚如何将数据正确导入到我的新节点上的键空间中?

谢谢

从 1.0 到 2.1 是一大步 - 在操作上,完成后您可能会更快乐,但这不会是一个超级简单的过程。

首先要注意的是:Cassandra 中的快照是您的朋友。它们是硬链接,仅需几秒钟,如果发生不良情况,它们将真正帮助您回滚。在你做任何事情之前,在每个节点上拍摄快照。

现在,要从 1.0 升级到 2.1,您实际上需要进行大量升级:

1.0 -> 1.1

1.1 -> 1.2

1.2 -> 2.0

2.0 -> 2.1

听起来很悲惨?它可能会。每个版本的cassandra都会有一个'gotchas'的升级列表:

https://github.com/apache/cassandra/blob/cassandra-1.0/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-1.1/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-1.2/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-2.0/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-2.1/NEWS.txt

如果我处在你的位置(过去我一直如此),我会试着在心里决定是就地升级还是导出数据并重新导入更容易。如果您有几百 GB 的数据,它可能小到足以导出和重新导入(您可能需要使用您喜欢的编程语言手动完成)。

如果您的数据量相当大,只需一次升级一个节点,一次升级一个版本。在每个主要版本中,运行 升级稳定器。升级所有 sstables 后,升级到下一个主要版本。

过去,当我需要用较小的数据集做这件事时,我用专用的批处理机器来做:

  • 我附上大量存储

  • 对于 cassandra-1.1、1.2、2.0、2.1 中的每个版本:

  • 对于集群中的每个节点:

  • 将数据复制到该节点(一次 1 个节点的数据)

  • 运行 升级稳定器

  • 将数据复制到保留位置

在该过程结束时,您拥有 2.1 的所有 sstables - 非常简单,然后将数据文件复制到 2.1 集群,您就可以开始了。