Sun Java System Messaging Server 6.3 管理指南

20.15 将邮箱迁移或移动到新系统

有时必须将现有邮箱从一个 Messaging Server 系统移动到另一个 Messaging Server 系统中。这通常发生于以下情况:

Messaging Server 提供了若干种将邮箱从一个系统移动到另一个系统的方法。每种方法都有它的优点和缺点,这将在以下小节中进行说明。下面的小节介绍了这些方法:

20.15.1 在联机状态下将用户邮箱迁移到其他 Messaging Server

可以使用此过程将消息存储从旧版本的 Messaging Server 迁移到较新版本的 Messaging Server,也可以将邮箱从一个 Sun Messaging Server 消息存储移动到另一个 Sun Messaging Server 消息存储。此过程适用于 iPlanet Messaging Server 5.0 和更高版本。不能使用此过程从早期版本的 Messaging Server 或非 Sun Microsystems 消息存储中移动邮件。

使用此过程移动邮箱的优点如下所示:

使用此过程移动邮箱的缺点如下所示:

20.15.1.1 增量邮箱迁移

增量迁移具有许多优点,可以安全有效地将消息存储移动到其他系统中或升级到新系统;增量迁移允许在保留旧后端消息存储的同时构建新的后端消息存储系统。您可以随后测试新系统,迁移一些友好用户,然后再次测试新系统。在适应了新系统、新配置和迁移过程之后,即可开始迁移实际的商业用户。可以将这些用户分成单独的备份组,这样在迁移过程中,只有此组的成员在短时间内处于脱机状态。

联机增量迁移的另一个优点是,不必在升级失败时规划系统范围的回退。回退是用于恢复对系统所做更改的过程,以便将系统恢复到原始工作状态。进行迁移时,您必须针对故障进行规划,这意味着必须对迁移中的每个步骤进行规划,以便将系统恢复到先前的工作状态。

脱机迁移的问题是,在完成所有迁移步骤并重新启用服务之前,无法确定迁移是否成功。如果系统出现故障且无法立即修复,则需要回退所有已执行的步骤。这可能会给您带来压力,并且需要花费一些时间,而在这段时间内用户仍处于脱机状态。

使用联机增量迁移时,您需要执行以下基本步骤:

1. 构建与旧系统并存的新系统,以使两个系统可以独立运行。

2. 配置旧系统,使之与新系统并存。

3. 迁移一组友好用户,并测试新系统及其与旧系统的并存情况。

4. 对旧系统上的用户进行分组,并根据需要将这些组逐个迁移到新系统中。

5. 对旧系统进行反汇编。

由于两个系统将会并存,因此在迁移到新系统之前,您将有时间来测试和适应新系统。如果必须执行回退过程(这种可能性很小),则只需对步骤 2 和 步骤 4 进行规划。由于未涉及到用户数据,因此步骤 2 很容易恢复。在步骤 4 中,回退过程会将用户状态恢复为活动状态,并将其 mailhost 属性恢复为旧主机。不必执行系统范围的回退。

20.15.1.2 联机迁移概述

在联机状态下迁移邮箱的过程非常简单。但要确保在迁移过程中传输到邮箱的邮件(在 MTA 通道队列中等待传送)不会丢失,则情况会比较复杂。一种解决方案是,以 held 状态保留迁移过程中发送的邮件,并等待各个通道队列中的邮件传送出去。但是,邮件可能会由于系统问题或特定用户超过配额而阻塞在队列中。在这种情况下,您必须在迁移邮箱之前解决此问题。

您可以采取各种措施来降低邮件丢失的可能性,并确保邮件不会阻塞在通道队列中,但这些措施会使迁移过程变得更加复杂。

此过程中的步骤的顺序和必要性会有所不同,具体取决于部署以及是否不允许丢失发送到每个邮箱的每封邮件。本节介绍了与这些步骤相关的理论和概念。您必须了解每个步骤,并根据您的特定部署来确定要执行的步骤以及执行顺序。以下是对移动邮箱过程的概述。此过程可能会根据部署的不同而有所不同。

  1. 阻止用户访问要移动的邮箱。

  2. 暂时保留发送到要移动的邮箱的邮件。

  3. 确保邮件未阻塞在通道队列中。

  4. 将用户的 mailhost 属性更改为新的邮箱位置。

  5. 将邮箱移动到新位置。

  6. 释放所保留的邮件,以便将其传送到新邮箱,并使外来邮件能够传送到已迁移的邮箱。

  7. 检查旧的消息存储,以查看在迁移后是否将邮件传送到此存储中。

  8. 取消阻止用户对邮箱的访问。

Procedure在保持联机状态下将用户邮箱从一个 Messaging Server 迁移到另一个 Messaging Server 中

开始之前

此类型迁移的要求如下所示:


注 –

某些步骤只有在将邮件服务器从早期版本升级到较高版本时才适用。如果只是将邮箱从一个消息存储迁移到另一个消息存储,则这些步骤可能不适用。适用于迁移整个系统的步骤将会特别指出。


  1. 在源系统中,使用 backup-groups.conf 文件将要移动的用户条目分为均等的备份组。

    此步骤是邮箱迁移(将在此过程后面执行的步骤 8)的准备过程。有关详细说明,请参见20.12.2 创建备份组

    也可以将用户名置于文件中,然后在 imsbackup 命令中使用 -u 选项。

  2. 通知要移动的用户在移动完成之前无法访问他们的邮箱。

    确保要移动的用户在数据移动之前已从邮件系统注销。(请参见20.13 监视用户访问。)

  3. 在后端消息存储和 MMP 系统上将验证缓存超时设置为 0,并在 MTA 上将 ALIAS_ENTRY_CACHE_TIMEOUT 选项设置为 0。

    1. 在包含要移动的邮箱的后端消息存储上,将验证缓存超时设置为 0。


      configutil -o service.authcachettl -v 0
      

      此步骤和步骤 7(将 mailUserStatus 更改为 hold)将立即阻止用户在迁移期间访问其邮箱。

    2. 在所有 MMP 上,将 LDAP 和验证缓存超时设置为 0。

      ImapProxyAService.cfgPopProxyAService.cfg 中,将 LdapCacheTTLAuthCacheTTL 设置为 0。

    3. 在托管 MTA(可将邮件插入到要迁移的邮箱中)的任意 Messaging Server 上,将 ALIAS_ENTRY_CACHE_TIMEOUT 选项设置为 0。

      托管 MTA(可将邮件插入到要迁移的邮箱中)的 Messaging Server 通常是后端消息存储。但是,如果系统使用的是 LMTP,则此系统将是入站 MTA。检查配置以确保正确无误。

      重置 /msg_svr_base /config/option.dat 中的 ALIAS_ENTRY_CACHE_TIMEOUT 可以强制 MTA 避开缓存而直接查看 LDAP 条目,从而使中间通道队列(例如,conversionreprocess 通道)可以查看所移动用户的新 mailUserStatus (hold) ,而不是过期的缓存信息。ALIAS_ENTRY_CACHE_TIMEOUT 位于 option.dat 中。

    4. 重新启动重置了缓存的系统。

      必须重新启动系统以使上述更改生效。有关说明,请参见4.4 启动和停止服务

  4. 确保源 Messaging Server 和目标 Messaging Server 已启动并且正在运行。

    源 Messaging Server 必须能够将外来邮件路由到新的目标服务器。

  5. 将要移动邮箱的所有用户条目的 LDAP 属性 mailUserStatusactive 更改为 hold

    更改此属性可以使外来邮件保留在 hold 队列中,并可防止通过 IMAP、POP 和 HTTP 访问邮箱。通常以用户组的形式移动用户。如果移动单个域的所有邮箱,则可以使用 mailDomainStatus 属性。

    有关 mailUserStatus 的更多信息,请参见《Sun Java Communications Suite 5 Schema Reference》中的“mailUserStatus”

  6. 确保发送到迁移邮箱的邮件未阻塞在 ims-mstcp_lmtp* 通道队列中(如果已部署 LMTP)。

    使用以下命令查看发送到迁移用户的邮件是否存在于通道队列目录树中,并且处于 held 状态(查看 .HELD 文件):


    imsimta qm directory -to=<user_address_to_be_migrated> -directory_tree
    
    imsimta qm directory -to=<user_address_to_be_migrated> -held -directory_tree

    如果此队列中有邮件,请在稍后运行相同命令来查看 MTA 是否已将这些邮件移出队列。如果有未移出队列的邮件,则必须在迁移之前解决此问题。这种问题很少发生,但可能的原因有以下几点:收件人邮箱超过配额、邮箱被锁定(可能由于用户已登录并且正在移动邮件)、LMTP 后端服务器未响应、网络或名称服务器问题等等。

  7. 更改要移动的用户条目以及任何邮件组条目中的 LDAP 属性 mailHost*。

    使用 ldapmodify 命令将条目更改为新的邮件服务器。使用 Messaging Server 或目录服务器附带的 ldapmodify。不要使用 Solaris 操作系统的 ldapmodify 命令。

    * 如果关闭了旧邮件主机,则只需更改邮件组条目中的 mailHost 属性。可以将此属性更改为新的邮件主机名,也可以干脆删除此属性。对于邮件组而言,mailHost 是可选的。具有 mailHost 意味着只有该主机可以进行组扩展;而忽略 mailHost(此种情况较为常见)则意味着所有 MTA 都可以进行组扩展。请注意,邮件组条目不包含要迁移的邮箱,通常甚至没有 mailhost 属性。

    有关 mailhost 的更多信息,请参见《Sun Java Communications Suite 5 Schema Reference》中的“mailHost”

  8. 将邮箱数据从源 Messaging Server 消息存储移动到目标 Messaging Server 消息存储,并记录开始时间。

    使用 imsbackup 实用程序备份邮箱,并使用 imsrestore 实用程序将其恢复到新的 Messaging Server 中。例如,要将邮箱从名为 oldmail.siroe.com 的 Messaging Server 5.2 系统迁移到 newmail.siroe.com,请在 oldmail.siroe.com 上运行以下命令:


    /server-root/bin/msg/store/bin/imsbackup -f- /instance/group     \
    | rsh newmail.siroe.com /opt/SUNWmsgsr/lib/msg/imsrestore.sh   \
    -f- -c y -v 1
    

    您可以运行多个并发的备份和恢复会话(每组一个),以使传送到新消息存储的速率达到最大化。有关 imsbackupimsrestore 实用程序以及20.12 备份并恢复消息存储的更多信息,请参见《Sun Java System Messaging Server 6.3 Administration Reference》中的“Command Descriptions”


    注 –

    记录 imsbackup 开始运行的时间戳,用于以后的传送验证。


  9. 系统升级的条件式步骤)如果邮箱迁移是升级(从早期版本的 Messaging Server 升级到当前版本)过程的一部分,请将当前版本的 Messaging Server 设置为新的系统默认 Messaging Server。

    oldmail.siroe.com 的 DNS A 记录更改为指向 newmail.siroe.com(此服务器负责先前托管在 oldmail.siroe.com 上的域)。

  10. 启用用户对新消息存储的访问。

    如果适用,将 LDAP 属性 mailUserStatusmailDomainStatus 设置为将其更改为 hold 之前的任意值(如 active)。

  11. 释放所有源 Messaging Server 上处于 held 状态的邮件。

    任何可能保留外来邮件的系统都需要运行以下命令,以释放所有用户邮件:


    imsimta qm release -channel=hold -scope
    

    其中,scope 可以是 all(释放所有邮件)、user(用户 ID)或 domain(用户所在的域)。

  12. 将验证缓存超时和 ALIAS_ENTRY_CACHE_TIMEOUT 选项重置为默认值或所需值,然后重新启动系统。

    此时,您已经迁移了需要迁移的所有用户邮箱。在继续操作之前,请确保 LDAP 中没有使用旧系统作为 mailhost 创建的新条目;如果有,请迁移这些条目。此外,还要确保无法通过修改置备系统来创建此类条目。

    还要将 preferredmailhost 属性更改为新邮件主机的名称。

    对于后端消息存储,请将验证缓存超时设置为以下值:


    configutil -o service.authcachettl -v 900
    

    对于 MMP,请在 ImapProxyAService.cfgPopProxyAService.cfg 中将 LdapCacheTTLAuthCacheTTL 选项设置为 900。

    对于 MTA,请将 ALIAS_ENTRY_CACHE_TIMEOUT 选项设置为 600。ALIAS_ENTRY_CACHE_TIMEOUT 位于 option.dat 中。

    必须重新启动系统以使上述更改生效。有关说明,请参见4.4 启动和停止服务

  13. 确保用户客户端将指向新的邮件服务器。

    升级完成后,通过用户的邮件客户端程序使用户指向新服务器(在此示例中,使用户从 oldmail.siroe.com 指向 newmail.siroe.com)。

    一种替代方法是使用邮件多路复用器 (MMP),这样用户可以不必将其客户端直接指向新的邮件服务器。MMP 将从 mailHost 属性(存储在 LDAP 用户条目中)获取该信息,并自动将客户端重定向到新服务器。

  14. 一切正常运行之后,请验证在迁移后没有向旧消息存储中传送任何邮件。

    转到旧消息存储并运行 mboxutil -l 以列出邮箱。检查最后的邮件传送时间戳。如果在迁移时间戳(运行 imsbackup 命令时的日期戳)之后传送了邮件,请使用备份和恢复命令迁移这些邮件。由于提供了准备步骤,因此在迁移后极少会出现传送邮件的情况。

    在理论上,邮件可能会在队列中阻塞一段时间,由 notices 通道关键字指定天数和小时数(请参见10.10.4.3 设置通知邮件传送间隔)。

  15. 删除新消息存储上的重复邮件,然后运行 relinker 命令。

    此命令可以释放新消息存储上的磁盘空间。请参见20.11.7 由于重复存储相同的邮件而减少消息存储大小

  16. 从迁移的源存储中删除旧邮件,然后从旧存储上的数据库中删除用户。

    运行 mboxutil -d 命令。(请参见20.11.2.1 mboxutil 实用程序。)

Procedure使用 IMAP 客户端移动邮箱

无论何时需要将邮件从一个邮件服务器迁移到其他邮件服务器,都可以使用此过程。使用此方法移动邮箱之前,请考虑该方法的优缺点。

使用 IMAP 客户端移动邮箱的优点如下所示:

使用 IMAP 客户端移动邮箱的缺点如下所示:

  1. 安装并配置新 Messaging Server。

  2. local.store.relinker 设置为启用。

    这样可以减小重复存储相同的邮件而增加的新系统上的消息存储大小。有关更多信息,请参见20.11.7 由于重复存储相同的邮件而减少消息存储大小

  3. 在新 Messaging Server 上置备用户。

    您可以使用 Delegated Administrator 执行此操作。在新系统上置备用户后,新到达的邮件将被立即传送到新的收件箱。

  4. 让用户配置其邮件客户端以查看新旧 Messaging Server 邮箱。

    这可能涉及客户端上新电子邮件帐户的设置。有关详细信息,请参见邮件客户端文档。

  5. 指导用户将文件夹从其旧 Messaging Server 拖到其新 Messaging Server。

  6. 验证用户是否已将所有邮箱迁移到新系统,然后关闭旧系统上的用户帐户。

Procedure使用 moveuser 命令移动邮箱

无论何时需要将邮件从一个邮件服务器迁移到其他邮件服务器,都可以使用此过程。将 IMAP 邮箱从非 Sun Messaging Server 迁移到 Sun Java System Messaging Server 时,此过程非常有用。使用此方法移动邮箱之前,请考虑该方法的优缺点。

使用 moveuser 命令移动邮箱的优点如下所示:

使用 moveuser 命令移动邮箱的缺点如下所示:

  1. 安装并配置新 Messaging Server。

  2. local.store.relinker 设置为启用。

    这样可以减小重复存储相同的邮件而增加的新系统上的消息存储大小。有关更多信息,请参见20.11.7 由于重复存储相同的邮件而减少消息存储大小

  3. 停止向邮件服务器传入邮件。

    将用户属性 mailUserStatus 设置为 hold

  4. 如果需要,在新 Messaging Server 上置备用户。

    如果从以前版本的邮件服务器迁移,则可以使用同一 LDAP 目录和服务器。moveuser 可以更改每个用户条目中的 mailhost 属性。

  5. 运行 moveuser 命令。

    要根据 Directory Server siroe.com 中的帐户信息将所有用户从 host1 移动到 host2,请执行以下命令:


    MoveUser -l \
    "ldap://siroe.com:389/o=siroe.com???(mailhost=host1.domain.com)" \
    -D "cn=Directory Manager" -w password -s host1 -x admin \
    -p password -d host2 -a admin -v password
    

    有关 moveuser 命令的详细信息,请参见《Sun Java System Messaging Server 6.3 Administration Reference》中的“MoveUser”

  6. 启用用户对新邮件服务存储的访问。

    将 LDAP 属性 mailUserStatus 设置为 active

  7. 关闭旧系统。

Procedure使用 imsimport 命令移动邮箱

此过程专用于将邮箱从 UNIX /var/mail 格式文件夹移动到 Sun Java System Messaging Server 消息存储。但是,如果您正在从中迁移的邮件服务器可以将 IMAP 消息存储转换为 UNIX /var/mail 格式,则可以使用 imsimport 命令将邮件迁移到 Sun Java System Messaging Server。使用此方法移动邮箱之前,请考虑该方法的优缺点。

使用 imsimport 命令移动邮箱的优点如下所示:

使用 imsimport 命令移动邮箱的缺点如下所示:

  1. 安装并配置新 Messaging Server。

  2. local.store.relinker 设置为启用。

    这样可以减小重复存储相同的邮件而增加的新系统上的消息存储大小。有关更多信息,请参见20.11.7 由于重复存储相同的邮件而减少消息存储大小

  3. 如果需要,在新 Messaging Server 上置备用户。

    您可以使用 Delegated Administrator 执行此操作。现在还不要切换至新系统。

  4. 禁用用户对新旧邮件服务存储的访问。

    mailUserStatus LDAP 属性设置为 hold。用户的邮件将被发送到 hold 队列中并且不允许通过 IMAP、POP 和 HTTP 访问邮箱。存储服务器上的 MTA 和 Message Access Server 必须符合此要求。该设置将覆盖所有其他 mailDeliveryOption 设置。

  5. 如果现有邮件服务器的邮件存储还不是 /var/mail 格式,请将其转换为 /var/mail 文件。

    请参见第三方邮件服务器文档。

  6. 运行 imsimport 命令。

    例如:


    imsimport -s /var/mail/joe -d INBOX -u joe
    

    有关 imsimport 命令的详细信息,请参见《Sun Java System Messaging Server 6.3 Administration Reference》中的“imsimport”

  7. 启用用户对消息存储的访问。

    将 LDAP 属性 mailUserStatus 设置为 active

  8. 启用用户对新邮件服务存储的访问。

  9. 关闭旧系统。