如何将数据从大小为N的Cassandra集群迁移到大小为N +/- M的不同集群

时间:2011-07-21 18:49:50

标签: cassandra migrate

我正在试图弄清楚如何将数据从一个cassandra集群迁移到另一个不同环大小的cassandra集群......例如从5节点集群迁移到7节点集群。

我开始查看sstable2json,因为它在特定的cassandra节点上为SSTable创建了一个json文件。我的想法是为环中每个节点上的列族做这个。因此,在5节点环上,这将为我提供5个json文件,一个文件用于存储在每个节点上的列族中的数据。

然后我将json文件合并到一个文件中,并使用json2sstable导入到一个大小的新集群中,让我们说7.我希望cassandra然后将数据均匀地复制/平衡在节点之间戒指,但我刚刚读到SSTables一旦写完就是不可变的。所以,如果我按照刚刚提到的那样做,我最终会在一个节点上找到我的列族中所有数据的响铃。

那么有人可以帮我弄清楚将数据从一个群集迁移到不同环大小的不同群集的过程吗?

4 个答案:

答案 0 :(得分:9)

更好:在旧环上的sstables上使用bin / sstableloader,然后流式传输到新环。

通常sstableloader用于这样的序列:

  1. 使用SSTableWriter
  2. 在本地创建sstables
  3. 使用sstableloader将sstables中的数据流式传输到正确的节点(bin / sstableloader path-to-directory-full-of-sstables)。假定目录名是键空间,如果将其指向现有的Cassandra数据目录,则会出现这种情况。
  4. 由于您希望将数据从现有群集A流式传输到新的群集B,因此您可以直接跳过针对群集A中每个节点上的数据运行sstableloader。

    有关在this blog post中使用sstableloader的更多详细信息。

答案 1 :(得分:0)

您不需要使用sstable2json。如果你有空间,你可以:

  1. 从旧环上的所有节点获取所有sstables
  2. 将它们全部放在每个新服务器上(重命名任何具有相同名称的服务器)
  3. 在新环中的每个节点上运行nodetool cleanup,它们将丢弃不属于它们的数据。

答案 2 :(得分:0)

您可以执行以下步骤: 1.将7个节点加入5个节点集群,并使用自己的环令牌设置每个节点。此时,您可能拥有一个包含12个节点的群集。 2.在步骤1中从新群集中删除5个节点。 3.在您自己移动5个节点后,为每个节点设置令牌环。 4.修复7个节点集群。

答案 3 :(得分:-1)

我敢说,这不像看起来那么大。

  1. 根据http://wiki.apache.org/cassandra/Operations#Token_selection
  2. 创建新环并根据每个节点定义令牌
  3. 将数据导入新环。
  4. 响铃将根据您定义的标记http://wiki.apache.org/cassandra/Operations#Import_.2BAC8_export
  5. 进行自我平衡