我有一个相当低的并发应用程序,它对延迟敏感,而数据必须跨两个数据中心写入。
数据库将有四个物理主机用于冗余;主“A”数据中心中的主要和次要以及次要“B”数据中心中的一对热备用主机。称他们为AP,AS,BP,BS。
我们希望在主数据中心的AP和AS之间实现自动故障转移,但如果我们必须交换数据中心,则需要手动升级辅助数据中心中的主机。
我们有额外的硬件在每个数据中心运行仲裁节点,以确保主选举基于给定数据中心内的三台主机。 B数据中心的仲裁员将处于脱机状态。由于我们不希望在没有人工干预的情况下升级B侧主机,我们可以将其优先级设置为零。
我们希望从A数据中心运行的Java客户端实现安全写入,这些客户端被确认为四个节点中的三个:AP,AS和BP。
香草四节点设置好吗?如果我们松开A数据中心,服务器BS和BP可能都不会达到相同的读数。如果我们打开B侧仲裁员,并且增加B侧的优先级以优先选择BP作为主,我们可以期望BS和BP能够与最新的读取数据进行对比吗?
或者要将数据输入AP,AS和BP,我们应该设置一个AP,AS和BP的三个数据节点副本集,客户端将使用“w = 3”错误检查写入,并以某种方式将BS链接到后面BP? [编辑:当节点被拆除进行维护或者与B侧的连接丢失时,不指定w = 3是危险的。]
答案 0 :(得分:1)
在副本集中,通过选举选择主要副本。这次选举遵循某些规则,节点有一定的要求,以便“可选”。
其中一项要求是必须最新才能当选为主要成员。
在您的情况下,这意味着如果BP有一些BS没有的写入,那么BS就不能被选为主要的。英国石油公司必须当选为主要公司,而BS将与之同步(并最终赶上并写下来)。
实际上,由于您将手动进行故障转移,因此在BS没有所有写入BP的情况下最终无法结束,因为当您登录并获得新的仲裁设置时BS将从BP获得它没有的所有写入(因为辅助服务器不必与主服务器同步,它可以从其前面的另一个辅助服务器同步)。