将数据从单节点 cassandra 集群迁移到另一个单节点 cassandra 集群
Posted
技术标签:
【中文标题】将数据从单节点 cassandra 集群迁移到另一个单节点 cassandra 集群【英文标题】:Migrating data from a single node cassandra cluster to another single node cassandra cluster 【发布时间】:2019-10-16 05:14:11 【问题描述】:我有一个单节点 Cassandra 集群,上面有大约 44GB 的数据(/var/lib/cassandra/data/my_keyspace)。当前存储为 1 tb,我需要将所有数据迁移到另一个具有相同设置(单节点集群)的 VM。我的数据节点每秒都有数据被推送到它,所以我无法承受任何停机时间(一些传感器正在推送时间序列数据)。
Keyspace :- CREATE KEYSPACE my_keysopace WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' AND durable_writes = true;
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 43.4 GiB 256 100.0% e0ae36db-f639-430c-91ad-6af3ffb6f906 rack1
经过一番研究,我决定最好将新节点添加到现有集群,然后让旧节点流式传输所有数据,并在流式传输完成后停用旧节点。
来源:-https://docs.datastax.com/en/archived/cassandra/2.0/cassandra/operations/ops_add_node_to_cluster_t.html
-
将旧节点配置为新节点的种子节点
添加新节点节点到环(auto_bootstrap = true)
一旦两个节点的状态都是 UN,在旧节点上运行 nodetool cleanup
停用旧节点
我唯一担心的是我会面临任何数据丢失/这种方法是否合适? 如果我在这里遗漏任何东西,请告诉我
谢谢
【问题讨论】:
【参考方案1】:首先,免责声明,使用 C* 的单个节点使分布式数据库的目的无效。最小集群大小往往是 3,因此一些节点可以在不停机的情况下离线(我相信您之前已经看到过这个警告)。现在,让我们讨论一下这个过程。
将旧节点配置为新节点的种子节点
是的。
1.5。 (可能缺少步骤)您缺少的步骤是需要验证查询的一致性级别。我看到您正在使用 replication_factor
1 用于所有正在使用的键空间,因此请确保您使用 CONSISTENCY_LEVEL 的 ONE 进行查询。
将新节点节点添加到环中(auto_bootstrap = true)
听起来不错。确保您已经配置了各种端口/listen_address 等。
一旦两个节点的状态都是 UN,
到达联合国后,请仔细检查客户是否发现任何一致性错误。
3.5。在旧节点上运行 nodetool cleanup
3.5。 (冗余步骤)您不需要运行nodetool cleanup
。您不会关心退役节点的剩余数据,因为所有数据都将移动到替换它的新节点。
停用旧节点
是的。
-
(缺少步骤)您必须修改新节点,以便在停用旧节点后将其自身视为种子,否则它将无法重新启动。
【讨论】:
太棒了,感谢您的见解。为了实现缺少的步骤,我相信我需要在新节点 cassandra.yaml 文件中提及旧节点和新节点的 IP 地址。是这样吗? @DarkAngel 我的建议是彻底进行研究。您需要做很多事情来确保不要阻止在同一主机上运行的 2 个节点。在实时集群上进行实验和测试之前。设置(从我的头顶开始)是:需要更改 JMX 端口,以便两个 Cassandra 节点不会相互阻塞(cassandra-env.sh),listen_address 也是。也是本机请求端口(默认为 9042)。 This answer is related以上是关于将数据从单节点 cassandra 集群迁移到另一个单节点 cassandra 集群的主要内容,如果未能解决你的问题,请参考以下文章
ES 7.6.2集群迁移(从一套ES集群迁移数据到另一套集群)