» 技术文章 » 操作系统 » Windows 7 » Exchange 问答:迁移邮箱

迁移 Exchange 邮箱并保证邮箱安全是一项很棘手的业务,尤其是跨林或在域服务器之间迁移邮箱。在本文中,Henrik Walther针对Exchange中迁移邮箱的操作中的各种问题进行了解答。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

迁移 Exchange 邮箱并保证邮箱安全是一项很棘手的业务,尤其是跨林或在域服务器之间迁移邮箱。

虚拟化的 Exchange

问:我们想要在群集化的 Hyper-V 服务器上部署 Exchange 2010 消息传送解决方案,并计划通过数据库可用性分组 (DAG) 来保护邮箱数据库。我们注意到在 TechNet 文档的 Exchange 2010 要求部分有以下说明,因此想听听你们的看法:

“Microsoft 不支持将 Exchange 高可用性解决方案(数据库可用性分组 [DAG])与基于虚拟机监控程序的群集、高可用性或迁移解决方案结合使用。只有在硬件虚拟化环境没有采用群集化的根服务器时,这种环境才支持 DAG。”

答:正如以上内容所述,将 Exchange 2010 DAG 与虚拟化高可用性 (HA) 结合使用不受支持。您必须使用应用程序级 HA 或虚拟化 HA。对于 Exchange 2010,我们推荐使用应用程序级 HA。

如果您只有群集化的根服务器并需要使用 DAG,则可以将 DAG 成员存储在群集化的 Hyper-V 根服务器上 - 只要您禁用了各个虚拟 DAG 成员服务器的所有虚拟化 HA。在您阅读此内容时,TechNet 文档应当已做更新,反映了这种新的支持方式。

负载平衡 Exchange

问:我们当前正在设计新的 Exchange 2010 基础结构,已经决定使用硬件负载平衡器来提供高可用性,并且在 CAS 阵列中的客户端访问服务器之间分配负载。为了减少 CAS 服务器上的 SSL 工作负载,并充分利用相关方法(如 Cookie 和 SSL-ID),我们需要将 SSL 工作负载转移到硬件负载平衡器上。

我们知道为 Outlook Web Access (OWA)、Outlook Anywhere (OA) 和 Exchange Web Services (EWS) 转移 SSL 工作负载是可行的,但 Exchange ActiveSync (EAS) 是否支持此类操作呢?我这么问是因为我知道如如何在 Exchange Server 2007 中为 Outlook Web Access 配置 SSL 减负功能中所述,此项功能在 Exchange 2007 中是不受支持的。

答:实际上,对于 Exchange 2007 和 Exchange 2010,为 EAS 转移 SSL 工作负载都是受支持的。Exchange 2007 文档从未进行更新以反映此支持。

请记住,此项支持仅适用于入口(对于 CAS 服务器,是在面向 Internet 的站点中),而不适用于 CAS 到 CAS 代理的情况。

跨林迁移

问:我们当前正准备执行从 Exchange 2003 到 Exchange 2010 的跨林迁移。我们已经建立了一个模拟生产环境的实验室环境,以确保事情像预期的那样顺利进行。

首先,我们按照 Exchange 2010 TechNet 文档(在 Shell 中使用 Prepare-MoveRequest.ps1 脚本为跨林迁移准备邮箱)中的说明,准备了包含有效 Active Directory 对象的目标林。脚本运行成功,我们能够看到目标林中创建了 AD 对象,但是当我们尝试使用以下命令迁移原始邮箱时,收到了如图 1 所示的错误消息:

New-MoveRequest -Identity 'cotestuser1@contoso.com -RemoteLegacy -TargetDatabaseMDB01 -RemoteGlobalCatalog 'DC1.contoso.com' -RemoteCredential $Cred -TargetDeliveryDomain 'fabrikam.com'

图 1 跨林邮箱迁移错误

您知道是什么原因导致了此错误吗?

答:真得很巧 - 刚刚几个月前,我在执行从 Exchange 2003 到 Exchange 2010 的跨林迁移时也碰到了这个问题。在 Dmitri Gavrilov(Exchange 产品组 Exchange 邮箱团队的首席开发主管)的帮助下,我发现这是因为在两个 Active Directory 林之间没有 NetBIOS 解析。

使用 New-MoveRequest cmdlet 进行跨林邮箱迁移时,目标林中运行命令的 Exchange 2010 服务器必须能够使用其 NetBIOS 名称访问 Exchange 2003 组织中的源邮箱服务器。这是因为 New-MoveRequest cmdlet 会尝试使用服务器 LegacyDN 连接到源服务器,而该 LegacyDN 通常只包含 NetBIOS 名称。因此,您必须设置 WINS 或使用主机文件来消除此错误消息。
 

病急乱投医

问:我曾经在多处了解到,使用硬件负载平衡器提供 HA,以及在内部网络上的所有客户端访问服务器之间进行 Outlook 客户端负载分配时,必须打开以下端口,以便 Outlook 连接能够正常运行:TCP 终结点映射器 (TCP - 143) 和动态 RPC 范围的 TCP/UDP -1024-65535。是这样吗?我认为 Exchange 2010 不支持用户数据报协议 (UDP)。

答:您说对了。Exchange 2010 不再支持 UDP。其实您不必打开 UDP,仅仅 TCP 就够了。这对于 Outlook 2003 也同样适用,尽管 Outlook 最开始尝试使用 UDP 通知。如果它看到 Exchange 服务器不响应 UDP,会转而使用 TCP 来轮询 Exchange 服务器。问题在于,处于联机模式的 Outlook 2003 客户端每 60 秒才轮询一次,这就会导致以下问题:

  • 外发电子邮件在发件箱里最长会滞留一分钟。
  • 新的电子邮件最长会相隔一分钟才到达收件箱。
  • 从文件夹中删除的项最长需要一分钟才会从文件夹中消失。
  • 从一个文件夹移动到另一个文件夹的项最长需要一分钟才会从原始文件夹中消失。

如果您的 Outlook 2003 客户端处于联机模式,需要按照以下知识库文章中所述的步骤修复这个问题:如果您使用的是 Exchange 2010 邮箱,则在 Outlook 2003 中,需要花费很长时间收发电子邮件消息

邮箱保护

问:我目前正在设计 Exchange 2010 基础结构。其中一个要求就是要在所有级别上具备 HA,因此我们会使用 DAG 和客户端访问服务器(用一个客户端访问阵列和一个冗余硬件负载平衡器)保护邮箱数据库。

我们还计划使用 Forefront Threat Management Gateway (TMG) 阵列将客户端访问服务器发布到 Internet。关于如何以适当的方式将 CAS 服务器发布到 Internet,我不太确定。我们是否只需将 ISA Web 发布规则指向内部网络上的硬件负载平衡器,然后让硬件负载平衡器在 CAS 服务器之间分配客户端流量就可以了?
 

答:问得好。我来做个解释。使用 TMG(此处也可以是 UAG)发布 Exchange 2010 CAS 服务器时,可以使用 TMG 自带的 Web 服务器场的负载平衡功能。不要只将 Web 发布规则指向内部网络上的硬件负载平衡器。

在一个典型的场景中,当 TMG 接收到客户端请求时,会将 IP 头中的源 IP 地址字段更改为其内部接口中配置的 IP 地址。这意味着所有从 TMG 通过代理传递到硬件负载平衡器的客户端请求都显示为来自同一客户端 IP。这会使 HLB 将所有客户端请求发送给同一个 CAS 服务器,而不是将它们分散到 Exchange 2010 CAS 阵列中不同的 CAS 服务器上。

可能有人会说,您只需将代理请求行为由“使请求显示为来自 ISA 服务器计算机”改成“使请求显示为来自初始客户端”就可以了(如图 2 中所示),但是没那么简单。如果您这么做,就需要在每台 CAS 服务器上将 TMG 设置为默认网关(或使用静态路由,请参见图 2),这会带来其他问题。无论如何,大多数企业还使用了 NAT,这意味着源 IP 会显示为来自同一客户端(NAT 设备的 IP 地址),即使您在 CAS 服务器上将 TMG 设置为默认网关也是如此。

图 2 TMG 代理请求行为

尽管 TMG 提供了一层额外的安全保护,使您能够在客户端通过代理传递到 CAS 服务器之前预先对这些客户端进行身份验证,但还应注意:在相关性方面,TMG Web 服务器场负载平衡功能具有与 Windows 网络负载平衡相同的局限性。它实际上使用了 Windows NLB 组件,这意味着您被局限到了基于 IP 的源相关性,而无法使用相关性方法(如 Cookie 或 SSL-ID)。

迁移中的邮箱

问:我们已经在包含一个根域和多个子域的 Active Directory 林中部署了 Exchange 2010。在每个子域中都有 Exchange 2010 服务器,有时候我们需要在不同域的邮箱服务器之间迁移邮箱。我们尽量使用 Exchange 命令行管理程序命令。

我们还要使用 New-MoveRequest cmdlet 在子域之间迁移邮箱,但是当我们这么做时,我们看不到其他域中的邮箱。命令可以顺利完成,但是未列出邮箱。而且,因为通过 Exchange 命令行管理程序无法看到邮箱,我们在尝试迁移邮箱时会收到错误提示。您知道发生了什么吗?

答:使用 Exchange 2010 命令行管理程序时,默认的收件人范围设置为域级。这意味着当运行像 Get-Mailbox cmdlet 这样的命令时,只会列出本地的收件箱。要将收件人范围更改为整个林,您必须运行以下命令(参见图 3):Set-ADServerSettings -ViewEntireForest:$true

图 3 更改默认收件人范围