如何处理多数据中心 Cassandra 集群中的数据中心中断

How to handle a datacenter outage in a mutil-datacenter Cassandra Cluster

我们的应用程序 运行 在具有两个数据中心的六个节点的 Cassandra 集群中。

集群信息:

Cassandra 版本:2.0.3

Snitch : GossipingPropertyFileSnith

分区程序:Murmur3分区程序

每个dc有3个节点。

每个 dc 的复制因子都是 2。

每个节点使用num_vnodes = 256。(均为虚拟节点)

DC1是live dc(local dc),为当前用户提供数据。 DC2 只是一个备份 dc(远程 dc),不向用户提供任何数据。由于我们计划仅在 DC1 进行维护操作,因此我们将在维护期间制作远程 dc DC2 来为用户提供服务。

在停电期间,整个 DC1 可能会停机几天。维护完成后,我们将再次让 DC1 为数据提供服务,让 DC2 进行备份。所以我们需要在中断后 DC1 中有最新的数据。我们的应用程序将在中断期间处理大量数据(几 GB)。

在关闭DC1之前,

1) DC1 节点需要注意哪些事项(如提交日志设置等)

2) 在 DC2 节点中需要注意哪些事情(如提示切换设置等)

停电期间,

3)当整个DC1宕机时,hints会写到哪里(DC2的任意一个节点?),如何处理这些hints?

DC1启动后,

4) 在中断期间,复制可能会在 DC1 节点中失败。我们如何make/repair DC1 与最新数据有效地使用 DC2?

making DC1 down

在关闭 DC1 之前,请确保您已经 运行 使用 nodetool repair 进行了全面修复。

这确保所有数据都从 DC1 传播到 DC2。

然后从DC1开始一个一个的杀节点。按照给出的步骤 here

确保您的 DC2 本身能够满足您的写入一致性,否则您将丢失所有数据。

如果您使用一致性级别 ANY 进行写入,那么它将保证您的写入是持久的。

During the outage

如果您使用默认的 cassnadra 设置,则提示将仅存储 3 小时。增加这个值会给你的机器带来不必要的开销,我不建议你保留 5 天的提示。

您可以使用 cassandra.yaml 文件中的 max_hint_window_in_ms 属性 配置提示时间间隔。

我不确定您是否应该允许 cassandra 为 DC1 编写提示。

After DC1 is up

运行 再次使用 nodetool repair 进行全面修复,以跨数据中心复制数据。