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

发布于 2024-11-26 04:20:27 字数 452 浏览 4 评论 0原文

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

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

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

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

I'm trying to figure out how to migrate data from one cassandra cluster, to another cassandra cluster of a different ring size...say from a 5 node cluster to a 7 node cluster.

I started looking at sstable2json, since it creates a json file for the SSTable on that specific cassandra node. My thought was to do this for a column family on each node in the ring. So on a 5 node ring, this would give me 5 json files, one file for the data stored on in the column family that resides on each node.

Then I'd merge the json files into one file, and use json2sstable to import into a new cluster, of size, lets say 7. I was hoping that cassandra would then replicate/balance the data out evenly across the nodes in the ring, but I just read that SSTables are immutable once written. So if I did what I just mentioned, I'd end up with a ring with all the data in my column family on one node.

So can anyone help me figure out the process for migrating data from one cluster to a different cluster of a different ring size?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怀里藏娇 2024-12-03 04:20:27

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

通常 sstableloader 按如下顺序使用:

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

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

有关使用 sstableloader 的更多详细信息,请参见 这篇博文

Better: use bin/sstableloader on the sstables from the old ring, to stream to the new one.

Normally sstableloader is used in a sequence like this:

  1. Create sstables locally using SSTableWriter
  2. Use sstableloader to stream the data in the sstables to the right nodes (bin/sstableloader path-to-directory-full-of-sstables). The directory name is assumed to be the keyspace, which will be the case if you point it at an existing Cassandra data directory.

Since you're looking to stream data from an existing cluster A to a new cluter B, you can skip straight to running sstableloader against the data on each node in cluster A.

More details on using sstableloader in this blog post.

初见终念 2024-12-03 04:20:27

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

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

You don't need to use sstable2json. If you have the space you can:

  1. get all the sstables from all of the nodes on the old ring
  2. put them all together on each of the new servers (renaming any which have the same names)
  3. run nodetool cleanup on each node in the new ring and they will throw away the data that doesn't belong to them.
爱你不解释 2024-12-03 04:20:27

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

You may do some steps as following:
1. Join 7 nodes into 5 nodes clusters and set up each node with its own ring token. At this time, you may have a cluster with 12 nodes.
2. Remove 5 nodes from new cluster in step 1.
3. Set up the token ring for each node after moving 5 nodes in your own.
4. Repairing the 7 nodes cluster.

心碎的声音 2024-12-03 04:20:27

我敢说,这并不像看上去那么大。

  1. 创建新环并根据 http://wiki.apache.org 适当地定义每个节点的令牌/cassandra/Operations#Token_selection
  2. 将数据导入新环。
  3. 环将根据您定义的令牌进行自身平衡 http://wiki.apache.org /cassandra/Operations#Import_.2BAC8_export

I would venture to say that this isn't as big of a problem as it may seem.

  1. Create your new ring and define the tokens for each node appropriately as per http://wiki.apache.org/cassandra/Operations#Token_selection
  2. Import data into the new ring.
  3. The ring will balance itself based on the tokens you have defined http://wiki.apache.org/cassandra/Operations#Import_.2BAC8_export
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文