Erick Ramirez Asked: 2022-09-06 20:44:22 +0800 CST2022-09-06 20:44:22 +0800 CST 2022-09-06 20:44:22 +0800 CST 如何将 Cassandra 快照还原到具有相同配置的另一个集群? 772 这是想要将数据从一个集群迁移到另一个集群的 Cassandra 操作员的常见问题。 将 Cassandra 集群的快照还原到另一个具有相同配置的集群的过程是什么? cassandra 1 个回答 Voted Best Answer Erick Ramirez 2022-09-06T20:44:22+08:002022-09-06T20:44:22+08:00 将快照恢复到另一个集群或“迁移”数据也称为数据克隆。目标是将应用程序数据复制(克隆)到另一个集群,通常用于测试或开发目的。 定义 在以下情况下,两个集群(即源和目标)被认为具有相同的配置: 集群拓扑是相同的 - 相同数量的 DC,每个 DC 中相同数量的节点 令牌分配相同 - 为源集群中的节点分配的令牌与为目标集群中的节点分配的令牌完全相同 如果上述条件为真,请使用“刷新方法”,将源集群中节点的 SSTables 复制到目标集群中的相应节点,然后通过运行“加载” nodetool refresh。 示例拓扑 以下是在 2 个 DC 中的每个具有 3 个节点的源集群和目标集群的示例: 资源 目的地 阿尔法DC 查理DC nodeA:令牌A1,令牌A2,令牌A3 nodeU:令牌A1,令牌A2,令牌A3 nodeB:令牌B1,令牌B2,令牌B3 nodeV:令牌B1,令牌B2,令牌B3 nodeC:令牌C1,令牌C2,令牌C3 nodeW:令牌C1,令牌C2,令牌C3 BetaDC 三角洲DC nodeD:令牌D1,令牌D2,令牌D3 nodeX:令牌D1,令牌D2,令牌D3 nodeE:令牌E1,令牌E2,令牌E3 nodeY:令牌E1,令牌E2,令牌E3 nodeF:令牌F1,令牌F2,令牌F3 nodeZ:令牌F1,令牌F2,令牌F3 在此示例中,nodeA(来自源集群)和nodeU(在目标集群上)分配了相同的令牌,nodeB并且nodeV具有相同的令牌,依此类推。 “刷新”方法 按照此过程将应用程序数据从源集群克隆到示例中的目标集群。 重要提示:在目标集群上创建应用程序密钥空间,并使用与源集群相同的复制设置。例如,如果源键空间配置为复制因子 3,那么它也需要RF=3在目标集群中具有。 警告:不要克隆系统键空间/表,因为其中包含的数据特定于它们所属的节点/集群。仅克隆应用程序数据。 第1 步- 对于第一个表,在目标集群上创建模式。 STEP 2 - 拍摄第一个表的快照nodeA并将其复制到上对应的表目录nodeU。请注意,表目录的后缀是 UUID 时间戳,并且在集群之间会有所不同,因为它们基于表的创建时间。 第 3步- 在 上nodeU,强制 Cassandra 从磁盘读取并加载新的 SSTables: $ nodetool refresh -- ks_name table_name 第 4步 - 检查节点上的日志以验证新的 SSTables 是否已打开。 第 5步 - 在下一张表上重复上述步骤并继续重复,直到所有表都已迁移。 第 6nodeB步 - 通过将快照从 迁移到重复上述步骤nodeV。不断重复,直到第二个集群中的所有节点都恢复了快照。 要知道的事情 这是一个在线程序。它不需要关闭目标节点。 此过程仅适用于具有相同拓扑和令牌分配的集群。 它不适用于不同的集群,因为源 SSTables 中的分区不一定属于目标节点拥有的令牌范围。 无需使用 OpsCenter 克隆或sstableloader用于此方案。 有关将数据克隆到新集群的说明,请参阅如何将表中的数据迁移到新的 Cassandra 集群?.
将快照恢复到另一个集群或“迁移”数据也称为数据克隆。目标是将应用程序数据复制(克隆)到另一个集群,通常用于测试或开发目的。
定义
在以下情况下,两个集群(即源和目标)被认为具有相同的配置:
如果上述条件为真,请使用“刷新方法”,将源集群中节点的 SSTables 复制到目标集群中的相应节点,然后通过运行“加载”
nodetool refresh
。示例拓扑
以下是在 2 个 DC 中的每个具有 3 个节点的源集群和目标集群的示例:
nodeA
:令牌A1,令牌A2,令牌A3nodeU
:令牌A1,令牌A2,令牌A3nodeB
:令牌B1,令牌B2,令牌B3nodeV
:令牌B1,令牌B2,令牌B3nodeC
:令牌C1,令牌C2,令牌C3nodeW
:令牌C1,令牌C2,令牌C3nodeD
:令牌D1,令牌D2,令牌D3nodeX
:令牌D1,令牌D2,令牌D3nodeE
:令牌E1,令牌E2,令牌E3nodeY
:令牌E1,令牌E2,令牌E3nodeF
:令牌F1,令牌F2,令牌F3nodeZ
:令牌F1,令牌F2,令牌F3在此示例中,
nodeA
(来自源集群)和nodeU
(在目标集群上)分配了相同的令牌,nodeB
并且nodeV
具有相同的令牌,依此类推。“刷新”方法
按照此过程将应用程序数据从源集群克隆到示例中的目标集群。
重要提示:在目标集群上创建应用程序密钥空间,并使用与源集群相同的复制设置。例如,如果源键空间配置为复制因子 3,那么它也需要
RF=3
在目标集群中具有。警告:不要克隆系统键空间/表,因为其中包含的数据特定于它们所属的节点/集群。仅克隆应用程序数据。
第1 步- 对于第一个表,在目标集群上创建模式。
STEP 2 - 拍摄第一个表的快照
nodeA
并将其复制到上对应的表目录nodeU
。请注意,表目录的后缀是 UUID 时间戳,并且在集群之间会有所不同,因为它们基于表的创建时间。第 3步- 在 上
nodeU
,强制 Cassandra 从磁盘读取并加载新的 SSTables:第 4步 - 检查节点上的日志以验证新的 SSTables 是否已打开。
第 5步 - 在下一张表上重复上述步骤并继续重复,直到所有表都已迁移。
第 6
nodeB
步 - 通过将快照从 迁移到重复上述步骤nodeV
。不断重复,直到第二个集群中的所有节点都恢复了快照。要知道的事情
sstableloader
用于此方案。有关将数据克隆到新集群的说明,请参阅如何将表中的数据迁移到新的 Cassandra 集群?.