Sun logo      上一个      目录      索引      下一个     

Sun ONE Messaging Server 6.0 管理员指南

第 6 章
MTA 概念

本章提供了 MTA 的概念性说明。其中包括以下各节:


MTA 功能

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

图 6-2 MTA 体系结构

此图形显示了 MTA 的简化体系结构和数据流。


MTA 体系结构和邮件流概述

本节简要概述了 MTA 体系结构和邮件流(图 6-2)。请注意,MTA 是一个非常复杂的组件,而图 6-2 只是流经该系统的邮件的简要说明。事实上,此图并不是所有流经该系统的邮件的非常准确的说明。但对于概念性的讨论,这已经足够了。

分发程序和 SMTP 服务器(从程序)

邮件通过 SMTP 会话从 Internet 或内部网进入 MTA。当 MTA 收到要求进行 SMTP 连接的请求时,MTA 分发程序(多线程连接分发代理)将执行一个程序 (tcp_smtp_server) 以处理 SMTP 会话。分发程序将为每个服务维护多线程进程池。请求其它会话时,分发程序将激活一个 SMTP 服务器程序以处理每个会话。分发程序的进程池中的进程可能会同时处理许多连接。分发程序和从程序将一起对每个外来邮件执行许多不同的功能。其中三个主要功能是:

有关详细信息,请参见分发程序

路由

SMTP 服务器和许多其它频道(包括转换频道和再处理频道)均可排入邮件。虽然此阶段传送期间完成了许多任务,但此阶段传送期间的主要任务是:

频道

频道是用于邮件处理的基本 MTA 组件。频道表示邮件与另一个系统的连接(例如,另一个 MTA、另一个频道或本地邮件存储)。邮件进入时,根据邮件的源和目的地,不同的邮件需要不同的路由和处理。例如,要传送到本地邮件存储的邮件与要传送到 Internet 的邮件以及要发送到邮件系统内的另一个 MTA 的邮件,将以不同的方式进行处理。频道提供了用于自定义每个连接所需的处理和路由的机制。在缺省安装中,大多数邮件转至处理 Internet、内部网和本地邮件的频道。

也可以创建用于特定情况的专门频道。例如,假设某个 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 是频道名称。最后一个字称为频道标记。中间的字称为频道关键字,它们指定了将如何处理邮件。许多不同的关键字允许用许多方式处理邮件。在 Sun ONE Messaging Server Reference Guide第 10 章“配置频道定义”中提供了频道关键字的完整说明。

邮件传送

邮件经过处理后,主程序将邮件沿着邮件的传送路径发送到下一个停靠站。这可能是预期收件人的邮箱、另一个 MTA,甚至也可能是其它频道。虽然图中未显示,但转发到另一个频道的情况经常发生。


分发程序

分发程序是一个多线程的分发代理,允许多个多线程服务器进程共同分担 SMTP 连接服务。使用分发程序时,可以同时运行若干个多线程 SMTP 服务器进程,并且所有处理均与同一个端口连接。此外,每个服务器可能会有一个或多个活动连接。

分发程序充当在其配置中列出的 TCP 端口的中心接收程序。对于每个已定义的服务,分发程序可能会创建一个或多个 SMTP 服务器进程,在建立了连接之后处理这些连接。

通常,当分发程序接收到已定义的 TCP 端口的连接时,将为该端口上的服务检查可用的工作进程池并为新的连接选择最佳候选池。如果没有合适的候选池,则在配置允许的情况下,分发程序可能会创建一个新的工作进程以处理此连接和以后的连接。分发程序也可能会为预期的将来外来连接创建新的工作进程。有若干配置选项可用于调整各种服务中分发程序的控制,特别是控制工作进程的数量以及每个工作进程所处理的连接的数量。

有关详细信息,请参见分发程序配置文件

服务器进程的创建和终止

分发程序内的自动内务处理功能控制着新服务器进程的创建和旧的或闲置的服务器进程的终止。控制分发程序性能的基本选项是 MIN_PROCSMAX_PROCSMIN_PROCS 通过准备就绪若干服务器进程并等待外来连接,提供了一种服务保证级别。另一方面,MAX_PROCS 设置了对于给定服务可以同时活动的服务器进程数量的上限。

当前运行的服务器进程可能不能接收任何连接,因为它处理的连接已经达到其所能处理的最大数量,或者此进程已被安排终止。分发程序可能会创建其它进程以帮助将来的连接。

MIN_CONNSMAX_CONNS 选项提供了一种帮助您在服务器进程之间分发连接的机制。MIN_CONNS 指定了将服务器进程标记为“足够忙”的连接的数量,而 MAX_CONNS 指定了服务器进程达到“最忙”时连接的数量。

通常,当前服务器进程数量少于 MIN_PROCS 或所有现有服务器进程均为“足够忙”(每个进程具有的当前活动连接数量至少为 MIN_CONNS)时,分发程序将创建一个新的服务器进程。

如果服务器进程意外中止(例如,通过 UNIX 系统的 kill 命令),则分发程序仍将在新连接进入时创建新的服务器进程。

有关配置分发程序的信息,请参见分发程序配置文件

启动和停止分发程序

要启动分发程序,请执行以下命令:

start-msg dispatcher

此命令将包括并废弃以前用于启动 MTA 组件(已经配置了分发程序以进行管理)的任何其它 start-msg 命令。特别是,不应再使用 imsimta start smtp 命令。尝试执行任何已废弃的命令将导致 MTA 发出警告。

要关闭分发程序,请执行以下命令:

stop-msg dispatcher

关闭分发程序时,服务器进程发生的情况取决于基本的 TCP/IP 软件包。如果修改了用于分发程序的 MTA 配置或选项,则必须重新启动分发程序以便使新配置或选项生效。

要重新启动分发程序,请执行以下命令:

imsimta restart dispatcher

重新启动分发程序与关闭当前运行的分发程序再立即启动新的分发程序具有同样的效果。


重写规则

重写规则可以确定以下问题:

每个重写规则均由一个模式和一个模板组成。模式是与地址的域部分匹配的字符串。模板指定了域部分与模式匹配时采取的操作。它由以下两部分组成:1) 一组指定应如何重写地址的说明(即,一个由控制字符组成的字符串)和 2) 邮件将发送到的频道的名称。重写地址后,邮件将排入目标频道,以传送到预期收件人。

以下所示为一个重写规则的示例:

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

siroe.com 是域模式。地址包含 siroe.com 的任何邮件将按照模板说明 ($U%$D) 被重写。$U 指定重写的地址使用相同的用户名。% 指定重写的地址使用相同的域分隔符。$D 指定重写的地址使用在模式中匹配的相同的域名。@tcp_siroe-daemon 指定将带有重写地址的邮件发送至名为 tcp_siroe-daemon 的频道。有关详细信息,请参见第 9 章“配置重写规则”

有关配置重写规则的详细信息,请参见 MTA 配置文件第 9 章“配置重写规则”


频道

频道是处理邮件的基本 MTA 组件。频道表示与另一个计算机系统或系统组的连接。各个频道中实际的硬件连接或软件传输或者这两者,可能大大不同。

频道执行以下功能:

邮件在进入 MTA 的过程中由频道排队,离开 MTA 的过程中被取消排队。通常,邮件经由一个频道进入,然后通过另一个频道离开。频道可以将邮件取消排队、处理邮件或将邮件排入另一个 MTA 频道。

主程序和从程序

通常(并非总是),频道与两个程序相关联:主程序和从程序。从程序从其它系统接收邮件并将其添加至频道的邮件队列中。主程序将邮件从频道传输到其它系统。

例如,SMTP 频道有一个用来传输邮件的主程序和一个用来接收邮件的从程序。分别为 SMTP 客户机和服务器。

主频道程序通常在 MTA 已启动操作的地方负责外发的连接。主频道程序:

从频道程序通常在 MTA 响应外部请求的地方接受外来连接。从频道程序:

例如,图 6-3 显示了两个频道程序 Channel 1 和 Channel 2。Channel 1 中的从程序从远程系统接收了一封邮件。它将查看地址,根据需要应用重写规则,然后基于重写的地址将邮件排入适当的频道邮件队列。

主程序从队列中将邮件取消排队并启动邮件的网络传输。请注意,主程序只能将邮件从其自己的频道队列中取消排队。

图 6-3 主程序和从程序

此图形显示了主程序和从程序交互式操作。

虽然典型频道有一个主程序和一个从程序,但也有可能一个频道仅包含一个从程序一个主程序。例如,Messaging Server 提供的 ims-ms 频道仅包含一个主程序,因为此频道仅负责将邮件取消排队并退到本地邮件存储,如图 6-4 中所示。

图 6-4 ims-ms 频道

此图形显示了 ims-ms 频道。

频道邮件队列

所有频道均具有相关联的邮件队列。邮件进入邮件传送系统时,从程序确定将此邮件排入哪个邮件队列。排入的邮件存储在频道队列目录的邮件文件中。缺省情况下,这些目录存储在以下位置:msg_svr_base/data/queue/channel/*


注意

请勿在 MTA 队列目录(即 imta_tailor 文件中 IMTA_QUEUE 的值)中添加任何文件或目录,因为这样会出现问题。将单独的文件系统用于 MTA 队列目录时,请在该装入点下创建一个子目录并指定该子目录为 IMTA_QUEUE 的值。


频道定义

频道定义显示在 MTA 配置文件 (imta.cnf) 的下半部分,在重写规则之后(请参见 MTA 配置文件)。显示在文件中的第一个空白行表示重写规则部分的结束和频道定义的开始。

频道定义包含频道的名称,后跟一个定义频道配置的可选关键字列表,以及一个在重写规则中用于将邮件路由到频道的唯一的频道标记。频道定义由单个空白行分隔。频道定义内可以包含注释,但不能出现空白行。

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

总体而言,频道定义被称为频道主机表。单个频道定义称为频道块。例如,在以下示例中频道主机表包含三个频道定义(块)。

! 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 称为频道标记。频道标记是重写规则用来定向邮件的名称。频道名称和频道标记之间的字称为频道关键字,指定将如何处理邮件。许多不同的关键字允许用许多方式处理邮件。在 Sun ONE Messaging Server Reference Guide第 10 章“配置频道定义”中列出并介绍了频道关键字的完整列表。

频道主机表定义了 Messaging Server 可以使用的频道以及与每个频道相关联的系统的名称。

在 UNIX 系统上,文件中的第一个频道块总是介绍本地频道 l。(例外情况是可能会在本地频道之前显示一个 defaults 频道。)本地频道用于决定路由和发送由 UNIX 邮件工具发送的邮件。

也可以在 MTA 选项文件 option.dat 中为频道设置全局选项,或在频道选项文件中为特定频道设置选项。有关选项文件的详细信息,请参见选项文件TCP/IP (SMTP) 频道选项文件。有关配置频道的详细信息,请参见第 10 章“配置频道定义”。有关创建 MTA 频道的详细信息,请参见 MTA 配置文件


MTA 目录信息

对于 MTA 处理的每封邮件,MTA 均需要访问有关其支持的用户、组和域的目录信息。此信息存储在 LDAP 目录服务中。MTA 直接访问 LDAP 目录。第 7 章“使用直接 LDAP 转换和路由地址”中对此进行了全面说明。


作业控制器

每次将邮件排入频道时,作业控制器均确保有一个运行的作业以传送该邮件。这可能涉及启动一个新作业进程、添加一个线程或只是通知一个作业已经在运行。如果因为已达到频道或池的作业限制而不能启动作业,则作业控制器将等待直到其它作业退出。不再超出作业限制时,作业控制器将启动其它作业。

频道作业在作业控制器内的处理池中运行。可以认为池是一个运行频道作业的“地方”。池提供了一个计算区域,一组作业可以在其中运行而不与池外的作业竞争资源。有关池的详细信息,请参见作业控制器文件用于频道执行作业的处理池

频道的作业限制由 maxjobs 频道关键字确定。池的作业限制由池的 JOB_LIMIT 选项确定。

Messaging Server 通常尝试立即传送所有邮件。如果第一次尝试不能传送邮件,则将延迟该邮件一段时间,该时间由相应的 backoff 关键字确定。一旦 backoff 关键字中指定的时间过后,就可以传送延迟的邮件,并且如果需要将启动频道作业以处理该邮件。

当前正在处理和等待处理的邮件的作业控制器的内存中数据结构,通常反映了存储在 MTA 队列区域的磁盘上的全部邮件文件。但是,如果磁盘上待处理的邮件文件累计超出了作业控制器的内存中数据结构大小的限制,则作业控制器仅在内存中跟踪磁盘上的邮件文件总数的一部分。作业控制器仅处理那些它正在内存中跟踪的邮件。传送足够数量的邮件,释放足够的内存中存储空间后,作业控制器将通过扫描 MTA 队列区域以更新其邮件列表来自动刷新其内存中存储。然后作业控制器开始处理其它刚从磁盘检索的邮件文件。作业控制器自动执行对 MTA 队列区域的这些扫描。

如果您的站点日常要处理大量邮件,则您需要通过使用 MAX_MESSAGES 选项调整作业控制器。通过增加 MAX_MESSAGES 选项值来允许作业控制器使用更多内存,可以减少待处理邮件溢出作业控制器的内存中高速缓存情况的次数。这减少了作业控制器必须扫描 MTA 队列目录时有关的系统开销。但是请记住,当作业控制器必须要重建内存中高速缓存时,由于高速缓存增大,进程将花费更长时间。也请注意,因为每次启动或重新启动作业控制器时,它必须扫描 MTA 队列目录,所以大的待处理邮件意味着作业控制器的启动或重新启动将比没有此类待办事项存在时需要更多开销。

有关池和配置作业控制器的详细信息,请参见作业控制器文件配置邮件处理和传送

启动和停止作业控制器

要启动作业控制器,请执行以下命令:

start-msg job_controller

要关闭作业控制器,请执行以下命令:

stop-msg job_controller

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

imsimta restart job_controller

重新启动作业控制器与关闭当前运行的作业控制器再立即启动新的作业控制器具有同样效果。



上一个      目录      索引      下一个     


版权所有 2003 Sun Microsystems, Inc.。保留所有权利。