我有一个 Cassandra 集群(3 个节点,所有节点都部署到 AWS),我正在尝试迁移到 DataStax 集群。现在是时候停止自己管理这些节点了。
我有多个生产者和消费者整天读/写数据到我的 Cassandra 集群。我没有将应用程序/服务/代理放在我的 Cassandra 集群前面的选项,然后只是干净地翻转开关,以便所有读/写都去/来自我的 Cassandra,转到 DataStax。因此,没有一种干净的方法可以一次迁移一个表。我还试图为数据的所有生产者/消费者实现零(或接近零)停机时间。一个硬性要求:迁移不能是有损的。没有丢失的数据!
我认为这里最好的策略是一个四步过程:
- 不知何故,将 DataStax 配置为我的 Cassandra 集群的副本,有效地创建到 DataStax 的流复制
- 一旦 DataStax 完全“赶上”我的 Cassandra 中的其他节点,让生产者继续写入我当前的 Cassandra 集群,但将消费者/读者切换到 DataStax(也就是说,重新配置它们以连接到 DataStax,然后重新启动它们)。不是零停机时间,但我可能可以接受简单的重启。(同样,零停机解决方案是非常受欢迎的。)
- 将生产者切换到 DataStax。同样,停机时间几乎为零,因为这涉及重新配置生产者以指向 DataStax,然后需要重新启动以获取新配置。零停机解决方案将是首选。
- 一旦来自“旧” Cassandra 集群的复制流量减少到零,我们现在就没有我的非 DataStax 节点需要写入 DataStax 的“新”信息了。用火杀死那些节点。
这个解决方案是我能想到的最微创、最接近零停机时间的解决方案,但假设有以下几点:
- 也许不可能将 DataStax 视为可以复制到的额外节点(是/否?)
- 也许 Cassandra 和/或 DataStax 有一些我不知道的神奇特性/功能,它们可以比这个解决方案更好地处理迁移;或者也许有可以更好地处理这个问题的第 3 方(理想情况下是开源的)工具
- 我不知道如何监控从“旧”Cassandra 节点到 DataStax 的复制“流量”。在我可以安全地关闭+杀死旧节点之前需要知道如何做到这一点(同样,不能丢失数据)。
我想我想知道这个策略是否:(1)可行/可行,以及(2)最优;如果 Cassandra/DataStax 生态系统中有任何功能/工具,我可以利用这些功能/工具来使其变得更好(更快且零停机时间)。