Exchange Server Active Manager
Microsoft Exchange Server包括一个名为 Active Manager 的组件,用于管理高可用性平台,该平台包括数据库可用性组 (DAG) 和邮箱数据库副本。 活动管理器在所有邮箱服务器的 Microsoft Exchange 复制服务 (MSExchangeRepl.exe) 内运行。 在不是 DAG 成员的邮箱服务器上,有一个“活动管理器”角色:“独立活动管理器”。
在作为 DAG 成员的服务器上,具有两个活动管理器角色:“主要活动管理器”(PAM) 和“备用活动管理器”(SAM)。 PAM 为 DAG 中的活动管理器角色,用于确定哪些副本将是主动副本,哪些副本将是被动副本。 PAM 负责获取拓扑更改通知并对服务器故障作出反应。 担任 PAM 角色的 DAG 成员始终是当前拥有群集仲裁资源(默认群集组)的成员。 如果拥有群集仲裁资源的服务器出现故障,PAM 角色将自动移至获得群集仲裁资源所有权的仍正常工作的服务器。 此外,如果需要将托管群集仲裁资源的服务器脱机以便维护或升级,则必须先将 PAM 移至 DAG 中的其他服务器。 PAM 可控制数据库各副本之间的主动标志的所有移动。 (在任何指定时间只能有一个副本处于活动状态,并且可以装载或卸载该副本。) PAM 还在本地系统上执行 SAM 角色的功能, (检测本地数据库和本地信息存储) 故障。
SAM 提供有关哪个服务器将邮箱数据库的活动副本托管到 Exchange 的其他组件的信息,后者正在运行活动管理器客户端组件(例如,客户端访问或传输服务器)。 SAM 将检测本地数据库和本地信息存储的故障。 它通过请求 PAM 启动故障转移(如果复制了数据库)来对故障作出反应。 SAM 不会确定故障转移的目标,也不会更新数据库在 PAM 中的位置状态。 它将访问活动数据库副本位置状态,以便响应所收到的数据库活动副本查询。
注意
Exchange Server不是群集应用程序。 相反,它会对群集、组、群集网络(检测信号)、节点管理、群集注册表和一些控制代码功能使用 clusapi.dll 中实现的群集库功能。 此外,活动管理器还将当前邮箱数据库信息(例如,主动数据和被动数据以及装入数据)存储在群集数据库中(也被称为群集注册表)。 尽管该信息是直接存储在群集数据库中的,但任何其他组件无法直接访问该信息。
在 Exchange Server,Microsoft Exchange 复制服务定期监视所有已装载数据库的运行状况。 此外,它还会监视可扩展存储引擎 (ESE) 中的任何 I/O 错误或故障。 如果该服务检测到故障,它将通知活动管理器。 然后,活动管理器会确定应装入哪个数据库副本以及装入该数据库时需要执行的操作。 另外,活动管理器还会跟踪邮箱数据库的活动副本(基于该数据库的最后一个装入副本),并将跟踪结果信息提供给邮箱服务器上与客户端相连的客户端访问服务。
最佳复制选择
如果发生的某个故障阻止访问复制的邮箱数据库的活动副本,活动管理器将选择受影响数据库的最佳被动副本进行激活。 此过程在早期版本的 Exchange 中称为 BCS) (最佳副本选择,在 Exchange 2016 和 Exchange 2019 中,此过程称为 BCSS) (最佳副本和服务器选择。 一般过程按以下顺序进行:
托管可用性或活动管理器检测到故障,或管理员启动无目标切换。
PAM 运行 BCSS 内部算法。
出现名为 attempt copy last logs (ACLL) 的进程,该进程尝试在故障或切换之前托管主动数据库副本的服务器中复制所有缺失的日志文件。
完成 ACLL 进程之后,将托管数据库副本邮箱服务器的 AutoDatabaseMountDial 值与正激活数据库的复制查询长度进行比较。 此时:
缺少日志文件的数量等于或小于 AutoDatabaseMountDial 的值,在这种情况下,将执行步骤 5。
缺少日志文件的数量大于 AutoDatabaseMountDial 的值,在这种情况下,Active Manager 将尝试激活下一个最佳可用副本(如果有)。
PAM 将通过远程程序调用(RPC)发出安装请求给 Microsoft Exchange Information Store。 此时:
装入数据库并且提供给客户端。
不装入数据库,PAM 针对下一个最佳副本(如果存在)执行步骤 3 和 4。
在早期版本的 Exchange 中,BCS 进程将评估每个数据库副本的几个方面,以确定要激活的最佳副本。 包括:
复制队列长度
重播队列长度
数据库状态
内容索引状态
在Exchange Server中,Active Manager 会运行所有相同的 BCS 检查和阶段,但现在它还包括使用运行状况状态递减顺序的约束。 具体而言,BCSS 包括几个新的运行状况检查,这些检查是 Exchange Server 中内置托管可用性监视组件的一部分。 活动管理器执行了四个额外的检查(按执行顺序列出):
所有正常:检查托管受影响数据库副本的服务器,该副本的所有监视组件都处于正常状态。
最高为正常:检查托管受影响数据库副本的服务器,该副本的所有监视组件均处于正常状态。
全部优于源:检查托管受影响数据库副本的服务器,该数据库具有监视组件的状态比托管受影响副本的当前服务器要好。
与源相同:检查托管受影响数据库副本的服务器,该数据库具有与托管受影响副本的当前服务器相同的状态的监视组件。
如果通过监控组件触发的故障转移(例如,通过故障转移响应程序)调用 BCSS,将强制执行额外的强制限制,其中目标服务器的组件健康必须好于出现故障转移的服务器。 例如,如果 Outlook 网页版故障通过故障转移响应程序触发了故障转移,则 BCSS 必须选择一个 Outlook 网页版运行正常的服务器来托管受影响数据库的副本。
最佳副本选择过程
对于数据库故障(不是协议故障),活动管理器在开始最佳副本选择过程之初,首先创建可能作为激活候选对象的数据库副本的列表。 对于任何无法访问或以管理员角色阻止激活的数据库副本,在选择过程中,均忽略,不加以使用。 列表的顺序取决于 AutoDatabaseMountDial 的值:
如果 AutoDatabaseMountDial 配置了除托管数据库副本的所有服务器上的值以外的
Lossless
任何值,Active Manager 将使用复制队列长度作为主键对生成的列表进行排序。 该计算基于 LastLogInspected (从副本角度看),所以潜在副本列表副本按照 LastLogInspected 的最大值(即最小副本队列长度的副本)进行分类。 如果必要,活动管理器会对列表进行第二次分类,使用激活首选项的值作为辅助关键字,以打破那些两个或更多被动副本具有同样副本队列长度的等同情况。 具有最低激活首选项值得副本在列表中具有更高优先权。如果在托管数据库副本的任何服务器上为 AutoDatabaseMountDial 配置了 值
Lossless
,则 Active Manager 将使用激活首选项的值作为主键,按升序对结果列表进行排序。 此外,当管理员在执行无特定目标的无损服务器或数据库时,活动管理器也会用激活首选项的值作为主键按照升序对结果列表进行分类。
接下来,活动管理器会尝试查找列表上状态为"正常"、"DisconnectedAndHealthy"、"DisconnectedAndResynchronizing"或"SeedingSource"的邮箱数据库副本,然后使用十组条件按顺序评估列表上每个副本的激活可能性。 活动管理器确定是否存在满足第一组条件的激活候选对象:
具有状态为"正常"的内容索引。
具有少于 10 个日志文件的复制队列长度。
具有少于 50 个日志文件的重播队列长度。
如果没有一个数据库副本符合第一组条件,活动管理器将尝试查找符合第二组条件的数据库副本:
具有状态为"爬网"的内容索引。
具有少于 10 个日志文件的复制队列长度。
具有少于 50 个日志文件的重播队列长度。
如果没有一个数据库副本符合第二组条件,活动管理器将尝试查找符合第三组条件的数据库副本:
具有状态为"正常"的内容索引。
具有少于 50 个日志文件的重播队列长度。
如果没有一个数据库副本符合第三组条件,活动管理器将尝试查找符合第四组条件的数据库副本:
具有状态为"爬网"的内容索引。
具有少于 50 个日志文件的重播队列长度。
如果没有一个数据库副本符合第四组条件,活动管理器将尝试查找符合第五组条件的数据库副本:
- 具有少于 50 个日志文件的重播队列长度。
如果没有一个数据库副本符合第五组条件,活动管理器将尝试查找符合第六组条件的数据库副本:
具有状态为"正常"的内容索引。
具有少于 10 个日志文件的复制队列长度。
如果没有一个数据库副本符合第六组条件,活动管理器将尝试查找符合第七组条件的数据库副本:
具有状态为"爬网"的内容索引。
具有少于 10 个日志文件的复制队列长度。
如果没有一个数据库副本符合第七组条件,活动管理器将尝试查找符合第八组条件的数据库副本:
- 具有状态为"正常"的内容索引。
如果没有一个数据库副本符合以上所有八组条件,活动管理器将尝试查找符合第九组条件的数据库副本:
- 具有状态为"爬网"的内容索引。
如果没有一个数据库副本满足第九组条件,活动管理器将尝试激活状态为"正常"、"DisconnectedAndHealthy"、"DisconnectedAndResynchronizing"或"SeedingSource"(第十组条件)的任何数据库副本。 如果找不到满足第十组条件的任何数据库副本,将无法自动激活数据库副本。
在查找到满足一组或多组条件的一个或多个副本之后,ACLL 进程将源文件中的所有日志文件复制到潜在的新主动副本。 ACLL 进程完成后,PAM 会发出装入请求,此时会出现两种情况:装入数据库并提供给客户端,或者不装入数据库而 PAM 搜索下一个最佳副本(如果存在)。