我一头扎进了整个 Cassandra 世界,任务是将运行古老版本的 Cassandra (1.0.8) 的 8 节点集群迁移到运行 2.1.13 的新集群。我做了一堆谷歌搜索,但无法找到任何关于如何管理此迁移的结论,因此与其花时间进一步谷歌搜索并因缺乏对我的问题的良好答案而感到沮丧,我决定跳入它并为我的新集群启动一个节点。
使用我的新节点,我继续到旧节点上的 DESC KEYSPACE [keyspace],并从那里对输出进行了一些修改(它制作了列族而不是表,并且某些内容的定义方式超出了较新的 CQL 想要它)我能够在新节点上创建所需的表。
然后我继续将/raid0/cassandra/data/[keyspace] 的内容 scp 到我的新节点/raid0/cassandra/data/[keyspace] 这样做,我想我将能够运行 nodetool 修复或 nodetool 刷新,或其他一些不错的 nodetool 命令,以便让它从数据文件夹中重建所有内容,但是似乎我正在尝试的不起作用,因为没有任何东西进入我的表, 当我从 [表] 中运行选择 COUNT(*) 时,它们仍然只返回 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都会有一个升级的"陷阱"列表:
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
如果我站在你的立场上(我过去也这样做过),我会尝试在心理上决定就地升级还是导出数据并重新导入更容易。如果您有几百个演出的数据,它可能足够小,可以导出和重新导入(您可能需要使用自己喜欢的编程语言手动完成)。
如果您有相当多的数据量,只需一次升级一个节点,一次升级一个版本。在每个主要版本中,运行 upgradesstables。升级所有 sstables 后,升级到下一个主要版本。
过去,当我需要使用较小的数据集执行此操作时,我使用专用的批处理机器执行此操作:
-
附加了大量的存储空间
-
对于 cassandra-1.1、1.2、2.0、2.1 中的每个版本:
-
对于群集中的每个节点:
-
将数据复制到该节点(一次 1 个节点的数据)
-
运行升级表
-
将数据复制到保留位置
在该过程结束时,您拥有 2.1 的所有 sstables - 非常简单地将数据文件复制到 2.1 集群,您就可以开始了。