OAB(offline address book) 历史 脱机通讯簿(可称为 OAB)很长时间以来一直是 Exchange 基础架构中的关键组件。OAB 由 Microsoft Outlook 客户端在脱机时在缓存 Exchange 模式下用于通讯簿查找。OAB 还对减轻 Exchange 服务器上的工作负载起着重要作用,因为缓存模式 Outlook 客户端将始终先查询本地 OAB。 OAB 已随着 Exchange 版本发生了演变。OAB 体系结构的最近一次重大革新是在 Exchange Server 2007 中,我们在其中引入了 OAB 的 Web 分发,以及 CAS 服务器角色(主要负责分发 OAB)。但 OAB 生成过程本身并未发生太大变化。 但现在情况已发生变化。 随着 Exchange Server 2013 中引入的服务器角色体系结构的变化,我们还更改了 OAB 的生成方式和分发给客户端的方式。让我们通过将 Exchange 2013 中的新 OAB 与其先前版本相比较来探索它吧。
OAB 生成中的更改 哪个服务器将生成 OAB? 在以前的所有 Exchange 版本中,OAB 生成由 Server 属性绑定到特定 Exchange 服务器。安装第一台 Exchange 邮箱服务器时,安装程序会将其指定为 OAB 生成服务器。您可根据需要创建新的 OAB。创建新的 OAB 时,必须指定 OAB 生成服务器。 Exchange Server 2010 中的 OAB:
此方法的缺点在于只为 OAB 生成配置了一台服务器,它是单点故障。如果此服务器长期不可用,则会影响 OAB 生成。 在 Exchange 2013 中,OAB 由托管特殊类型的仲裁邮箱(称为组织邮箱)的每个 Exchange 2013 邮箱服务器生成。OAB 生成不再由 Server 参数绑定。 Exchange Server 2013 中的 OAB:
从特定服务器取消绑定 OAB 允许同一 OAB 由多个邮箱服务器生成。这一新的体系结构可在 OAB 生成中提供更好的复原能力。 哪个组件将生成 OAB? Microsoft Exchange 系统助理服务是负责以前 Exchange 版本中的 OAB 生成的骨干。OAB 生成是计划的过程,即,OAB 生成将于在 OAB 属性上配置的计划时间启动,无论服务器上的工作负载如何。 在 Exchange 2013 中,OABGeneratorAssistant(在 Microsoft Exchange 邮箱助理服务下运行的邮箱助理)会生成OAB。与多数其他邮箱助理一样,OABGEnerationAssistant 是一个限制过程 – 它根据服务器上的工作负载运行或暂停。 OAB 文件存储在什么位置? 在以前的 Exchange 版本中,邮箱服务器生成的 OAB 位于 %ExchangeInstallPath%\ExchangeOAB 文件夹中。该文件夹是共享的,因此 CAS 可检索 OAB 文件,以便分发到 Outlook 客户端。 在 Exchange 2013 中,生成的 OAB 文件先存储在组织邮箱中,稍后会复制到%ExchangeInstallPath%\ClientAccess\OAB\ 文件夹。 OAB 分发中的变化 Exchange 2007 和 2010 支持两种 OAB 分发方法:Web 分发和公用文件夹分发。Exchange 2013 只支持 Web 分发方法,所以让我们探索 Web 分发方法中的变化吧。 Exchange 2007/2010 CAS 提取在各自邮箱服务器上生成的 OAB 文件,并在本地存储这些文件。CAS 角色上的Microsoft Exchange 文件分发服务执行提取 OAB 文件的任务。 下面是从客户端进行 OAB 下载的流程: 1. Outlook 从自动发现接收 OAB URL 并到达 CAS 服务器。 2. CAS 对用户进行身份验证,并从本地磁盘提供 OAB 文件。 此方法的一些缺点: 1. 如果 CAS 本地没有 OAB 文件,则 OAB下载将失败。 2. 如果 CAS 上的文件分发服务运行不正常,则客户端会收到旧 OAB 文件,或者换句话说,不会收到更新。 在 Exchange 2013 中,OAB 文件未本地存储在 CAS 上。CAS 2013 将所有 OAB 下载请求代理到相关的 Exchange 2013 邮箱服务器。体系结构中进行此更改后,会从 CAS 角色中移除 Microsoft Exchange 文件分发服务。 在 Exchange 2013 中,下面是 OAB 下载的流程: 1. Outlook 从自动发现接收 OAB URL,并通过 OAB URL 到达指定的 CAS 2013。 CAS 服务器执行以下操作: 1. 对 OAB 执行初始身份验证。 2. 查询 Active Directory 并确定离请求用户最近的组织邮箱。 3. 再次查询 Active Directory,以确定托管组织邮箱的邮箱数据库。 4. 查询活动管理器,确定其上的邮箱数据库处于活动状态(已装载)的邮箱服务器。 5. 将请求代理到步骤 4 中标识的邮箱服务器。 6. 检索 OAB 文件并将它们传递到客户端。 此新的工作流克服了旧 OAB 下载工作流的缺点。 组织邮箱 组织邮箱是随 Exchange 2013 引入的新类型的仲裁邮箱。具有 OrganizationCapabilityOABGen 持续功能的仲裁邮箱称为组织邮箱。它在 OAB 生成、存储和分发中发挥着至关重要的作用。 托管组织邮箱的每个 Exchange Server 2013 邮箱角色都将生成环境中定义的所有 Exchange 2013 OAB。OAB 先在组织邮箱中生成,稍后复制到磁盘。 使用以下命令可标识组织邮箱:
示例:
将 OAB 文件存储在组织邮箱中会使 OAB 文件的复原能力更强。 将内容结合起来:真实情形 以下情形将我们目前为止了解到的关键点结合在一起: 1. MBX1 和 MBX2 是 Exchange 2013 邮箱服务器,并且是 DAG的成员。CAS1 是一个 Exchange 2013 CAS。 2. 组织邮箱位于邮箱数据库 DB1 上。DB1 在 MBX1 和 MBX2 上具有副本。 3. DB1 当前在 MBX1 上处于活动状态。 4. MBX1 上的 Microsoft Exchange 邮箱助理服务将生成 OAB。 5. OAB 将先在组织邮箱中生成,稍后复制到 MBX1 的磁盘。此时,MBX2 在 OAB 生成中不发挥任何作用。 6. Outlook 客户端尝试下载 OAB,并通过 OAB URL 到达 CAS1。 7. CAS1 查询活动管理器,它发现托管组织邮箱的数据库 (DB1) 在 MBX1 上处于活动状态。 8. CAS1 将 OAB 下载请求代理到 MBX1,并将文件提供回客户端。 9. 此时,MBX1 由于电源故障不可用,DB1 在服务器 MBX2 上激活。 10. CAS1 收到 OAB 下载的另一请求,它再次查询活动管理器,这一次将请求代理到 MBX2,因为 DB1 现在于 MBX2 上处于活动状态。 11. MBX2 将组织邮箱中存在的 OAB 文件提取到磁盘,以确保向客户端提供最新文件 12. MBX1 再次联机,但 DB1 在 MBX2 上仍处于活动状态。 13. 在下一 OAB 生成工作周期,MBX2 上的 Microsoft Exchange 邮箱助理服务将生成 OAB。 |
管理OAB
由于体系结构发生更改,Exchange2013 中的 OAB 管理有所不同。此外,新的 Exchange管理中心目前没有用于管理 OAB 的选项。这意味着,此时您将需要使用Exchange 命令行管理程序完成 OAB 相关任务。
本文将介绍 OAB 管理中的常见任务,并提供两个可帮助更好地了解这些任务的现实生活方案。
注意:如果您位于多林 Active Directory 域环境中,请确保Exchange 命令行管理程序会话启用了ViewEntireForest,本文中的部分命令将不会返回任何输出。
用于启用ViewEntireForest 的命令:
1
Set-ADServerSettings -ViewEntireForest $true
创建新的OAB
在Exchange 2013 中创建新的 OAB 不再需要使用 -Server 参数。若要创建新的OAB,您应仅指定所需的地址列表。
以下示例创建一个名为“GlobalAddress List FAB”的 OAB 地址列表。
1
New-OfflineAddressBook -Name OAB-FAB -AddressLists "GlobalAddress List FAB"
标识OAB 生成服务器
ExchangeServer 2013 中的仲裁邮箱分配有可用于定义仲裁邮箱的用途/功能的特定的“持久化功能”。
带有持久化功能“OrganizationCapabilityOABGen”的仲裁邮箱负责生成OAB。我们将在整篇文章中将此邮箱称为“组织邮箱”。
承载组织邮箱的Exchange Server 2013 邮箱服务器将生成在环境中定义的所有 OAB。
对于非DAG 环境,请使用以下命令标识 OAB 生成服务器:
1
Get-Mailbox -Arbitration | where {$_.PersistedCapabilities -like "*oab*"}| ftname,servername
对于DAG 环境,标识 OAB 生成服务器的过程分为两步。
第 1 步:使用OAB Gen 功能标识承载组织邮箱的邮箱数据库。
使用以下命令列出带有持久化功能OABGen 的仲裁邮箱以及承载此邮箱的数据库:
1
Get-Mailbox -Arbitration | where {$_.PersistedCapabilities -like "*oab*"}| ftname,database
第 2 步:标识装载有承载组织邮箱的数据库的邮箱服务器
使用以下命令标识邮箱数据库的活动副本:
1
Get-MailboxDatabaseCopyStatus db1
其中的数据库状态为“已装载”的服务器就是当前的OAB 生成服务器。
更改OAB 生成服务器
更改OAB 生成服务器的方法有两种。
移动邮箱
将组织邮箱移至打算指定为OAB 生成服务器的服务器上的邮箱数据库。
示例:
DB1是服务器 Exch1 上的一个副本数据库,并承载组织邮箱。DB2是 Exch2 上的邮箱数据库。
可使用以下命令将组织邮箱移至DB2 并使 Exch2 成为 OAB 生成服务器。
1
Get-Mailbox -Arbitration -database db1| where {$_.PersistedCapabilities–like “*oab*”} | New-MoveRequest -TargetDatabase db2
此方法更适合具有一个承载组织邮箱的邮箱数据库副本的环境。
激活另一台服务器上的邮箱数据库
此方法适合具有多个承载组织邮箱的邮箱数据库副本的环境。
示例:
DB1承载组织邮箱,并且在服务器 Exch1 和 Exch2 上都有副本。DB1当前在 Exch1 上处于活动状态。
可使用以下命令激活Exch2 上的 DB1 并使 Exch2 成为OAB 生成服务器:
1
Move-ActiveMailboxDatabase DB1 -ActivateOnServer Exch2
注意:在更改OAB 生成服务器之前,请阅读本文后面“组织邮箱替换”中提到的准则。
创建新的组织邮箱
为了提供容错功能或者为地理分散的Exchange 部署的用户提供服务,管理员可创建其他组织邮箱。
创建新的组织邮箱的过程分为以下两步:
第 1 步:创建新的仲裁邮箱
1
New-Mailbox -Arbitration -Name "OABSeattle" -Database DB2Seattle -UserPrincipalNameoabs@contoso.com –DisplayName“OAB Mailbox for Seattle”
第 2 步:启用OABGen 功能
1
Set-Mailbox -Arbitration oabs -OABGen $true
注意:在创建其他组织邮箱之前,请阅读本文后面“组织邮箱替换”中提到的准则。
更改OAB 生成计划
ExchangeServer 2010 之前的 OAB 生成都是在基于OAB 属性上设置的“计划”。查看Exchange 2013 OAB 的属性时,您可能会看到一个已定义的“计划”。但Exchange Server 2013 OAB 生成不会根据 OAB 属性上定义的“计划”进行:
相反,ExchangeServer 2013 OAB 生成会根据在邮箱服务器上配置的 OABGeneratorWorkCycle 和OABGeneratorWorkCycleCheckpoint 属性进行。
示例:
上面屏幕截图中的值意味着每日生成一次OAB。
哪一台邮箱服务器处理OAB 下载请求?
ExchangeServer 2013 CAS 角色会将 OAB 下载请求代理到相应的邮箱角色服务器。CAS角色会将其处理的每个请求的记录保留在日志文件中,这些日志文件位于文件夹 %ExchangeInstallPath%\Logging\HttpProxy\OAB\中。
这些日志文件是用于标识CAS 选择用于服务请求的邮箱服务器的极佳工具。
日志文件中的部分重要字段的信息:
字段
说明
UrlStem
用于标识正下载的OAB 以及下载是完全下载还是增量下载
AuthenticatedUser
请求OAB 的用户的名称
AnchorMailbox
标识为最接近服务OAB 请求的组织邮箱的 DN
ServerHostName
处理请求的CAS 服务器名称
HttpStatus
代理操作的状态代码
ProxyAction
CAS服务器针对请求执行的操作,它通常是 Exchange 2013 OAB 的“代理”
TargetServer
将请求代理到的邮箱角色服务器的名称
为了提高可读性,可将日志文件导入到Excel 中。
示例:
强制OAB 生成
可通过两种方法强制立即开始Exchange Server 2013 OAB 生成。
方法 1:Update-OfflineAddresBook
以下命令将对所有组织邮箱中名为“DefaultOffline Address Book”的 OAB 强制 OAB 生成。
1
Update-OfflineAddressBook "defaultoffline address book"
注意:此命令将对每个承载活动组织邮箱的邮箱服务器发起RPC 请求。
方法 2:重新启动邮箱助理服务。
邮箱角色中的Microsoft Exchange 邮箱助理服务负责生成 OAB。重新启动此服务将在特定邮箱服务器上生成在环境中定义的所有OAB,前提是该邮箱服务器承载了活动组织邮箱。
组织邮箱替换
ExchangeServer 2013 CAS 角色将 OAB 下载请求代理到“最近的”承载活动组织邮箱的邮箱服务器。该服务器在发现同一 AD站点中存在多个活动的组织邮箱时,可以通过循环方式代理请求。这可能导致频繁的完全 OAB 下载。
因此,当前的指导意见是规划组织邮箱替换,以便您在 AD站点中将有一个活动的组织邮箱。这适用于创建新的组织邮箱以及创建承载组织邮箱的邮箱数据库的副本。
方案
下列方案讨论了一种现实生活情况以进一步说明新的OAB 管理方法。
方案 1:创建新的组织邮箱
Contoso在 Dallas 和 Seattle 站点上均部署了Exchange Server 2013 邮箱和 CAS 角色。Contoso 的Exchange 管理员 John 分析 CAS 服务器上的http 代理日志文件,发现 Seattle 用户的 OAB 下载请求全转到了Dallas 服务器。在进一步的调查中,John 发现他在 Dallas 站点中只有一个组织邮箱,因此所有用户的OAB 下载请求将全转到 Dallas 服务器。
他决定使用下列命令在Seattle 站点创建一个新的组织邮箱:
第 1 步:创建新的仲裁邮箱
1
New-Mailbox -Arbitration -Name "OABSeattle" -Database DB2Seattle -UserPrincipalNameoabs@contoso.com –DisplayName“OAB Mailbox for Seattle”
第 2 步:启用具有OABGen 功能的仲裁邮箱
1
Set-Mailbox -Arbitration oabs -OABGen $true
方案 2:自定义OAB 生成计划
Ben是 Tail Spin Toys 的 Exchange 2013 部署的管理员。默认的OAB 生成计划不适合他们,他们希望每天大约每隔四个小时生成一次 OAB。
Ben将使用以下命令更改将承载组织邮箱的邮箱服务器的属性。
1
Set-MailboxServer Exch1 -OABGeneratorWorkCycle 01.00:00:00 -OABGeneratorWorkCycleCheckpoint 04:00:00
一些天之后,Ben 分析应用程序日志中的事件 ID17002,确保每隔四个小时生成一次 OAB。