上一篇博客写了Exchange DAG数据中心的配置和切换,写的主要是实际操作的干货。如果要理解还是要对DAG的工作机制有一定的了解。下面是简单介绍DAG的工作方式。

DAG工作机制

     Exchange DAG调用的是Windows Server的Failover clusters。而Failover clusters使用的是仲裁机制,仲裁基于群集节点投票来判断Cluster Owener。仲裁采用的是一种对所有成员都共享的机制,群集中所有成员定期会去读取仲裁(QUORUM)中的文件,以此来判断此群集成员的状态是正常的。群集中每个成员均视为一个投票。

    Exchange DAG采用的是Majority Node Set [MNS](多数节点)模式。多数节点模式下,Failover Cluster需要使用群集成员之外的仲裁服务器的Quorum(仲裁)模式。仲裁服务器会给某一个群集成员投票,称为weighted vote,获得weighted vote的节点就拥有Cluster Owner权限。在多数节点模式下,要求50%的节点票据在线。如果N为节点数,那么要求N/2+1个节点必须处于活动状态。

例如:

1、 当DAG成员数量为4时,投票为:N/2+1=3,允许丢失的投票数为2(也就是最多可以同时有两个节点出现故障,其中一票为仲裁服务,所以只能运行丢失2个),当两个以上的节点出现故障时DAG群集将丢失仲裁,此时所有的数据库将处于卸载状态,需要管理员手动干预才能恢复正常。

2、 当DAG成员数量为5时,投票计算为:N/2+1=3,允许丢失的投票数为3(也就是最多可以同时有2个节点出现故障),当两个以上的节点出现故障时DAG群集将丢失仲裁,此时所有的数据库将处于卸载状态,需要管理员手动干预才能恢复正常。

DAG的DAC模式

数据中心激活协调 (DAC) 模式是数据库可用性组 (DAG) 的属性设置。DAC 模式默认处于禁用状态,应为具有两个或更多使用连续复制的成员的所有 DAG 启用该模式。不应为采用第三方复制模式的 DAG 启用 DAC 模式,除非第三方供应商指定这样做。

如果发生了影响 DAG 的灾难性故障(例如一个数据中心完全失败),则可使用 DAC 模式控制 DAG 的启动数据库装入行为。DAC 模式未启用且发生了影响 DAG 中多个服务器的故障时,DAG 将在大多数 DAG 成员故障恢复后重新启动并尝试装入数据库。在多数据中心配置中,此行为可能导致网络分区症状(当所有网络都发生故障时发生此情况),并且 DAG 成员无法收到彼此的检测信号。当数据中心之间的网络连接断开时,也会发生网络分区症状。始终要求大多数 DAG 成员(在 DAG 成员为偶数时使用 DAG 见证服务器)可用并处于交互状态,使 DAG 能够正常工作,这样即可防止网络分区症状。多数成员正在通信时,就可以说 DAG 拥有“仲裁”。

例如,请考虑一种情况,即第一个数据中心包含两个 DAG 成员和见证服务器,第二个数据中心包含两个其他 DAG 成员。如果第一个数据中心断电,并且您激活了第二个数据中心的 DAG(例如,通过激活第二个数据中心内的备用见证),则在第一个数据中心未与第二个数据中心联网即还原的情况下,DAG 中的活动数据库可能会现网络分区情况。

DAC 模式包含了数据中心激活协调协议 (DACP),以此防止出现网络分区。发生灾难性故障后,当 DAG 恢复时,即使 DAG 拥有仲裁,也不会自动装入数据库。相反,DACP 可用于确定 DAG 的当前状态,以及活动管理器是否应尝试装入数据库。

您可能将 DAC 模式视为用于装入数据库的应用程序级别仲裁。要了解 DACP 的用途以及工作原理,必须了解其旨在处理的主要情况。请考虑双数据中心的情况。假设主数据中心中电源完全中断。在这种情况下,所有服务器和 WAN 都停止运行,所以组织决定激活备用数据中心。在几乎所有这种恢复方案中,当主数据中心恢复通电时,WAN 连接通常不会立即恢复。这意味着主数据中心中的 DAG 成员将通电,但无法与已激活的备用数据中心的 DAG 成员通信。主数据中心应始终包含大部分 DAG 仲裁投票者,这意味着恢复通电后,即使备用数据中心的 DAG 成员未连接 WAN,主数据中心中的 DAG 成员也占大部分,因此拥有仲裁。拥有仲裁后,这些服务器可以装入其数据库,这又会导致与现已装入激活的备用数据中心的实际主动数据库有差异,所以这是个问题。创建 DACP 就是为了解决此问题。活动管理器在内存中存储一个数位(0 或 1),该数位告诉 DAG 是否允许装入服务器上以活动状态分配的本地数据库。当 DAG 正以 DAC 模式运行时(可能是任何具有三个或更多个成员的 DAG),活动管理器每次启动时,该数位都被设置为 0,表示不允许装入数据库。因为 DAG 处于 DAC 模式,所以服务器必须尝试与其知道的 DAG 的其他所有成员通信,以便获取另一个 DAG 成员,告诉它是否可以装入以活动状态分配给它的本地数据库。答案将以 DAG 中其他活动管理器的数位设置形式提供。如果另一个服务器将其数位设置为 1 进行响应,这意味着服务器允许装入数据库,这样服务器启动时将其数位设置为 1,并装入其数据库。

但是当主数据中心恢复供电时(这时服务器恢复,但 WAN 连接尚未恢复),主数据中心内所有 DAG 成员的 DACP 位值将为 0;因此开始在已恢复的主数据中心内备份的服务器都不会装入数据库,因为它们都无法与 DACP 位值为 1 的 DAG 成员通信。