实现零停机Cassandra/DataStax迁移

sme*_*eeb 6 data-migration downtime cassandra datastax

我有一个Cassandra集群(3个节点,所有节点都部署到AWS)我试图迁移到DataStax集群.现在是时候停止自己管理这些节点了.

我有多个生产者和消费者全天都在读取/写入我的Cassandra集群的数据.我没有选择将app/service/proxy放在我的Cassandra集群前面,然后只是干净地翻转开关,以便所有读/写进出我的Cassandra,再到DataStax.因此,没有一种方法可以一次迁移一个表.我还试图为数据的所有生产者/消费者实现零(或接近零)停机时间.一个硬性要求:迁移不能有损.没有丢失的数据!

我认为这里最好的策略是一个四步过程:

  1. 不知何故,将DataStax配置为我的Cassandra集群的副本,有效地创建到DataStax的流复制
  2. 一旦DataStax完全"赶上"我的Cassandra中的其他节点,让生产者写入我当前的Cassandra集群,但将消费者/读者切换到DataStax(即,重新配置它们以连接到DataStax,然后重新启动它们).不是零停机时间,但我可以忍受简单的重启.(同样,零停机解决方案是首选.)
  3. 将生产者切换到DataStax.同样,只有接近零停机时间,因为这涉及将生产者重新配置为指向DataStax,然后需要重新启动以获取新配置.零停机解决方案将是首选.
  4. 一旦来自"旧"Cassandra集群的复制流量消耗为零,我们现在就没有"非"新信息,我的非DataStax节点需要写入DataStax.用火来杀死那些节点.

这个解决方案是我能提出的最微创,最接近零停机的解决方案,但假设了以下几点:

  • 也许不可能将DataStax视为可以复制到的额外节点(是/否?)
  • 也许Cassandra和/或DataStax有一些我不知道的神奇特性/功能,可以比这个解决方案更好地处理迁移; 或者可能有第三方(理想的开源)工具可以更好地处理这个问题
  • 我不知道如何监视从"旧"Cassandra节点到DataStax的复制"流量".在我可以安全地关闭+杀死旧节点之前需要知道如何做到这一点(再次,不能丢失数据).

我想我想知道这个策略是否:(1)可行/可行,(2)最佳; 如果Cassandra/DataStax生态系统中有任何功能/工具,我可以利用它来做得更好(更快,零停机时间).

小智 4

您概述的四个步骤绝对是一个可行的选择。还有进行简单的滚动二进制安装的途径: https://docs.datastax.com/en/latest-upgrade/upgrade/datastax_enterprise/upgrdCstarToDSE.html

\n\n

我将根据您上面提供的步骤进行发言。如果您对滚动二进制安装感到好奇,我们当然也可以讨论这个问题。

\n\n

注意文档链接特定于 Cassandra 3.0 (DataStax 5.0) - 确保文档版本与您的 Cassandra 版本匹配。

\n\n

如果 DataStax 中当前主要 Cassandra 版本 == 当前主要 Cassandra 版本,您应该能够将“DataStax”节点添加为当前 Cassandra 环境所属的同一集群中的新 DC:http://docs。 datastax.com/en/cassandra/3.0/cassandra/operations/opsAddDCToCluster.html - 这会将现有数据从现有 Cassandra DC 引入到 DataStax DC。

\n\n

如果您的 Cassandra 版本不匹配(当前的 Cassandra 比 DataStax Cassandra 旧/新),那么您可能需要通过https://academy.datastax.com/slack联系 DataStax,因为该过程将更具体地针对您的情况。环境,并且可能差异很大。

\n\n

正如文档中所述,您需要运行

\n\n
ALTER KEYSPACE "your-keyspace" WITH REPLICATION =\n{\'class\xe2\x80\x99: \'NetworkTopologyStrategy\', \'OldCassandraDC\':3, \'DataStaxDC\':3};\n
Run Code Online (Sandbox Code Playgroud)\n\n

(显然将 DC 名称和复制因子更改为您的规格)

\n\n

这将确保来自生产者的新数据将复制到新的 DataStax 节点。

\n\n

nodetool rebuild -- name_of_existing_data_center然后,您可以从 DataStax 节点运行,以从现有 Cassandra 节点传输数据。根据数据量的不同,这可能会有点耗时,但这是最简单、最省力的方法。

\n\n

然后,您需要在停用旧 Cassandra DC 之前一一更新生产者/消费者中的接触点。

\n\n

根据我的经验,有几点建议:

\n\n
    \n
  • 在启动这些节点之前,请确保您的 DataStax 节点正在cassandra.yaml 中使用GosspingPropertyFileSnitch 。
  • \n
  • 运行时nodetool rebuild,使用屏幕进行操作,以便您可以看到它何时完成(或错误),否则,您将必须通过使用nodetool netstats和检查流活动来监视进度。
  • \n
  • 启动并运行 OpsCenter,以监视重建期间 DataStax 群集中发生的情况。您可以密切关注流吞吐量、待处理的压缩以及其他 Cassandra 特定指标。
  • \n
  • 当需要停用旧 DC 时,请确保遵循以下步骤: http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsDecommissionDC.html
  • \n
\n\n

希望有帮助!

\n