每当为数据库镜像会话设置见证服务器时,都需要 法定人数 。 仲裁是在数据库镜像会话中,当两个或多个服务器实例互相连接时存在的一种关系。 通常,仲裁机制涉及三个互联的服务器实例。 设置见证节点时,需要法定人数以确保数据库可用。 仲裁专为具有自动故障转移的高安全模式而设计,可确保数据库一次只拥有一个合作伙伴。
如果某个特定的服务器实例与镜像会话断开连接,该实例将失去仲裁权。 如果没有服务器实例连接,会话失去仲裁权,数据库将变得不可用。 可能存在三种类型的法定人数:
全体法定人数包括两位合作伙伴和见证人。
见证合作伙伴仲裁团由见证服务器和任一伙伴组成。
伙伴间法定人数由两个合作伙伴组成。
下图显示了这些类型的仲裁。
只要当前主服务器获得仲裁权,该服务器就拥有主服务器角色并继续为数据库提供服务,除非数据库所有者执行手动切换。 如果主服务器失去仲裁一致,它将停止为数据库提供服务。 仅当主体数据库失去仲裁时,才会发生自动故障转移,这确保了它不再为数据库提供服务。
断开连接的服务器实例在会话中保存其最新角色。 通常,断开连接的服务器实例在重启并重新获得仲裁时重新连接到会话。
重要
仅当打算使用自动故障转移的高安全模式时,才应设置见证。 在高性能模式下,由于不需要见证,我们强烈建议将 WITNESS 属性设置为 OFF。 有关见证服务器对高性能模式的影响的信息,请参阅 数据库镜像操作模式。
High-Safety 模式会话中的仲裁
在高安全模式下,法定人数允许自动故障转移,即通过提供一个上下文,在该上下文中,具备法定人数的服务器实例决定哪个伙伴拥有主体角色。 如果主服务器具有仲裁权,则为数据库服务。 如果主体服务器在同步镜像服务器和见证服务器保留仲裁时丢失仲裁,则会自动发生故障转移。
高安全模式的仲裁方案如下所示:
由双方合作伙伴和见证人组成的完整仲裁。
通常,所有三个服务器实例都参与一个三方仲裁,称为完整仲裁。 在达到完整仲裁时,主体服务器和镜像服务器将继续履行各自的职责(除非发生手动故障转移)。
由见证服务器与任一合作伙伴组成的 见证到伙伴的仲裁法定人数。
如果合作伙伴之间的网络连接因其中一个合作伙伴丢失而丢失,则可能会发生以下情况:
镜像服务器丢失,主服务器和见证服务器保留法定人数。
在这种情况下,主体将其数据库设置为 DISCONNECTED,并运行处于 SUSPENDED 状态的镜像。 (这称为 公开运行,因为数据库当前未镜像。当镜像服务器重新加入会话时,服务器将重新获得仲裁作为镜像,并开始重新同步其数据库副本。
主体服务器丢失,见证服务器和镜像服务器保留仲裁。
在这种情况下,会自动发生故障转移。 有关详细信息,请参阅 数据库镜像操作模式。
所有服务器实例失去法定人数,但最终镜像与见证服务器重新连接。 在这种情况下,数据库将无法被使用。
极少数情况下,故障转移伙伴之间的网络连接会丢失,而两个合作伙伴仍与见证服务器保持连接。 在这种情况下,存在两个单独的见证到伙伴的法定人数,见证作为联络人。 见证通知镜像服务器主体服务器仍保持连接。 因此,不会发生自动故障转移。 相反,镜像服务器会保留镜像角色,并等待重新连接到主体。 如果重做队列此时包含日志记录,镜像服务器将继续前滚镜像数据库。 重新连接时,镜像服务器将重新同步镜像数据库。
由两个合作伙伴组成的 合作伙伴之间的法定人数 。
只要合作伙伴保留仲裁,数据库将继续处于 SYNCHRONIZED 状态,并且手动故障转移仍可能。 如果没有见证服务器,则无法进行自动故障转移。但是,当见证服务器重新获得仲裁时,会话将恢复常规操作,并且自动故障转移功能再次得到支持。
会话失去法定人数。
如果所有服务器实例彼此断开连接,则会话据说 已丢失仲裁。 当服务器实例相互重新连接时,它们会重新获得法定数量。
如果主体服务器与其他任一服务器实例重新连接,则数据库将变为可用。
如果主体服务器保持断开连接状态,但镜像和见证服务器相互重新连接,则无法进行自动故障转移,因为可能发生数据丢失。 因此,在主体服务器重新加入会话之前,数据库将保持不可用。
所有三个服务器实例重新连接后,会话恢复其常规操作,并重新获得完整仲裁。
重要
当会话具有合作伙伴之间的仲裁时,如果任何一方失去仲裁,则整个会话也会失去仲裁。 因此,如果预计见证将长时间断开连接,建议暂时将其从会话中移除。 删除见证服务器会消除对法定人数的要求。 然后,如果镜像服务器断开连接,主体服务器可以继续为数据库提供服务。 有关如何添加或删除见证的信息,请参阅 数据库镜像见证。
仲裁机制如何影响数据库可用性
下图示意了见证和合作伙伴如何合作,以确保在任何给定时间,只有一个合作伙伴拥有主要角色,且只有当前的主要服务器才能将其数据库联机。 这两种场景都以完全法定人数开始,担任主角色的是Partner_A,而担任镜像角色的是Partner_B 。
方案 1 显示了原始主体服务器(Partner_A)出现故障后,见证服务器和镜像服务器达成一致,认为主体服务器 Partner_A 不再可用,并达成法定人数。 然后, 镜像Partner_B 承担主体角色。 自动故障转移发生后,Partner_B使其数据库副本联机。 然后 Partner_B 关闭,数据库脱机。 后来,以前的主服务器Partner_A重新连接到见证服务器并重新获得仲裁。然而,在与见证服务器通信时,Partner_A得知它无法将自己的数据库副本联机,因为Partner_B现在拥有主导角色。 Partner_B重新加入会话时,它会使数据库重新联机。
在方案 2 中,见证服务器失去仲裁,而合作伙伴 Partner_A 和 Partner_B 互相保留仲裁,数据库仍保持在线。 然后,合作伙伴也失去了法定人数,数据库会脱机。 随后,主服务器Partner_A重新连接到见证服务器,从而重新获得仲裁。 证人确认 Partner_A 仍拥有主体角色,Partner_A 使数据库恢复上线。
另请参阅
数据库镜像运行模式
数据库镜像会话期间的角色切换 (SQL Server)
数据库镜像见证服务器
数据库镜像期间可能出现的故障
镜像状态 (SQL Server)