0

我有一个相当低的并发应用程序,它对延迟敏感,其中数据必须跨两个数据中心写入。

数据库将有四个物理主机以实现冗余;主“A”数据中心中的主备主机和辅助“B”数据中心中的一对热备用主机。称他们为 AP、AS、BP、BS。

我们希望主数据中心的 AP 和 AS 之间实现自动故障转移,但如果我们必须交换数据中心,则需要手动升级辅助数据中心的主机。

我们有额外的硬件在每个数据中心运行一个仲裁节点,以确保主选举基于给定数据中心内的三个主机。B数据中心的仲裁员将离线。由于我们不希望在没有人工干预的情况下提升 B 端主机,我们可以将它们的优先级设置为零。

我们希望从运行在 A 数据中心的 Java 客户端实现安全写入,这些客户端被确认位于四个节点中的三个节点上:AP、AS 和 BP。

香草四节点设置好吗?如果我们失去 A 数据中心,服务器 BS 和 BP 可能不会都达到相同的读取。如果我们打开 B 方仲裁器,并增加 B 方的优先级以优先选择 BP 作为 master,我们可以期望 BS 和 BP 提供最新的读取吗?

或者为了将数据输入 AP、AS 和 BP,我们是否应该设置一个由 AP、AS 和 BP 组成的三个数据节点副本集,客户端将通过“w=3”错误检查写入该副本集,并以某种方式将 BS 从 BP 后面链接起来?[编辑:当节点被删除以进行维护或与 B 端的连接丢失时,不指定 w=3 是危险的。]

4

1 回答 1

1

在副本集中,主节点是通过选举来选择的。该选举遵循某些规则,节点有某些要求,以便“可选”。

其中一项要求是它们必须是最新的才能被选为主要成员。

在您的情况下,这意味着如果 BP 有一些 BS 没有的写入,那么 BS 不能被选为主要。BP 必须被选为主要节点,并且 BS 将同步它(最终将赶上并获得该写入)。

实际上,由于您将手动进行故障转移,因此实际上不可能最终导致 BS 没有 BP 的所有写入权限,因为当您登录并设置新的仲裁器时,BS 将获得它没有的所有来自 BP 的写入(因为辅助节点不必与主节点同步,它可以与在它前面的另一个辅助节点同步)。

于 2013-05-19T00:28:26.303 回答