7

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

我开始查看 sstable2json,因为它为该特定 cassandra 节点上的 SSTable 创建了一个 json 文件。我的想法是为环中每个节点上的列族执行此操作。所以在一个 5 节点环上,这会给我 5 个 json 文件,一个文件用于存储在每个节点上的列族中的数据。

然后我将 json 文件合并到一个文件中,并使用 json2sstable 导入一个新的集群,大小为 7。我希望 cassandra 然后将数据均匀地复制/平衡到环中的节点上,但我刚刚读到 SSTables 一旦写入就不可改变。因此,如果我按照我刚才提到的那样去做,我最终会得到一个环,其中包含我列族中的所有数据在一个节点上。

那么谁能帮我弄清楚将数据从一个集群迁移到不同环大小的不同集群的过程?

4

4 回答 4

9

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

通常 sstableloader 的使用顺序如下:

  1. 使用 SSTableWriter 在本地创建 sstables
  2. 使用 sstableloader 将 sstables 中的数据流式传输到正确的节点(bin/sstableloader path-to-directory-full-of-sstables)。目录名称被假定为键空间,如果您将其指向现有的 Cassandra 数据目录,就会出现这种情况。

由于您希望将数据从现有集群 A 流式传输到新集群 B,因此您可以直接跳到针对集群 A 中每个节点上的数据运行 sstableloader。

在这篇博文中使用 sstableloader 的更多细节。

于 2011-07-22T17:14:09.393 回答
0

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

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

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

于 2014-09-24T04:43:08.043 回答
-1

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

  1. 根据http://wiki.apache.org/cassandra/Operations#Token_selection创建新环并为每个节点适当定义令牌
  2. 将数据导入新环。
  3. 戒指将根据您定义的令牌自行平衡http://wiki.apache.org/cassandra/Operations#Import_.2BAC8_export
于 2011-07-22T07:03:42.230 回答