复制工作原理

 

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

如果多个公用文件夹存储(每个都位于单独的服务器上)支持单个公用文件夹树,Exchange Server 2003 将使用公用文件夹复制来使存储保持同步。

公用文件夹内容仅存在于被配置为具有特定文件夹副本的存储中。内容和层次结构信息是分别复制的。每个存储都保存一个层次结构副本,该副本所包括的列表列出了其他哪些存储保存了每个文件夹的内容副本。内容副本仅存在于指定的存储上。

每个公用文件夹存储都维护一个复制状态表,以跟踪存储中各个副本的状态。复制状态表存储下列信息:

  • 构造各个副本更新时所需的基本信息。
  • 对源自本地存储的各个副本进行的上次更新的相关信息,包括更新的更改号码。
  • 已经应用于文件夹的所有其他已知副本的更新组。更改号码标识每个组中的更新。一个组中的所有更新的更改号码集合称为 CNSet。作为复制过程的一部分,更新信息从一个存储传递到另一个存储。

下表提供了复制状态表如何工作的简化示例。在该示例中,服务器 A 和服务器 B 上的公用文件夹存储均包含名为 Projects 的文件夹的副本。每个服务器上的复制状态表不仅跟踪该服务器上的副本的状态,而且还跟踪另一服务器上的副本的状态。使用此信息,服务器 A 可以确定其 Projects 副本是否与服务器 B 上的 Projects 副本同步。同样,服务器 B 也可以跟踪其相对于服务器 A 的状态。

服务器 A 的复制状态表中的示例数据

副本 数据

服务器 A 上的“项目”

(本地副本)

上次发送的更新:A-100

服务器 B 上的“项目”

已接收 A-100

已接收 B-50

服务器 B 的复制状态表中的示例数据

副本 数据

服务器 A 上的“项目”

已接收 A-100

已接收 B-50

服务器 B 上的“项目”

(本地副本)

上次发送的更新:B-50

将保存内容副本的存储的所有列表与复制状态表中的信息组合起来,这样每个公用文件夹存储就可以确定:与支持公用文件夹树的其他存储相比,其最新程度如何。有关公用文件夹存储如何使用此信息的信息,请参阅回填请求和回填邮件

如果文件夹或其内容被修改,已更改副本所在的存储将以复制邮件的形式将更改通过电子邮件发送到其他存储。Exchange Server 2003 路由复制邮件的方式与路由其他电子邮件的方式相同。为了使复制正常工作:

  • 收件人更新服务必须能够在 Active Directory 目录服务中的存储对象上标记电子邮件属性(例如,mailproxyAddresses).通常,Exchange Server 2003 自动创建收件人策略,并且收件人更新服务按照此策略更新存储对象。
  • Exchange Server 2003 必须能够在复制服务器之间路由电子邮件。可以通过不同类型的电子邮件链接(例如,路由组连接器和 X.400 连接器)路由复制邮件。
note注意:
复制过程使用公用文件夹存储的 Active Directory 属性,而不是单个公用文件夹。各个公用文件夹的 Active Directory 条目仅用于该文件夹收发常规电子邮件。下图显示了 Active Directory 中的公用文件夹存储对象。公用文件夹存储对象是自动配置和维护的,并且驻留在 Active Directory 中的“配置”容器内。

7a8e9d93-a998-494d-99c2-92fda45613d0

复制邮件与其他电子邮件的不同之处在于:Exchange Server 2003 将复制邮件作为系统邮件处理。这意味着复制邮件不受应用于用户电子邮件的正常限制(如大小和传递限制)的约束。在 Exchange Server 5.5 目录中,复制邮件也是系统邮件。

下表列出了 Exchange Server 2003 所使用的不同的复制邮件类型。

公用文件夹复制邮件的类型和使用它们的时间

邮件类型* 何时使用

层次结构 (0x2)

将层次结构更改从本地公用文件夹存储复制到支持同一个层次结构的其他所有公用文件夹存储。尽管 Exchange Server 2003 将层次结构的更改与内容副本的更改区别对待,但它将层次结构作为另一个文件夹处理。在某些事件邮件和其他操作中,Exchange Server 2003 会将层次结构称为“Folder 1-1”。

内容 (0x4)

将内容更改从一个副本复制到该文件夹的所有其他内容副本。内容邮件仅包含应用于单个文件夹的信息。

回填请求 (0x8)

向另一个存储请求 CNSet 中缺少的数据(层次结构和内容更改号码)。

回填响应(0x80000002 或 0x80000004)

将缺少的数据(在 CNSet 中)发送到请求了缺少的更新的存储。

状态 (0x10)

将文件夹的当前 CNSet 发送到该文件夹的一个或多个副本(层次结构和内容更改号码)。

状态请求 (0x20)

请求复制 CNSet 或返回状态邮件(层次结构和内容更改号码)。

*   圆括号中的值是邮件类型的十六进制表示法,用在事件和日志中。在解决复制问题时,请使用十六进制值。有关复制问题的疑难解答的详细信息,请参阅诊断并修复 Exchange Server 2003 存储问题

复制层次结构和内容的基本过程

用户修改公用文件夹时,在用户连接到的文件夹副本所在的服务器上,将发生以下过程:

  1. 公用文件夹存储记录更改。
  2. 在计划的下一个复制周期(由所设定的公用文件夹存储复制间隔决定),公用文件夹存储检查文件夹属性,以确定其他哪些服务器存放该文件夹的副本。如果存在其他副本,则存储会确定需要向它们复制什么信息。此信息将成为副本的更新。
    公用文件夹复制是基于对象的。如果修改了对象的一个属性,则必须复制整个对象。复制更改的存储不能假定所有接收副本都是最新的,因此它必须发送整个对象。不同复制类型的含义如下所示:
    • 层次结构复制 如果新文件夹已创建或文件夹属性(例如,它的显示名)已更改,则更新将包括文件夹的所有属性。
    • 内容复制 如果新邮件已投递或现有邮件已修改,则更新将包括整个邮件及其属性。
  3. 公用文件夹存储将更改号码分配给更新。
    当文件夹将更新复制到另一个服务器时,更改号码将附带在更新上。然后,接收方服务器使用更改号码来确定该更新是否表示有新的更改,以及该服务器是否缺少任何数据。
    更改号码类似于在 Active Directory 复制中使用的更新序号 (USN)。但是,在其他许多方面,公用文件夹复制不同于 Active Directory 复制。
  4. 公用文件夹存储将更新打包到复制邮件中。邮件中所有更新的更改号码称为 CNSet。
    除了更新以外,公用文件夹存储还将文件夹条目中的信息打包到复制状态表中,其中包括之前应用于副本的 CNSet。这意味着复制邮件包括发送方文件夹的状态。
    为了减少邮件通信,公用文件夹存储将多个层次结构更新打包到一个复制邮件中。同样,该存储还将同一文件夹的多个内容更新打包到一个复制邮件中。但是,该存储无法将层次结构更新与内容更新打包到同一个复制邮件中,每个内容复制邮件只存放单个文件夹的更新。
  5. 公用文件夹存储将复制邮件发往驻留已更新文件夹副本的其他公用文件夹存储。该存储发送该邮件,以及自上一个复制周期以来已打包的其他任何邮件。
    公用文件夹存储依赖 Exchange Server 2003 中的内部路由组件来传递复制邮件。存储不会尝试根据拓扑详细信息拆分复制邮件。如果文件夹的内容被修改,并且文件夹中有五个其他副本,则存储将产生单个复制邮件,并将它发送到驻留这些副本的全部五个存储。确定如何路由和传递邮件的任务由路由组件负责。

公用文件夹存储收到复制邮件时,将发生以下过程:

  1. 公用文件夹存储从复制邮件中解包更新和状态信息。
  2. 存储将新更新的更改号码与已有的更改号码列表进行比较,确定以前未接收过的更新。
  3. 存储将新更新应用于相应的文件夹副本。
  4. 对于每个已更新的副本,存储将用当前更新的更改号码以及复制邮件中的文件夹状态信息来更新复制状态表。
    如果复制状态表中的信息指出其他 CNSet 已应用于文件夹的其他副本,但未应用于此存储的副本,则存储将记录在调用回填数组的位置缺少哪些 CNSet,并准备发送回填请求。(有关详细信息,请参阅回填请求和回填邮件。)
Caution警告:
如果对公用文件夹层次结构所做的更改立即影响到几个文件夹,则复制过程可能需要相当大的网络带宽。例如,要将公用文件夹从一台服务器移至另一台服务器,需要在新服务器上创建新副本,并等待要复制到原始服务器的层次结构更改以及要复制到新副本中的内容。副本已同步后,需要将其从原来的服务器中删除。由于已删除的副本必须作为层次结构更改进行复制,因此即使此操作也会产生网络通信。若要更好地了解这样的更改将如何影响系统,请参阅本主题后面的“状态请求和状态邮件”和回填请求和回填邮件

状态请求和状态邮件

除了每个复制邮件中的状态信息以外,Exchange Server 2003 还使用状态请求和状态邮件来确定公用文件夹是否需要发出回填请求。

在下列情况下,公用文件夹存储将发送状态请求:

  • 存储收到有关存放文件夹副本的存储列表发生更改的通知。例如,使用 Exchange 系统管理器将存储添加到列表中或从列表中删除存储。Exchange Server 2003 使用层次结构更新邮件复制此更改。在这种情况下,存储发送一个状态请求,该请求要求存放文件夹副本的每个存储作出响应。
  • 新存储首次启动。在这种情况下,存储将请求公用文件夹层次结构的状态(在此状态下,该公用文件夹层次结构将被当作称为“文件夹 1-1”的特殊文件夹)。存储发送状态请求,该请求要求支持公用文件夹树的每个存储作出响应。
  • 还原完成之后,已使用 Microsoft Windows 备份工具还原的存储第一次启动。在这种情况下,存储将请求公用文件夹层次结构的状态,以及在存储中存放了内容副本的所有文件夹的状态。此状态请求将使两个或三个存储作为“要求的响应方”列出。要求的响应方是支持此层次结构的存储,并且,从内部选择进程的角度来看,还是文件夹内容的可依赖资源。
  • 在设置“Replication Flags”注册表项后,存储已重新启动。有关使用此注册表项的详细信息,请参阅 Microsoft 知识库文章 813629“Update to Send Status Request Messages in Microsoft Exchange 2000 Server”。在这种情况下,存储将请求公用文件夹层次结构的状态,以及任何看起来像是缺少的更新的内容副本状态。此请求将两个或三个存储作为要求的响应方列出。
  • 在设置“Enable Replication Messages On Startup”注册表项后,存储已重新启动。有关使用此注册表项的详细信息,请参阅 Microsoft 知识库文章 321082“How to Send Replication Status Request Messages in Exchange 2000 Server”(英文)。在这种情况下,存储对公用文件夹层次结构以及所有内容副本的状态提出请求。此请求将两个或三个存储作为要求的响应方列出。

存储将状态邮件发送到另一个存储,以指示发送方存储上特定文件夹的当前状态。在下列两种情况下,存储发送状态邮件:

  • 响应另一个存储发送的状态请求。只有在同时满足下列两个条件的情况下,状态邮件才进入请求方存储:
    • 收到状态请求的存储出现在要求的响应方请求列表中。
    • 复制状态表指出收到状态请求的存储具有发送请求的存储所缺少的更新。
  • 在收到对文件夹的最新更新之后 24 小时(如果没有后续更新)。存储每次收到特定文件夹的更新时,计时器都会重置为 24 小时。此状态邮件将被发送到拥有已更新文件夹的副本的其他公用文件夹存储中。

存储按照设定的日程检查是否需要发送状态邮件。默认情况下,此检查在协调世界时 00:15 和 12:15(格林威治标准时间)运行。因此,在文件夹更新后,存储可能在长达 36 小时之后才发送状态邮件。

如果公用文件夹存储收到有关文件夹的状态邮件(它指出发送方存储具有该文件夹的最新信息),则接收方存储将创建回填请求。如果更改号码显示为相等(或者接收方服务器上的更改号码较新),则不采取任何操作。

例如,当新公用文件夹存储首次启动时,会向支持公用文件夹层次结构的每个存储发送状态请求邮件。每个存储都将响应自己所跟踪的层次结构状态信息。新存储使用此信息来确定它应具有哪些副本(如果有)。然后,新存储可以根据需要发送回填请求以填充副本内容。