上一页    目录    索引    下一页
iPlanet Messaging Server 5.2 管理员指南

第 5 篇 MTA 概念


本章描述 MTA 的基本概念。本章由以下部分组成:


MTA 功能

邮件传送代理,或 MTA图 5-2),是 Messaging Server 的一个组件(图 5-1),它可执行下列功能:

图 5-1 iPlanet Messaging Server -简化的组件视图(Messenger Express 未显示)

图 5-2 MTA 体系结构


MTA 体系和邮件流程概述



本节提供 MTA 体系和邮件流程简短概述(图 5-2)。


Dispatcher 和 SMTP 服务器(从属程序)
通过 SMTP 会话,邮件从 Internet 或 Intranet 进入 MTA。当 MTA 收到 SMTP 连接请求时,MTA Dispatcher(多线程连接发送代理)执行 从属程序(tcp_smtp_server)来处理 SMTP 会话。当其它会话请求时,Dispatcher 激活 SMTP 服务器程序处理每个会话。对于每个进入的邮件,Dispatcher 和从属程序一起完成许多不同的功能。三个基本功能是:

有关详细信息,请参阅“Dispatcher”


入队
在传递的这一阶段许多任务被激活,但主要的任务是:


通道
通道是用于邮件处理的基本 MTA 组件。一个通道代表了与另一系统(如另一个 MTA、另一个通道或本地邮件存储库)的通讯连接。当邮件到达时,不同的邮件按照邮件的来源和目的地的不同,需要不同的路由和处理。例如,对传递到本地邮件存储库的邮件的处理有别于传递到 internet 邮件的处理,而后者又有别于发送到同一邮件系统中的另一个 MTA 的邮件的处理。通道为每个连接所需的处理和路由提供了定制机制。在默认安装中,大多数邮件进入这样一个通道,它可以处理 internet、intranet 和本地邮件。

特殊的情况下也可创建专用的通道。例如,假定某个 internet 域处理邮件非常慢,导致发往该域的邮件阻塞 MTA。可以建立一个专用通道以提供对那些发往缓慢域的邮件的特殊处理,从而缓解系统中该域的瓶颈问题。

地址中域部分决定了邮件在那个通道入队。阅读域并确定适当通道的机制称为重写规则(参阅“重写规则”)。

通道通常由一个通道队列和一个称为主程序的通道处理程序构成。当从属程序将邮件传递到适当的通道队列后,主程序就开始执行相应的处理并路由。包含有重写规则通道的详细说明和配置在 imta.cnf 文件中。下面所示为一个通道进入的例子:

tcp_intranet smtp mx single_sys subdirs 20 noreverse maxjobs 7 SMTP_POOL maytlsserver allowswitchchannel saslswitchchannel tcpauth
tcpintranet-daemon

第一个词,如此例中的 tcp_intranet,是通道名称。最后一个词称为通道标记。中间的词称为通道关键字,用以指明如何处理邮件。数百个不同的关键字使邮件可得到不同方式处理。在 iPlanet Messaging Server Reference Manual第 8 篇 “配置通道定义”有通道关键字的完整描述。


邮件传递
邮件经过处理后,主程序沿着邮件的传递路径向下一站发送邮件。这里的“下一站”可能是既定收件人的信箱,另外的 MTA,甚至另一个通道。图中虽然没有表示出通往另一个通道的转发,但这确是一种常见情况。


Dispatcher



此 Dispatcher 是一个多线程调度代理允许若干多线程服务器进程共享担负 SMTP 连接服务的责任。当使用 Dispatcher 时,可以有几个多线程 SMTP 服务器进程同时运行并连接到同一的端口。此外,每个服务器都可以有一个或多个有效的连接。

Dispatcher 的作用像是配置中所列 TCP 端口的中央接收器。对于每项定义的服务,Dispatcher 可创建一个或多个 SMTP 服务进程以便在连接建立之后处理这些连接。

一般来说,当 Dispatcher 收到一个已定义 TCP 端口的连接时,它会为该端口的服务查找空闲的工作进程存储池,并为新连接选择最佳的候选端口。如果没有适合的候选者,在配置允许的情况下,Dispatcher 可以创建一个新的工作进程以处理此连接以及后续的连接。Dispatcher 也可能创建一个新的工作进程,以等待将来的外来连接。有多个配置选项可以用于设置 Dispatcher 对各种服务的控制,特别是控制工作进程的个数以及每个工作进程处理的连接个数。

要获得更多信息,请参阅“Dispatcher 配置文件”


服务器进程的创建与终止

Dispatcher 内的自动内务管理功能控制着创建新的服务器进程和终止旧的或空闲的服务器进程。控制 Dispatcher 功能的基本选项是 MIN_PROCSMAX_PROCSMIN_PROCS 选项可使一定数量的服务器进程处于就绪状态以等待处理外来的连接,从而提供有保证的服务级别。另一方面,MAX_PROCS 选项可用来为指定的服务设置允许几个服务器进程并行工作的上限。

可能出现的情况是,因为服务器进程已在处理它所能承担的最大数量的连接,或因为这个进程已经被安排终止,所以当前运行的服务器进程可能无法接受任何连接。在这种情况下,Dispatcher 会创建额外的进程以帮助处理未来的连接。

MIN_CONNSMAX_CONNS 选项可提供一种有助于在各个服务器进程间分配连接的机制。MIN_CONNS 用以指定将服务器进程标记为“足够忙”的连接的数量,而 MAX_CONNS 则用以指定服务器进程可被标记为“最忙”的连接的数量。

一般来说,在当前服务器进程的个数小于 MIN_PROCS时,或者当所有现有服务器进程都“足够忙”(即每个服务器进程拥有的当前活动的连接个数至少达到 MIN_CONNS)的情况下,Dispatcher 将创建一个新的服务器进程。

如果某服务器进程被意外地取消,例如被 UNIX 系统 kill 命令删除,当新的连接到来时,Dispatcher仍然会创建新的服务器进程。

有关 Dispatcher 配置方面的信息,请参阅“Dispatcher 配置文件”


启动和停止 Dispatcher

启动 Dispatcher 时,请执行下列命令:

imsimta start dispatcher

这个命令涵盖和废弃任何其他的 imsimta start 命令,即此前被用来启动 Dispatcher 被配置来对之进行管理 MTA 组件的命令。特别需要指出的是,不应再使用 imsimta start smtp。任何执行被废弃命令的尝试会导致 MTA 发出警告信息。

若需关闭 Dispatcher,请执行下列命令:

imsimta stop dispatcher

在 Dispatcher 被关闭的情况下服务器进程会发生什么事情,取决于底层的 TCP/IP 包。如果修改了应用于 Dispatcher 的 MTA 配置或选项,则必须重新启动 Dispatcher,以便使新的配置或选项生效。

重新启动 Dispatcher 时,请执行下列命令:

imsimta restart dispatcher

重新启动 Dispatcher 具有关闭当前运行的 Dispatcher,然后立即启动一个新的 Dispatcher 的效果。


重写规则



重写规则用于确定下列:

每个重写规则由一个模式和一个模板的组成。模式一个字串,用于与地址的域部分匹配。模板则指定若域部分匹配成功须采取的行动。它由两个部分组成:1)一组指示如何重写地址的指令(也就是一个控制字符串)和 2)邮件将发往的通道的名称。地址重写后,邮件排入目标通道队列,以便传递给既定的收件人。

下面是一个重写规则的例子:

siroe.com             $U%$D@tcp_siroe-daemon

siroe.com 是域模式。任何其地址中包含 siroe.com 的邮件都将按照模板指令($U%$D)被重写。$U 指定重写地址使用相同的用户名。% 指定重写地址使用相同的域分隔符。$D 指定重写地址使用与模式中已匹配域名相同的域名。@tcp_siroe-daemon 指定邮件与其重写地址一起被发往称为 tcp_siroe-daemon 的通道。更多详细信息请参阅第 7 篇 “配置重写规则”

有关配置重写规则方面的详细信息,请参阅“MTA 配置文件”以及第 7 篇 “配置重写规则”


通道



通道是处理邮件的基本 MTA 组件。通道表示与另一部计算机系统或一组计算机系统的连接。一个通道与另一个通道之间在实际硬件连接或软件传送方面有很大的差异,或者两方面都有很大差异。

通道具有如下功能:

邮件在进入 MTA 时由通道排入队列,送出时离开队列。邮件通常从一个通道进入,而从另一个通道送出。通道可使邮件离队,然后处理该邮件,或者将该邮件列入另一 MTA 通道的队列。


主程序与从属程序

通常(但不总是)一个通道与两个程序相关联:主程序与从属程序。从属程序从另一个系统接受邮件并将它们添加到一个通道邮件队列中。主程序将邮件从通道传输到另一个系统。

例如 SMTP 通道,它具有发送邮件的主程序以及接收邮件的从属程序。这两个程序分别为 SMTP 的客户程序与服务器。

主通道程序通常负责由 MTA 启动的外发连接。主通道程序:

从属通道程序通常接收外来的连接,即 MTA 对外部请求的应答。从属通道程序:

例如,图 5-3 中有两个通道程序,Channel 1 和 Channel 2。假定 Channel 1 中的从属程序从远程系统收到一封邮件。从属程序检查地址,根据需要应用重写规则,然后根据重写地址将邮件排入适当的通道邮件队列中。

主程序从队列中取出邮件,然后在网络上传输该邮件。注意,主程序只能从自己的通道队列中取出邮件。

图 5-3 主程序与从属程序


虽然典型的通道同时有主程序和从属程序,但有的通道也可能只有从属程序只有主程序。例如,由 Messaging Server 提供的 ims-ms 通道就只有一个主程序,因为该通道只负责将邮件取出队列并送往本地邮件存储库,如图 5-4所示。

图 5-4 ims-ms 通道



通道的邮件队列

所有通道都有相关的邮件队列。当一封邮件进入邮件系统时,从属程序决定该邮件排入哪个邮件队列。排入队列的邮件存储在通道队列目录下的邮件文件中。默认情况下,这些目录存储在下列位置:/server_instance/imta/queue/channel/*


通道定义

通道定义位于 MTA 配置文件 imta.cnf 的下半部分,重写规则的后面(请参阅“MTA 配置文件”)。文件中出现的第一个空行表示重写规则部分的结束和通道定义的开始。

一个通道定义应包括此通道的名字,后面跟着定义通道配置的关键字选项列表,以及一个独特的通道标记,即在重写规则中用来将邮件路由到该通道的标记。通道定义之间用一空行隔开。通道定义内可以有注释,但不能出现空行。

[blank line]
! sample channel definition
Channel_Name keyword1 keyword2
Channel_Tag
[blank line]


通道定义作为一个整体称为通道主表。单独的通道定义也称作通道块。例如,图 5-5 中的通道主表包括三个通道定义或通道块。

图 5-5 简单配置文件 - 通道定义

! test.cnf - An example configuration file.
!
! Rewrite Rules
      .
      .
      .

! BEGIN CHANNEL DEFINITIONS
! FIRST CHANNEL BLOCK

l
local-host

! SECOND CHANNEL BLOCK
a_channel defragment charset7 usascii
a-daemon

! THIRD CHANNEL BLOCK
b_channel noreverse notices 1 2 3
b-daemon



典型的通道条目看起来像:

tcp_intranet smtp mx single_sys subdirs 20 noreverse maxjobs 7 SMTP_POOL maytlsserver allowswitchchannel saslswitchchannel tcpauth
tcpintranet-daemon

第一个词,如此例中的 tcp_intranet,是通道名称。最后一个词,如此例中的 tcpintranet-daemon,称为通道标记。通道标记是被重写规则用来为邮件定向的名称。在通道名称和通道标记之间的那些词称为通道关键字,用以描述如何处理邮件。数百个不同的关键字使邮件可得到不同方式处理。在 iPlanet Messaging Server Reference Manual第 8 篇 “配置通道定义”中有通道关键字的完整清单和描述。

通道主表用于定义 Messaging Server 能够使用的通道以及与每个通道相关联的系统名称。

在 UNIX 系统中,文件中的第一个通道块总是说明本地通道,即 l。(一个例外是 defaults 通道,它能够出现在本地通道的前面。)本地通道用于做路由决定和传输由 UNIX 邮件程序发送的邮件。

也可以在 MTA 选项文件 option.dat 中设置全局通道选项,或者在某个通道选项文件中为一个特殊通道设置选项。有关选项文件的详细信息,请参阅“选项文件”“TCP/IP(SMTP)通道选项文件”。有关配置通道的详细信息,请参阅第 8 篇 “配置通道定义”。有关建立 MTA 通道的详细信息,请参阅“MTA 配置文件”


MTA 目录信息



对于每个被处理的邮件,MTA 都需要访问有关用户、用户组及其所支持的域的目录信息。这些信息均保存在 LDAP 目录服务中。MTA 有两种方法访问这样的信息。第一种方法是直接读取 LDAP 目录。这称为直接 LDAP 模式,在附录 B “MTA 直接 LDAP 操作” 中有完整的描述。第二种方法,同时也是默认的方法,是通过目录缓存访问目录信息。这称为 dirsync 模式。

dirsync 模式中,对 MTA 所使用的用户和用户组的目录信息的访问是通过统称为目录缓存的一系列文件和数据库进行的。数据本身存储在 LDAP 目录,但是实际信息是从缓存中读取的。缓存中的数据被 dirsync 程序更新,该程序监视 LDAP 目录的变动并相应地更新有关的文件和数据库。

有关 dirsync 操作和配置的细节在“dirsync 配置”中有详细描述。


作业控制器



每当邮件排入通道的队列时,作业控制器可确保有一项传递邮件的作业在运行。这可能涉及到启动新的作业进程、添加线程,或者仅标示出已有一项作业在运行。若因到达在通道或者处理池方面的作业限制而导致作业无法启动,工作控制器将一直等待直到另一个工作结束。当作业限制不再被超越时,作业控制器就启动另一个作业。

这些通道作业在控制器内的处理池中运行。一个处理池可以理解为运行通道作业的“地方”。处理池提供了一个计算区域,供一组作业进行操作而又不与处理池以外的作业竞争资源。有关处理池的更多信息请参阅“作业控制器文件”“通道执行任务的处理池”

通道的任务限制时由通道关键字 maxjobs 决定的。处理池的任务限制则由处理池选项 JOB_LIMIT 决定。)

Messaging Server 通常尝试立即传递所有邮件。如果一邮件没能在第一次尝试时被传递出去,那么该邮件将被延迟一段由适当的 backoff 关键字所指定的时间。一旦过了由 backoff 关键字指定的时间,被延迟的邮件就可以传递了,并且如有必要会启动一个通道任务来处理该邮件。

作业控制器的正处理邮件和待处理邮件的内存中的数据结构,反映出存储在磁盘中的 MTA 队列区域中的邮件文件的完整集合。但是,如果磁盘中待处理邮件文件增大到超过作业控制器内存数据结构的大小限制时,作业控制器将只在内存中跟踪所有磁盘邮件文件的一个子集。作业控制器只处理在内存中被跟踪的那些邮件。当传递了大量的邮件从而释放了足够的内存之后,作业控制器通过扫描 MTA 队列区域来更新其邮件列表并自动刷新相应的内存存储。然后作业控制器开始处理这些刚从磁盘中检索到的其他邮件文件。作业控制器自动对 MTA 队列区域进行这些扫描。

如果一站点总是面临大量的待处理邮件,恐怕就需要使用 MAX_MESSAGES 选项来调整作业控制器。增大 MAX_MESSAGES 选项的值可使作业控制器使用更多的内存,从而可降低待处理邮件流量溢出作业控制器内存缓存情况的发生次数。这样做将减少作业控制器必须扫描 MTA 队列目录所付出的开销。但是请记住,当作业控制器确实需要重新构建内存缓存时,处理过程将因为缓存的增大而变长。同样需要说明的是,由于每次启动或重新启动作业控制器时都必须扫描 MTA 队列目录,相对于没有待处理邮件,大量的待处理邮件意味着在启动或重新启动作业控制器时将导致更多的额外开销。

作业控制器同样可以运行若干周期性的作业。这样的作业在作业控制器配置中配置,而不是使用更为普通的如 cron 这样的工具,这会使作业调度依赖于作业控制器的启动和运行。对于高实效性设置来说,要考虑到“故障在线恢复”(failover)。

有关处理池和作业控制器配置的信息,请参阅“作业控制器文件”“配置邮件处理和传递”


启动和停止作业控制器

启动作业控制器时,请执行下列命令:

imsimta start job_controller

关闭作业控制器时,请执行下列命令:

imsimta stop job_controller

重新启动作业控制器时,请执行下列命令:

imsimta restart job_controller

重新启动作业控制器具有关闭当前运行的作业控制器、然后立即启动一个新的作业控制器的效果。


上一页    目录    索引    下一页
(c) 2002 年 Sun Microsystems, Inc. 版权所有。

更新日期:2002 年 2 月 27 日