/ 中存储网

工作机制探索之邮件路由在Exchange Server 2007中的变化

2014-08-28 23:28:15 来源:中存储网

与以往的Exchange服务器版本相比,微软在Exchange Server 2007中的改进相当的多。这其中的许多点都被撰文详述,像只支持64位硬件,引入基于Windows PowerShell的Exchange管理外壳来作为新的脚本语言编写环境等等。但是,还有一些变化因为不是在每一个Exchange组织中都起作用,而没有受到广泛的关注。其中之一就是Exchange Server 2007对于路由组(routing group)使用上的变化。简单说就是Exchange Server 2007不再支持路由组这个概念。下面让我们具体来看看Exchange Server 2007是如何传输邮件的,以及您该如何在配置了多个路由组且装有老版本Exchange服务器的组织中部署Exchange Server 2007。

什么是站点
在发布Windows 2000之后,微软提供了一整套的为分布在不同物理位置的网络提供协同合作的工具:像活动目录站点(Active Directory Site),站点链接(site link),站点链接桥对象(site link bridge object)。这些对象把网络底层的基本概念和AD拓扑结构整合在一起。Windows使用这些信息来执行大量的操作。比如说,当一台服务器重新启动的时候,它会发送一条DNS请求来寻找本站点的域控制器(Domain Controller,DC),这是因为和与非本站点的DC的连接相比,与本站点的DC的连接将会更加可靠和快速。
您应当把站点当成一组IP子网的集合。站点和域的概念不一样。一个域可以跨越多个站点;一个站点也可以包含多个域。但是,Windows站点模式的出现意味着每一台电脑(无论服务器还是客户端)都必须是,也只能是一个站点的成员。当您搭建好一台新的AD森林,一个新的名为Default-First-Site的站点被自动创建,除非您手动创建新的站点,您的所有DC都会被放置在这个站点中。一旦您创建新的站点,任何一台计算机将会根据它们的IP地址被自动分配到对应的站点中。
站点链接是网络的一部分,它把相互独立的站点连接起来。每一个站点链接都有自己的连接成本(cost),Windows会使用最少的连接成本(least-cost)来建立特定的网络连接。比如说,Windows会使用您定义的站点链接来为AD复制寻找最有效的路径。我们的观点是,我们并不在乎两个站点之间是使用何种物理方式连接的,我们关心的是在它们之间是否存在链接。
站点和站点链接的定义按顺序被保存在Windows“知识一致性校验”(Knowledge Consistency Checker,KCC)中。不要把这里的KCC和Exchange Server 5.5的KCC混淆,也不要和Exchange Server 2003及Exchange 2000 Server站台复写服务(Site Replication Service,SRS)中的KCC混为一谈。Windows KCC主要是用来负责更新(包含每台DC存储位置的)系统拓扑图中的信息。一旦拓扑图和真正的网络结构有差距,复制时就会发生问题。
您可以通过AD活动和目录控制台(Active Directory Sites and Services)来创建新的站点和站点链接。正如图1所示,您先创建站点,再建立代表真正物理连接的链接。

图1:通过AD活动和目录控制台添加新的站点和站点链接

邮件路由的变化
Exchange Server 2003和Exchange 2000 Server允许用户在一个Exchange组织中定义多个路由组。在每一个路由组中,都有一台作为路由组主机(Routing Group Master)的服务器,以及一台或者多台路由组成员服务器。在一个路由组中,每一台成员服务器都保存一份的链接状态(link state)信息列表:一组标示链接起点,终点,连接成本以及状态的向量。您可以使用WinRoute工具来查看一台服务器上的链接状态信息列表的内容。要下载WinRoute工具,您可以访问以下链接:http://www.microsoft.com/downloads/details.aspx?FamilyID=C5A8AFBF-A4DA-45E0-ADEA-6D44EB6C257B&displaylang=en。通过这个工具,我们可以检测到一旦链路状态信息发生改变的时候,每台服务器是否更新了本地的链接状态信息列表。在这个过程中,一旦有任何服务器状态发生改变,它就会通知路由组主机,最后再由路由组主机把这些更新的信息发送给其他的成员服务器。
这种结构上的设计允许每台服务器能够灵活的更新它的状态链路信息,但是它却并不适用于大型网络。具体来说,我们很难从整个组织的链接状态信息列表中删除一些错误的或者损坏的信息。要达到这样的效果,我们必须首先关闭组织中每台服务器上的Microsoft Exchange Routing Engine服务(译者注:这样做是因为如果有一台机器没有关闭这个服务,它就会把旧的包含错误信息的列表复制给其他的服务器)。最后,在确保所有服务器上的Routing Engine服务都被关闭以后,您就需要在每台服务器上再启动这个服务,这样将使服务器重新创建一份包含最新信息的本地路由拓扑图。
除此之外,任何链接状态信息列表中的变化还将会花费一段不算短的时间才能复制到组织中的其他机器上,这将会导致路由信息改变的速度比它在组织中每台服务器上更新速度更快。另外,路由组之间还必须通过路由组连接器(Routing Group Connectors,RGC)相连接。在源路由组和目的路由组中,每个连接器必须各指定一个桥头服务器(bridgehead server)。实际上,对于路由的配置,RGC并不是非常的有用。
和Exchange Server 2003、Exchange 2000 Server一样,Exchange Server 2007也是使用SMTP作为主要的邮件传输协议。但是Exchange Server 2007对于邮件路由作了较大的改动,像简化了传输过程,增加了传输的可靠性。首先,在Exchange Server 2007中增加了中心传输服务器的角色(Hub Transport server role),它负责在外界互联网和本地的邮箱服务器之间传输邮件。比如说,如果Alice和Bob的邮箱分别存储在两台邮件服务器上,那么任何由Alice发向Bob的邮件都必须通过中心传输服务器。同样的,任何从Internet发来的邮件也必须通过中心传输服务器,即使它已经通过了边缘传输服务器(Edge Transport server)。甚至在只有一台邮件服务器的组织中,您仍然需要至少一台扮演中心传输服务器角色的机器。但是,考虑到中心传输服务器的角色可以和其他角色共存于一台物理设备上,这样您并不需要使用另外的物理设备。
一个中心传输服务器实际上就是负责它所在站点的邮件传输的桥头服务器;在任何站点的任何中心传输服务器可以直接和组织中另一台中心传输服务器对话。邮件服务器总是先尝试把发往外部的邮件发送到本站点的中心传输服务器,同时中心传输服务器必须接收发往本站点的邮件服务器的邮件。您不需要做任何额外的操作来达到这样的效果。一旦和邮件服务器所在同一站点的中心传输服务器出现问题,邮件服务器将会尝试通过AD站点拓扑图来查找最近的中心传输服务器。
在Exchange Server 2007中,微软将不再使用路由组相关的概念。但是倘若Exchange Server 2007是和Exchange 2000 Server或Exchange Server 2003共存的,Exchange Server 2007将会使用一个默认的路由组,它的名字是DWBGZMFD01QNBJR(正好是在字母表上,您把EXCHANGE12ROCKS的每个字母向前推算一位)。您添加的所有Exchange Server 2007服务器都将被放置在这个默认的路由组中。不支持把它们移动到其他的Exchange 2000 Server或者Exchange Server 2003的路由组中。如果在您的组织中有多个Exchange 2000/2003的路由组,您可能就要花些功夫使它们和Exchange Server 2007的路由组共存了。在安装Exchange Server 2007的时候,系统将会提示您去选择一台Exchange 2000/2003路由组内的服务器作为桥头服务器。这一步是强制进行的,因为系统将创建一个RGC来连接Exchange Server 2007路由组和已经存在的Exchange 2000/2003路由组。如果愿意,您也可以创建额外的RGC来更加全面的控制邮件路由。微软建议的方法是为每个已经存在的路由组创建指向Exchange Server 2007路由组的RGC,把它作为hub-spoke的路由拓扑的中心。使用这样的拓扑结构可以减少为到达目的地,一封邮件被传输的次数,提高传输的效率。
在Exchange Server 2007中,有下面这些关于站点的改变:
• 公用文件夹引用(Public folder referrals)被修改:Exchange Server 2003和Exchange 2000 Server使用了复杂的机制来为邮件客户端寻找成本最低(least-cost)的功用文件夹复本。在Exchange Server 2007中,这个过程被大大简化。Exchange信息存储(Information Store,IS)将会为所有它能够找到的公用文件夹数据库创建一个列表,然后按照访问成本(access cost)为它们排序。在同一站点里的数据库成本最低,其它站点的数据库的排名取决于站点与站点之间链接的成本。
• 为了传输信息到特定的邮箱,统一消息服务器(Unified Messaging servers)会使用站点的成员关系来寻找最合适的中心传输服务器。 
• 客户端访问服务器(Client Access servers)也会使用站点的成员关系来决定一个用户的访问是否应该被重定向到另一台客户端访问服务器上。比如说,用户A的邮箱被存储在站点一,但是她连接到站点二的客户端访问服务器,这时候站点二的客户端访问服务器会自动检测到这个用户的邮箱在站点一,然后将它重定向到站点一的客户端访问服务器。

邮件是如何被传输的
还记得我在前面提过的,每一封在Exchange Server 2007用户之间发送的邮件都必须通过中心传输服务器,即使他们在同一台邮箱服务器上。记住这一点,我们就可以开始研究一些关于Exchange Server 2007邮件路由的有趣的区别了。可以想象,Exchange Server 2007的邮件传输只会有两种情况:发件人和收件人在同一站点内,或者他们在不同的站点。
先来看看最简单的情况:两个用户在同一个邮箱服务器上。用户A发送的邮件被上传到Exchange IS上,逻辑上IS把它发送到中心传输服务器(实际上,邮箱服务器和中心传输服务器很可能是在同一台物理设备上),它再把邮件发送到用户B的邮箱里。虽然在这种情况中,站点信息看起来并不是非常重要,但是中心传输服务器仍然会去查询AD站点信息,来验证用户B的邮箱是否存在于同一站点。从这个例子中您可以看到,在同一台服务器上传输邮件和在同一个站点间传输邮件实际上是完全一致的。
更复杂点的——同时也更让人感兴趣的——情况是当发件人和收件人不在同一站点中。在这种情况下,发件人的邮件首先上传到他的邮箱服务器,在被发送到同一站点的中心传输服务器,它试图通过计算所有可能路径的成本,来找到一条通往目的站点的中心传输服务器所花费代价最小的路径。不论在什么情况下,Exchange路由引擎更倾向于使用直接的链接,这就意味着如果两条路径拥有同样的成本的话,路由引擎将会选择所经站点最少的路径。
因为原来设计站点和站点链接的目的是为了寻找本地服务,Windows并不认识为站点和站点链接设计的与服务相关的成本。但是,您可以在Exchange管理外壳中使用Set-AdSiteLink命令来为站点链接定义Exchange特定的成本值。当您设置完成后,Exchange就会使用这些值来选择最优路径。但是,其他Windows的服务(像AD复制)依旧是不认识Exchange特定的成本值的。
考虑到下面两个原因,当目的站点的中心传输服务器不能直接到达时,Exchange成本值就可以派上用场了。
• 当指向目的站点的链接不能正常工作。比如说有三个站点:A、B和C站点,每一站点都有和其他两个站点的链接。一般来说,一封邮件可以从一个站点A直接发送到另一个站点C,但是一旦当A到C的链接出现问题,中心传输服务器就可以把邮件从A站点发送到B站点,再传输到C站点。
• 当您搭建好一个中心站点,这有点类似于Exchange Server 5.5时代hub-spoke路由拓扑图中的中心站点。所有的邮件都从源站点的中心传输服务器发送到中心站点,再被发送到目的站点。对于这种拓扑结构的使用,在Exchange Server 2007的文档中有非常详细地描述,它警告称:“这种中心站点的设计只有当网络拓扑真正需要的时候才可以被使用,比如说当每个AD站点之前都存在防火墙,并且它阻止了SMTP中继(SMTP reply)的时候”(http://technet.microsoft.com/en-us/library/0f697cee-bcaa-4c69b80c-7a2afd1817d2.aspx)。要建立这样一个中心站点,您需要在Exchange管理外壳中使用Set-AdSite命令。

准备好一个Exchange 2000/2003和Exchange Server 2007共存的环境
当您向已经存在的Exchange组织中添加第一台Exchange Server 2007服务器时,系统会提示您在已知的路由组中选择一个桥头服务器。考虑到这样做是为了创建RGC,所以我们应当提前确保我们选择的服务器具备良好的连接性。所有在Exchange Server 2007服务器和老版本服务器之间传输的邮件都要通过这个RGC。所有的Exchange Server 2007服务器将会被放置在这个名为DWBGZMFD01QNBJR的特定路由组,我们不能把它们转移到其他的地方。考虑到不论各台服务器物理位置,所有的在Exchange Server 2007和老版本服务器之间传输的邮件都必须通过这个链接,这样做可能会导致不必要的路由。要解决这种尴尬,微软建议您在DWBGZMFD01QNBJR和目的路由组之间创建一个额外的RGC。您可以通过在Exchange管理外壳中使用New-RoutingGroupConnector命令来创建它。
您还应当考虑Exchange 2000/2003路由组中的链接状态更新信息。如果仅仅只有一个RGC,链接状态更新信息将不会成为问题。但是,如果您的组织中有多个连接器,链接状态更新信息将仅仅被发送到Exchange 2000 Server和Exchange Server 2003服务器上。因为Exchange Server 2007中心传输服务器并不认识链接状态更新信息,所以当Exchange 2000/2003向它发送的时候它也不会进行接收,这样就直接导致了即使一些连接器暂时不能正常工作,Exchange Server 2007中心传输服务器仍然会去尝试使用这些连接器来发送邮件。如果最后邮件还是能够正确到达目的地,只是多花费一些时间,这是不幸中的大幸了。最坏的情况要数邮件传输直接进入死循环。微软建议使用SuppressStateChanges注册表键值(更多细节,参阅http://technet.microsoft.com/en-us/library/875ae7f8-446d-4786-85d2-719ac7093cf6.aspx)来关闭连接器状态改变信息。在这样将会使组织内的Exchange 2000 Server和Exchange Server 2003服务器像Exchange Server 2007一样工作,因为它们将完全依赖于路由成本信息而不是链接状态信息来决定邮件路由。
当您完成从Exchange 2000 Server或者Exchange Server 2003向Exchange Server 2007的迁移之后,您需要去删除这些老的服务器。这将使它们自动从路由拓扑图中消失。但是,当删除老的Exchange路由组时,还是需要手工删除RGC,这也包括用来连接Exchange Server 2007特定路由组和组织中其他服务器的RGC。这虽然是一个非常直观的操作,它却需要您仔细观察邮件的传输,以便确保邮件没有停滞在某一台服务器上,也没有因为某个连接器或桥头服务器的消失而停止传输。

一个更加先进的邮件系统
随着微软在Exchange Server 2007中加入了中心传输服务器角色,取消了路由组的使用,邮件路由的变化非常明显,但是这样的改变是积极的。它使得一套合理的AD站点设计会使邮件的传输更加有效。如果您不认为您的站点设计完全反映了底层的网络结构,您应当开始纠正,以适应未来的Exchange Server 2007的升级计划。