目录集成和 Exchange Server 2003

 

上一次修改主题: 2005-12-15

Active Directory 中的 Exchange Server 2003 信息包括有关收件人的信息以及有关邮件组织的配置信息。Active Directory 帮助为 Exchange Server 2003 提供了安全子系统。Active Directory 的安全机制确保只有经授权的用户才可访问邮箱,并且只有经授权的管理员才可修改组织中的 Exchange 配置。

Active Directory 中的下面三个目录分区包含与 Exchange 有关的数据:

  • 域目录分区:Exchange 收件人及系统对象存储在 Active Directory 中的域目录分区。域目录分区复制到特定域的每一台域控制器中。
  • 配置目录分区:Exchange 配置对象(如管理组、全局设置、收件人策略、系统策略和地址列表或地址信息)存储在配置目录分区中。配置目录分区复制到目录林中的所有域控制器上。
  • 架构目录分区:Exchange 架构修改信息(如类和属性)存储在架构目录分区中。架构目录分区复制到目录林中的所有域控制器上。
note注意:
不是所有的配置信息都存储在 Active Directory 中。Exchange 还使用本地注册表和 IIS 元数据库,在特殊情况下,还使用配置文件。

Active Directory 架构定义可以在目录中创建的所有对象类,以及可以分配给每一个对象实例的属性。在 Active Directory 目录林中安装第一台 Exchange 2003 服务器的过程中,Exchange 必须修改此架构,这样 Active Directory 才能存储 Exchange 特有的收件人和配置信息。Exchange 安装程序中的 ForestPrep 过程扩展 Active Directory 架构。也可使用“Setup/ForestPrep”命令行显式运行此过程,这样不必实际安装服务器,即可将 Exchange 特有的类和属性添加到 Active Directory 架构中。如果安装 Exchange Server 2003 的人没有架构管理员权利,必须额外执行此步骤。

Exchange Server 2003 安装程序通过将一系列 .ldf 文件导入 Active Directory 来扩展 Active Directory 架构。除了 Exschema.ldf 以外,其他所有 .ldf 文件位于产品 CD 的 \Setup\i386\Exchange 目录中。Exschema.ldf 位于 \Setup\i386\Exchange\Bin 目录中。

下表列出了定义 Exchange Server 2003 的对象和属性的各个 .ldf 文件。

具有 Active Directory 架构扩展的 Exchange Server 2003 安装文件

文件名 描述

Schema0.ldf

包含收件人对象的架构扩展(如 Exchange 扩展属性的定义),可以用这些扩展来将任何标准属性都未涵盖的信息分配给收件人对象。

Schema1.ldf

包含 Active Directory 连接器的架构扩展,可以用这些扩展来将 Exchange Server 5.5 组织与 Active Directory 集成。

Schema2.ldf

包含 Internet 访问协议、目录同步以及 Exchange 存储配置对象的架构扩展。

Schema3.ldf

包含系统监视、Lotus Notes 连接器配置对象、脱机通讯簿设置以及属于 X.400 连接器的设置的架构扩展。

Schema4.ldf

包含路由组、桥头服务器、协议容器、邮件数据库、地址列表服务以及 Microsoft Exchange MTA 配置对象的架构扩展。

Schema5.ldf

包含协议容器、路由组容器以及与可扩展存储引擎 (ESE) 有关的参数的架构扩展。

Schema6.ldf

包含协议虚拟服务器、管理组、邮件连接器以及 Exchange 存储的架构扩展。

Schema7.ldf

包含邮件数据库和邮箱管理器的架构扩展。

Schema8.ldf

包含邮箱管理器、系统监视、公用文件夹以及 SMTP 传输配置对象的架构扩展。

Schema9.ldf

包含日历连接器、Novell GroupWise 连接器、动态通讯组列表、邮件文件夹以及 Outlook Mobile Access 的架构扩展。

note注意:
Schema1.ldf 到 Schema8.ldf 对于 Exchange 2000 Server 和 Exchange Server 2003 是相同的。Schema9.ldf 包含 Exchange Server 2003 中新增的架构扩展。

Exschema.ldf

将 Object-GUID、Replication-Signature、Unmerged-Attributes 和 ADC-Global-Names 属性添加到架构中,以便用 Exchange Server 2003 必需的信息更新 Exchange 2000 Service Pack 1 之前的架构。

note注意:
可以同时使用 .ldf 文件与低层的 Active Directory 工具(如 Ldifde.exe)来修复损坏的 Active Directory 架构。但是 Active Directory 架构的故障排除信息超越了本书讲述的范畴。请注意,架构更改可能重置全局编录,在这种情况下,必须将所有的收件人对象重新复制到全局编录中。在大型组织中,此操作可能导致数据通信量的大大增加。

Exchange 2003 服务访问存储在 Active Directory 中的信息,并将信息写入到 Active Directory 中。如果此通信直接发生在每个服务与 Active Directory 之间,那么 Exchange 2003 便可能由于过多的通信请求使 Active Directory 域控制器崩溃。必须通过一个中心组件来组织服务与 Active Directory 之间的通信。该组件就是 DSAccess 模块。

DSAccess 是一个共享的 API,Exchange 2003 中的多个组件用它来查询 Active Directory 并获取配置信息和收件人信息。DSAccess 在 DSAccess.dll 中实现,后者由包括系统助理、邮件传输代理、Microsoft Exchange Information Store 服务、Exchange Management 服务、Internet 信息服务 (IIS) 以及 Windows Management Instrumentation (WMI) 在内的 Exchange 组件和非 Exchange 组件加载。DSAccess 探查 Active Directory 拓扑、检测域控制器和全局编录服务器,并维护适用于 Exchange 组件使用的一系列有效目录服务器。此外,DSAccess 还维护一个缓存。该缓存使得各个组件发送到 Active Directory 服务器的轻型目录访问协议 (LDAP) 请求数减少,从而最大限度地降低了 Active Directory 上的负载。

important重要提示:
DSAccess.dll 是实现 DSAccess 的主要 DLL。要正确运行 DSAccess.dll,其版本必须与其伴生 DLL 的版本相匹配。伴生 DLL Dscmgs.dll 和 Dscperf.dll 分别存储事件日志消息字符串和性能对象提供程序。

DSAccess 将可用的目录服务服务器分为下面三类(可能有重叠):

  • 全局编录服务器:要获取目录林中所有收件人对象的完整地址信息,Exchange Server 2003 必须访问全局编录服务器。只有全局编录服务器才包含域中所有对象的完整副本以及目录林中所有对象的不完整副本。Exchange 服务器当前使用的全局编录服务器称为工作的全局编录服务器。
    几乎所有 Exchange Server 2003 用户上下文目录服务事务都以全局编录为目标。无论本地 Active Directory 站点中有多少台全局编录服务器,最多只能有十台全局编录服务器添加到工作的全局编录列表中。如果本地站点没有全局编录服务器,或者本地站点没有任何全局编录服务器通过适用性测试,则 DSAccess 将使用其他站点开销最低的、最多 200 台的全局编录服务器。由于用于全局编录的目录服务服务器本身也是域控制器,因此该服务器可能同时用作两种类型的目录服务器。
  • 域控制器:如果请求方服务的信息足够详细,能够找到所发出搜索中被请求的用户对象的位置,则域控制器将用于用户上下文请求。这些域控制器也称为工作的域控制器。工作的域控制器是本地域中能够接受域命名上下文查询的域控制器。无论本地 Active Directory 站点中有多少台域控制器,最多只能有十台域控制器添加到工作的域控制器列表中。如果本地站点中没有域控制器,或者本地站点中没有任何域控制器通过适用性测试,那么 DSAccess 将使用其他站点中开销最低的域控制器。
    向工作的域控制器发出的查询根据循环法的原则进行负载平衡,以避免使单台域控制器超载。如果没有在注册表中对工作的域控制器进行硬编码,那么将会使用拓扑探查进程和适用性测试,每隔 15 分钟重新评估并重新生成工作的域控制器列表一次。
  • 配置域控制器:Exchange Server 2003 可以从多个域控制器中读取信息。为了避免在将配置更改应用于 Active Directory 时发生冲突,Exchange Server 2003 将其配置信息写入到一台称为配置域控制器的域控制器中。当在工作的域控制器列表中选择配置域控制器时,DSAccess 首选域控制器,只有在找不到适用的域控制器时,才考虑全局编录服务器。此外,DSAccess 首选本地站点中的目录服务器,只有在本地站点中找不到适用的目录服务器时,才会考虑使用辅助站点中的目录服务器。
    如果由于任何原因 Exchange Server 2003 无法再使用配置域控制器,DSAccess 会将另一台工作的域控制器选作其配置域控制器。DSAccess 每隔八小时便会通过运行一组适用性测试来重新评估配置域控制器的作用。如果测试成功,DSAccess 将继续使用同一配置域控制器。如果测试失败,DSAccess 便会在工作的域控制器列表中选择另一台域控制器作为配置域控制器。

Exchange Server 2003 的核心组件依赖 DSAccess 来提供当前的 Active Directory 服务器列表。例如,邮件传输代理 (MTA) 通过 DSAccess 层将 LDAP 查询路由到 Active Directory。为连接到数据库,存储进程使用 DSAccess 从 Active Directory 中获取配置信息。为路由邮件,传输进程使用 DSAccess 获取有关连接器布置的信息。

当检测到目录服务的状态发生变化时,DSAccess 更新可用全局编录和域控制器列表。此列表还可以供不将 DSAccess 用作网关来访问目录服务的其他目录使用程序(如系统助理中的 DSProxy 和其他组件)使用。请求此列表的服务负责检测目录服务状态的后续变化。

note注意:
除非在注册表中对域控制器和全局编录服务器进行了硬编码,否则,将会每 15 分钟使用拓扑探查进程和适用性测试重新评估并重新生成全局编录服务器和域控制器列表一次。

在 Exchange Server 2003 中,DSAccess 确定 Active Directory 的拓扑、打开适当的 LDAP 连接,并解决服务器故障。对于每一台可用的目录服务服务器,DSAccess 都打开专用于使用 DSAccess 的每个进程的 LDAP 连接。DSAccess 使用所检测到的目录服务状态信息(Up、Slow 或 Down)来更新这些 LDAP 连接。DSAccess 使用此状态信息来决定使用哪个 LDAP 连接将请求转发到 Active Directory。与可用的域控制器和全局编录服务器的一组 LDAP 连接及其关联的状态组成了 DSAccess 配置文件。

DSAccess 支持负载平衡机制,这种机制将用户上下文目录服务请求按照循环法的原则在 DSAccess 配置文件中的 LDAP 连接之间分布。负载平衡有助于确保可靠性和可伸缩性。可以静态地配置注册表中的所有配置文件,以便仅使用一组特定的目录服务服务器。但是,这些连接的实际状态和负载平衡情况可能因进程而异,也就是因配置文件而异。对于配置上下文请求,则不存在这一情况。

note注意:
由于所有的 Exchange Server 2003 和 IIS 服务都使用相同的安全上下文(LocalSystem 帐户),因此 DSAccess 可能对不同的请求重复使用相同的 LDAP 连接。当 DSAccess 启动或者拓扑发生变化时,DSAccess 打开与拓扑中所有适当的域控制器和全局编录服务器的 LDAP 连接。

当基于 Microsoft Windows 的 LDAP 实现 (WLDAP) 在 LDAP 操作中返回错误时,DSAccess 会对它进行分析,并确定这是否意味着目录服务器出现问题。如果是,便会立即将该目录服务器标记为不适用,并自动在另一台服务器上重试用户操作。只要拓扑中至少有一个工作的域控制器,DSAccess 便可以继续无差错的运行。

为了验证域控制器或全局编录服务器的适用性,DSAccess 确定是否可通过 389 端口(对于域控制器)和 3268 端口(对于全局编录服务器)访问该服务器,并确定该服务器是否驻留在使用 DomainPrep 准备过的域中。DomainPrep 确保正确地配置组策略系统访问控制列表 (ACL),以便授予 Exchange Server 2003 服务对 Active Directory 的访问权限。服务器适用性检查在本节的后面部分讲述。

note注意:
要在应用程序事件日志中获取适用性报告,可以在 Exchange 系统管理器中对 DSAccess 服务的拓扑类别启用诊断日志记录。

DSAccess 拓扑总是包含两个列表,即站点内列表和站点外列表。一个列表(站点内)包含 Exchange 服务器本地 Active Directory 站点中的服务器,另一个列表(站点外)包含其他 Active Directory 站点中的服务器。DSAccess 最初仅使用本地站点中的服务器,但是,当某一类别的所有本地服务器(如全局编录服务器)都不适用时,DSAccess 便立即开始使用站点外列表。然后,DSAccess 继续每五分钟检查本地站点一次,并在检测到有可用的服务器时立即故障回复到本地站点中。在站点外服务器上重试用户请求的过程在用户看来是没有时间延迟的,并且也感觉不出来与在本地站点中的区别。

有些 Exchange Server 2003 组件(如 Exchange Routing Engine 服务)还向 Active Directory 进行注册,这样 Active Directory 便会自动通知它有关配置更改的任何信息。这种通知机制消除了轮询过程,但是事件注册是针对每一台目标服务器的。如果 DSAccess 将目标服务器标记为 down,该组件将重新发布事件注册,并将更改信息通知给客户端进程(如 Routing Engine 服务),因为所监视的值可能在选择新的域控制器或全局编录服务器的过程中发生了变化。

DSAccess 在启动时使用探查过程来识别 Active Directory 的拓扑,并评估域控制器和全局编录服务器的可用性。启动完成后以及之后的每 15 分钟,DSAccess 都使用几乎完全相同的过程来重新探查拓扑,并检查服务器可用性是否有任何变化。

note注意:
如果对 DSAccess 使用的目录服务器进行硬编码(将在下面讲述),DSAccess 将不使用探查过程,而仅仅检查服务器的适用性。

下面的有序列表概述了探查过程,并指出了初始探查与后续探查之间的区别:

  1. 系统助理进程 (Mad.exe) 在启动过程中实例化并初始化 DSAccess.dll。
  2. DSAccess 从本地域打开与随机选择的域控制器的 LDAP 连接。该服务器称为启动服务器。
  3. DSAccess 读取本地注册表,确定拓扑是否经过硬编码。如果拓扑经过了硬编码,探查过程将停止。如果未检测到硬编码,DSAccess 将继续探查过程。
  4. DSAccess 查询启动服务器,以识别本地域控制器和全局编录服务器。然后 DSAccess 确定服务器的适用性并指定服务器角色。
  5. DSAccess 查询启动服务器,确定是否有一个或多个辅助站点连接到了本地站点。如果辅助站点存在,DSAccess 将按开销从低到高的顺序对每个站点的 siteLink 对象进行排序。DSAccess 将开销最低的站点放入辅助拓扑列表中。
  6. DSAccess 查询启动服务器,以识别位于辅助拓扑站点中的域控制器和全局编录服务器。
  7. DSAccess 识别完整的拓扑,并编辑工作的域控制器列表和工作的全局编录服务器列表。

默认情况下,启动过程中的 DSAccess 初始化必须在一分钟之内完成;否则,DSAccess 将停止。一分钟对于 DSAccess 的初始化通常是一个很宽松的标准。如果初始化所需的时间超过一分钟,则可能意味着网络或拓扑配置存在问题。尽管可以通过设置注册表项来延长超时时间,但是首先应确定初始化过程比预期时间长的原因。要配置超时值,应使用下列注册表设置:

 

位置

HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\MSExchangeDSAccess

TopoCreateTimeoutSecs

类型

REG_DWORD

描述

设置 DSAccess 初始化的超时值(以秒为单位),例如,0x200。默认为 0x3C 秒(1 分钟)。

note注意:
如果将“MSExchangeDSAccess”服务的所有类别的诊断日志记录级别设置为“最高”,Exchange 系统管理器将自动获取有关 DSAccess 初始化的详细信息,并将该信息放入应用程序事件日志中。

DSAccess 在探查 Active Directory 拓扑后,将确定所探查到的工作的域控制器和全局编录服务器列表是否适于使用。初始探查和后续探查过程中,DSAccess 通过运行一系列适用性测试来确定服务器的适用性。适用性测试分为两类:硬测试和软测试。硬测试确定域控制器或全局编录是否可用。如果服务器未通过硬测试,将被认为不可用,并将从所探查到的服务器列表中删除,而不再接受软测试。

DSAccess 运行如下硬适用性测试:

  • 全局编录功能:DSAccess 确定目录服务器的 RootDSE 对象中的 isGlobalCatalogReady 属性是否设置为 TRUE,以此确定该服务器是否将其自身指定为全局编录服务器。如果该属性设置为 TRUE,则该目录服务器将被认为是有效且可用的全局控制器。
  • 可访问性:DSAccess 使用 Internet 控制消息协议 (ICMP) ping 每一台服务器,以验证服务器是否可用。DSAccess 还通过 389 端口(对于域控制器)和 3268 端口(对于全局编录服务器)来验证目录服务器的可访问性。
    使用 ICMP 确定服务器是否可用时,如果网络中所有连接不支持 ICMP,则可能会产生问题。例如,Exchange 服务器可能驻留在外围网络中,在这种情况下,Exchange 服务器与域控制器之间不存在 ICMP 连接性。这时,应禁用 ICMP 检查,并将下列注册表参数设置为零。

     

    位置

    HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\MSExchangeDSAccess

    LdapKeepAliveSecs

    类型

    REG_DWORD

    数值数据

    0x0

    描述

    如果注册表项不存在或未设置为 0,DSAccess 将会使用 ping 协议。

    有关 LdapKeepAliveSecs 注册表项的详细信息,请参阅 Microsoft 知识库文章 320529,“XADM:Using DSAccess in a Perimeter Network Firewall Scenario Requires a Registry Key Setting”(英文)。
    Caution警告:
    错误地编辑注册表可能导致严重问题,甚至可能需要重新安装操作系统。因注册表编辑不当而导致的问题可能没有办法解决。编辑注册表前,请备份所有重要数据。
  • 组策略 SACL 权限:除了常规访问控制列表 (ACL) 权限外,安装程序将授予所有运行 Exchange 2003 Server 的服务器的安全访问控制列表 (SACL) 权限,以使其能够查看 ntSecurityDescriptor 属性。权限是通过 SeSecurityPrivilege 特权授予的。DSAccess 在服务器上读取配置目录分区对象的安全描述符,验证 SACL 是否可读。如果 SACL 不可读,DSAccess 将认为该服务器不适用。
  • 重要数据:目录服务器必须位于运行了 DomainPrep 的域中。该域必须将 Exchange Server 2003 服务器对象包含在 Exchange 配置容器中。
  • 同步:DSAccess 将检查服务器的 rootDSE 对象的 isSynchronized 属性是否设置为 TRUE,以此验证服务器是否已同步。
  • Netlogon:为了测试目录服务器的一般适用性,DSAccess 向其发送 DSGetDcName 远程过程调用 (RPC)。如果目录服务器未同步,或者发生磁盘空间不足等问题,便不会将自身标识为目录服务器。
    在外围网络中(不允许通过 RPC 进行通信),无法进行 NetLogon 检查。但是,NetLogon 检查会继续发出 RPC,直到运行失败。此过程可能需要很长的时间。由于重复的 NetLogon 检查会降低性能,因此应通过创建下列注册表项来阻止 DSAccess 发出 NetLogon 检查命令:

     

    位置

    HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\MSExchangeDSAccess

    DisableNetLogonCheck

    类型

    REG_DWORD

    数值数据

    0x0

    描述

    如果注册表项不存在或未设置为 0,则 DSAccess 执行 Netlogon 检查。

    有关详细信息,请参阅 Microsoft 知识库文章 320228,“XGEN:The "DisableNetLogonCheck" Registry Value and How to Use It”(英文)。
  • 操作系统的版本:Exchange Server 2003 只能使用运行 Microsoft Windows Server 2003 或 Windows 2000 Server Service Pack 3(或更高版本)的域控制器和全局编录服务器。DSAccess 会判定目录服务器是否满足这些要求。

硬测试完成后,DSAccess 会运行一系列软测试,以判定有哪些目录服务器能够容纳 Exchange Server 2003 所施加的额外负荷。为此,DSAccess 运行下列软适用性测试:

  • DNS 权值:DSAccess 使用域控制器和全局编录服务器的权值(在 DNS 中与每一台服务器对应的 (SRV) 资源记录中指定)来确定客户端应首选的服务器。权值越高,意味着 DSAccess 选择该服务器的可能性越大。如果 DSAccess 无法读取权值,便会使用默认权值 100。
  • FSMO 主域控制器角色所有者:如果拓扑中包含运行 Windows NT Server 的服务器,则具有 Flexible Single Master Operation (FSMO) 主域控制器 (PDC) 角色的目录服务器的负荷将会过重,从而使得它不会成为 Exchange Server 2003 的理想选择。因此,DSAccess 执行软适应性测试,以定位 PDC FSMO 角色所有者,以便可以从适合的目录服务器的列表中删除它。
  • 响应时间:DSAccess 对目录服务器执行 LDAP 查询,以检查其响应时间。响应时间超过两秒的软适用性测试被认为失败。
    note注意:
    DSAccess 支持完全循环法负载平衡和故障转移(至另一台目录服务器),两者将在当前使用的服务器不可用的情况下发挥作用。当 Exchange Server 2003 运行在域控制器或全局编录服务器上时,这些功能被禁用。

DSAccess 允许管理员静态地配置供 DSAccess 使用的特定域控制器和全局编录,并允许管理员禁用自动拓扑探查过程。这些硬编码的条目是通过 Exchange 系统管理器中的 DSAccess 用户界面来配置的,如下图所示。

3c5b4709-c63d-4bb4-a68f-489625736030

DSAccess 在初始化的过程中读取注册表,确定是否静态配置了任何域控制器或全局编录服务器。如果静态配置了任何域控制器或全局编录服务器,将不会执行动态拓扑检测。如果未找到静态目录服务器,DSAccess 将动态检测拓扑中的目录服务服务器。

如果静态配置了 DSAccess,DSAccess 中的负载平衡和故障转移功能将不会工作,并且不会使用或检测其他任何域编录或全局编录。因此,如果所有静态配置的域编录或全局编录都脱机或者不可访问,DSAccess 的运行将失败。如果静态配置了全局编录,但是注册表中未指定域编录,将动态检测并使用任何可用的域控制器。同样,如果静态配置了域编录,但是注册表中未指定全局编录,将动态检测并使用任何可用的全局编录。如果配置域控制器并不是静态配置的,该域控制器便会从可用的域控制器列表中删除(无论该列表是动态配置的还是静态配置的)。

用于用户上下文请求的域控制器和全局编录是与配置文件相关的。因此,这些设置在注册表中的值位于 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeDSAccess\Profiles\Default 子项下。要静态配置 DSAccess 使用的域控制器和全局编录服务器,必须具有下列注册表项:

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of DC>

IsGC

类型

REG_DWORD

数值数据

0x0

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of DC>

HostName

类型

REG_SZ

数值数据

<name of DC>

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of DC>

DSType

类型

REG_SZ

数值数据

0

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of DC>

PortNumber

类型

REG_DWORD

数值数据

0x00000185 (389)

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of GC>

IsGC

类型

REG_DWORD

数值数据

0x1

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of GC>

HostName

类型

REG_SZ

数值数据

<name of GC>

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of GC>

DSType

类型

REG_SZ

数值数据

0

 

位置

MSExchangeDSAccess\Profiles\Default\<Name of GC>

PortNumber

类型

REG_DWORD

数值数据

0x00000cc4 (3268)

可以通过下面三种方法之一设置 DSAccess 使用的配置域控制器:

  • 在注册表中静态配置:配置域控制器是所有配置文件共享的。为此,配置域控制器的注册表设置在 \Instance0 子项的下面指定,如下所示:

     

    位置

    MSExchangeDSAccess\Instance0

    ConfigDCHostName

    类型

    REG_SZ

    数值数据

    <Name of config DC>

     

    位置

    MSExchangeDSAccess\Instance0

    ConfigDCPortNumber

    类型

    REG_DWORD

    数值数据

    0x00000185 (389)

  • 动态检测:如果未静态指定配置域控制器,DSAccess 将使用动态拓扑探查过程定位配置域控制器。DSAccess 使用选定的配置域控制器的时间为八小时,之后将随机选择一个新的配置域控制器。如果在未满八小时之前系统助理重新启动,或者当前选定的配置域控制器出现故障或关闭,DSAccess 将选择新的配置域控制器。
  • 由系统助理在启动时选择:在 Exchange Server 2003 中,系统助理进程只有在第一个服务启动时才选择配置域控制器,而第一个服务是在安装过程或升级过程中启动的。无论什么情况下,只要注册表中静态配置了配置域控制器,系统助理选定的配置域控制器便会被忽略。DSAccess 将静态配置域控制器条目作为应采纳的建议。这样,如果静态配置了配置域控制器,DSAccess 会将它作为处理配置上下文请求的首选配置域控制器。如果该域控制器不可用,DSAccess 将从工作的域控制器列表中选择另一个域控制器。在这种情况下,DSAccess 通过选择可用的域控制器来转移静态配置的配置域控制器的故障,并使整个过程衔接紧密,就好像未提供配置域控制器注册表信息一样。

下面的示例描述了不同的 Active Directory 配置,并说明了 DSAccess 如何在每一种情况下指定服务器角色。这些示例假定所有的域控制器和全局编录都运行含 Service Pack 3 的 Windows 2000 Server 或更高版本,同样地通过了所有适用性测试,并且未对任何静态域控制器进行硬编码(也就是说,DSAccess 执行动态拓扑探查)。

下图描绘了单目录林,该目录林包含由两个站点组成的单域。站点 A 包含一个域控制器和一个全局编录,站点 B 包含三个域控制器和两个全局编录。

a9531fbe-3b39-4438-a1da-9f9ca4b19466

运行在站点 A 中的 Exchange Server 2003 服务器上的 DSAccess 将检测到如下表所示的拓扑:

站点 A 的拓扑

域控制器类型 服务器

配置域控制器

域控制器 1 或全局编录 1

工作的域控制器

域控制器 1 和全局编录 1

工作的全局编录

全局编录 1

运行在站点 B 中的 Exchange Server 2003 服务器上的 DSAccess 将检测到如下表所示的拓扑:

站点 B 的拓扑

域控制器类型 服务器

配置域控制器

域控制器 2、3 和 4

全局编录 2 或 3

工作的域控制器

域控制器 2、3 和 4

全局编录 2 和 3

工作的全局编录

全局编录 2 和 3

在每一种情况中,所列出的服务器的顺序都很重要。服务器是按照被 DSAccess 探查到(并被认为适用)的顺序来列出和使用的。

下图描绘了更复杂的拓扑,该拓扑包含两个域和两个站点,其中站点 A 跨越两个域。

1131b948-94d0-4f6e-9f5b-2e97bd608f96

运行在域 1 和站点 A 中的 Exchange Server 2003 服务器上的 DSAccess 将检测到如下表所示的拓扑:

域 1 和站点 A 的拓扑

域控制器类型 服务器

配置域控制器

域控制器 1、2、3 和 4

全局编录 1、2 或 3

工作的域控制器

域控制器 1、2、3 和 4

全局编录 1、2 和 3

工作的全局编录

全局编录 2、1 和 3

运行在域 2 和站点 A 中的 Exchange Server 2003 服务器上的 DSAccess 将检测到如下表所示的拓扑:

域 2 和站点 A 的拓扑

域控制器类型 服务器

配置域控制器

域控制器 1、2、3、4

全局编录 1、2 或 3

工作的域控制器

域控制器 1、2、3 和 4,

全局编录 1、2 和 3

工作的全局编录

全局编录 2、1 和 3

运行在域 2 和站点 B 中的 Exchange Server 2003 服务器上的 DSAccess 将检测到如下表所示的拓扑:

域 2 和站点 B 的拓扑

域控制器类型 服务器

配置域控制器

域控制器 5

全局编录 4

工作的域控制器

域控制器 5

全局编录 4

工作的全局编录

全局编录 4

服务器同样是按照被探查到(并被认为适用)的顺序来列出和使用的。

DSAccess 缓存是 Exchange 服务器上的内存缓存,它包含从 Active Directory 中检索到的配置和用户记录。要访问缓存中的记录,可以通过对象的可分辨名称 (DN)、全局唯一标识符 (GUID) 或者基于作用域、BaseDN 和筛选器(用于在 Active Directory 中查找该对象)构造的项。使用同一 DN、GUID 或项的后续访问将在缓存中查找该记录。前面已提到,DSAccess 是一个共享的 API,它由 Exchange Server 2003 计算机上的几个进程使用。表 3.7 中列出的进程将 DSAccess.dll 加载到其堆中,这些进程是 Active Directory 信息缓存的受益者。

加载 DSAccess.dll 的进程

进程 描述

Mad.exe

Microsoft Exchange System Attendant 服务

Store.exe

Microsoft Exchange Information Store 服务

EMSMTA.exe

Microsoft Exchange MTA Stacks 服务

ExMgmt.exe

Exchange Management 服务

RESvc.exe

Exchange Routing Engine 服务

Inetinfo.exe 或 W3WP.exe

IIS 和工作进程

Winmgmt.exe

Windows Management Instrumentation 服务

表 3.8 列出了使用 DSAccess 来获取用户信息和配置信息的各个 Exchange 组件。

使用 DSAccess 的 Exchange 组件

组件 DSAccess 用于

元数据库更新服务 (DS2MB)

更新序号 (USN) 跟踪的目录更改

Exchange 路由引擎 (RESVC)

用户和配置查找

SMTP 分类程序 (SMTP CAT)

拓扑中的全局编录服务器列表

目录服务代理 (DSProxy)

拓扑中的全局编录服务器列表

Exchange 存储

用户和配置查找

WebDAV

用户和配置查找

邮件传输代理 (MTA)

用户和配置查找

DSAccess 缓存可以在一段时间内缓存这些组件执行的目录查找。在这段时间内,如果另一个进程请求相同的信息,可以从 DSAccess 缓存中检索该信息,而不必在工作的全局编录上重复相同的查询。除了 MAPI 客户端的通讯簿查找以及 SMTP 入站和出站路由的某些部分以外,其他所有目录访问都通过 DSAccess 进程,并且会被缓存起来。

默认情况下,配置数据的目录条目的缓存时间为 15 分钟,用户数据的目录条目的缓存时间为 5 分钟。用户缓存的默认大小为 140 MB,配置缓存为 5 MB。用户数、最大条目数、最大缓存大小(内存)以及缓存到期时间等参数都可能影响 DSAccess 缓存的最佳大小和性能。

下面的注册表项(非默认注册表项)提供对配置数据的低层 DSAccess 缓存控制。

Caution警告:
错误地编辑注册表可能导致严重问题,甚至可能需要重新安装操作系统。因注册表编辑不当而导致的问题可能没有办法解决。编辑注册表之前,请备份所有重要数据。

 

位置

MSExchangeDSAccess\Instance0

CacheTTLConfig

类型

REG_DWORD

数值数据

0x384 (900 seconds)

描述

用于指定缓存中的配置数据的生存时间 (TTL)

 

位置

MSExchangeDSAccess\Instance0

MaxEntriesConfig

类型

REG_DWORD

数值数据

0 (no limit)

描述

用于指定缓存中的最大配置数据条目数

下面的注册表项(非默认注册表项)提供对用户数据的低层 DSAccess 缓存控制。

 

位置

MSExchangeDSAccess\Instance0

CacheTTLUser

类型

REG_DWORD

数值数据

0x12c (300 seconds)

描述

用于指定缓存中的用户数据的生存时间 (TTL)

 

位置

MSExchangeDSAccess\Instance0

MaxEntriesUser

类型

REG_DWORD

数值数据

0 (no limit)

描述

用于指定缓存中的最大用户数据条目数

应预加载搜索筛选器,以避免同时在 Active Directory 中运行多个搜索实例的问题。例如,当在同一个用户对象上发出多个不同的搜索筛选器时,便会发生这一问题。可以通过下列注册表项来启用预加载,这些注册表项定义搜索的作用域、基准可分辨名称 (BaseDN) 以及筛选器。

Caution警告:
错误地编辑注册表可能导致严重问题,甚至可能需要重新安装操作系统。因注册表编辑不当而导致的问题可能没有办法解决。编辑注册表之前,请备份所有重要数据。

下面的注册表值可用来预加载 DSAccess 缓存。

 

位置

MSExchangeDSAccess

PreloadBaseDNs

类型

REG_MULTI_SZ

数值数据

BaseDN value (for example, DC=contoso,DC=com)

描述

标识作为查询根目录使用的容器对象。这是一个多字符串设置。每个 BaseDN 都必须与一个预加载的筛选器关联。这意味着 BaseDN 和筛选字符串必须彼此完全匹配。

 

位置

MSExchangeDSAccess\

PreloadFilters

类型

REG_MULTI_SZ

数值数据

A filter string, for example, legacyExchangeDN=%

描述

DSAccess 读取注册表,并将百分号 (%) 解释为一个未定并将确定的参数。实际的搜索请求发出后,将分析从目录中返回的记录,并会将该属性的值(在预加载的筛选器中指定)插入到搜索条目中。接下来,会为适用的用户记录设置指针。与对注册表进行任何修改时一样,更新注册表时也应极其小心。与其他 Exchange 服务一样,DSAccess 也不检查注册表中指定的 Active Directory 服务器的有效性,并且不识别其中的拼写错误或其他可能的错误。对预加载所提供的这些值是按照对于大多数常见的 Exchange 搜索都理想的原则来设置的。

许多 Exchange 事务都可能触发预加载事件,但是必须满足特定的条件。这些预加载事件发生的顺序如下:

  1. 执行 Active Directory 搜索。如果该搜索满足下面三个条件,将加载 DSAccess 缓存:
    • 必须从用户目录分区搜索中返回可分辨名称。
    • 最后的可分辨名称必须包含在预加载注册表设置中指定的 BaseDN。例如,如果实际搜索所指定的 BaseDN 比预加载 BaseDN 的范围更广泛,预加载便不会发生。
    • 此时,将分析返回的记录,并将提取在预加载的搜索字符串中指定的属性。构造搜索筛选器所需的属性必须存在。在下面的多元搜索示例中,至少要有一个属性:
      (|(objectGuid=%) (msExchMailboxGuid=%))
      因为返回结果具有多义性,所以筛选字符串中的属性不能是多值的。例如,proxyAddresses = % 不是有效的预加载搜索筛选器,因为 proxyAddresses 是一个多值属性,DSAccess 不知道对未定的值使用哪个值。
  2. 搜索条目是基于作用域、BaseDN、属性以及筛选字符串构造的,并且链接到缓存中的这一可分辨名称条目。例如:
    [scope = Whole Subtree] / [baseDN = DC=mydom,DC=com] / [filter = (objectClass=myclass)]

DSAccess 使用缓存(而不是 Active Directory)来处理预加载的筛选器和 BaseDN 上的后续 Active Directory 搜索请求。

 
显示: