Sun Java logo     上一個      目錄      索引      下一個     

Sun logo
Sun Java System Messaging Server 6 2005Q1 管理指南 

第 8 章
MTA 概念

本章對 MTA 進行概念上的描述包含以下各節:


MTA 功能

郵件傳送代理程式,或 MTA 是 Messaging Server 的元件 (圖 8-1)。從最基本層級來看,MTA 是郵件路由器。它接受來自其他伺服器的郵件,並讀取位址,然後將郵件路由至抵達最終目的地 (通常是使用者的電子信箱) 途中的下一個伺服器。

多年來,MTA 增加了許多功能,提高了大小、能力和綜合性。這些 MTA 功能是重疊的,但通常可分類為:

許多子元件和程序均支援這些功能,其顯示在圖 8-2中。本章描述這些子元件和程序。另外,系統管理員也可以使用諸多工具啟用和配置這些功能。其中包含 MTA 選項、configutil 參數、對映表、關鍵字、通道和重寫規則。這些內容在之後的 MTA 章節中進行描述:

圖 8-2  MTA 架構

本圖顯示 MTA 的簡化架構和資料流程。


MTA 架構和郵件流程簡介

本節簡要介紹 MTA 架構和郵件流程 (圖 8-2)。請注意,MTA 是非常複雜的元件,而圖 8-2 是對系統中郵件流程的簡化描述。事實上,本圖沒有完全準確地描述系統中的整個郵件流程。但是,對於進行概念上的論述,該圖足夠了。

派送程式和 SMTP 伺服器 (從屬程式)

郵件經由 SMTP 階段作業從網際網路或企業內部網路進入 MTA。當 MTA 收到 SMTP 連線請求時,MTA 派送程式 (多執行緒連線派送代理程式) 會執行從屬程式 (tcp_smtp_server) 以處理 SMTP 階段作業。派送程式會為每項服務保留多執行緒程序的儲存區。當請求其他階段作業時,派送程式會啟動 SMTP 伺服器程式以處理每個階段作業。派送程式程序儲存區中的程序可同時處理許多連線。派送程式和從屬程式一起可對每封內送的郵件執行一些不同的功能。三個主要功能是:

如需更多資訊,請參閱派送程式

路由和位址重寫

SMTP 伺服器可讓郵件形成佇列,但是其他通道 (包括轉換通道和再處理通道) 也可以執行該作業。有些工作可在此遞送階段中完成,但主要的工作是:

通道

通道是用於郵件處理的基本 MTA 元件。通道表示與其他系統 (例如其他 MTA、其他通道或本地郵件儲存) 的郵件連線。當郵件進來時,不同的郵件需要根據郵件的來源和目的地進行不同的路由和處理。例如,對遞送至本地郵件儲存的郵件的處理不同於對遞送至網際網路的郵件的處理,而對後者的處理又有別於對傳送至郵件系統中其他 MTA 的郵件的處理。通道為每個連線提供所需的自訂處理和路由的機制。在預設安裝中,大多數郵件進入處理網際網路、企業內部網路和本地郵件的通道。

在特定情況下,也可以建立專用通道。例如,假定某個網際網路網域處理郵件的速度非常慢,導致發往該網域的郵件阻塞了 MTA。可以建立特殊通道以對發往此慢速網域的郵件進行特殊處理,從而為系統解決該網域阻塞問題。

位址的網域部分決定讓郵件在哪個通道中形成佇列。讀取網域並決定相應通道的機制稱為重寫規則 (請參閱重寫規則)。

通道通常由通道佇列和稱為主要程式的通道處理程式組成。從屬程式將郵件遞送至相應的通道佇列後,主要程式便執行所需的處理和路由。通道 (如同重寫規則) 在 imta.cnf 檔案中指定和配置。通道項目示例如下:

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

第一個詞 (此例中為 tcp_intranet) 是通道名稱。最後一個詞稱為通道標記。中間的詞稱為通道關鍵字,用來指定如何處理郵件。數百個不同的關鍵字允許按照多種方式處理郵件。「Sun Java System Messaging Server Administration Reference」和第 12 章「配置通道定義」中完整地描述了通道關鍵字。

郵件遞送

郵件經過處理後,主要程式將此郵件沿郵件遞送路徑傳送至下一站。它可能是預計的收件者的電子信箱、其他 MTA,或者甚至是不同的通道。該圖中雖然沒有顯示轉寄至其他通道的流程,但這是經常發生的。

請注意,位址的本機部分和接收欄位通常是 7 位元字元。如果 MTA 在這些欄位中讀取 8 位元字元,則使用星號替代每個 8 位元字元。


派送程式

派送程式是多執行緒派送代理程式,它允許多個多執行緒伺服器程序分擔 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

該指令代替了所有其他 start-msg 指令,這些指令先前曾用於啟動 MTA 的元件 (派送程式曾被配置為對其進行管理)。特別是,您不可再使用 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 的通道。請參閱第 11 章「配置重寫規則」,以取得更多詳細資訊。

如需有關配置重寫規則的更多資訊,請參閱「MTA 配置檔案」和第 11 章「配置重寫規則」


通道

通道是處理郵件的基本 MTA 元件。通道表示與另一個電腦系統或一組系統的連線。實際的硬體連線和/或軟體傳輸可能會隨著通道的不同有很大差異。

通道可執行以下功能:

郵件在傳送至 MTA 時由通道形成佇列,並在從 MTA 傳出時移出佇列。通常情況下,郵件經由一個通道進入,而經由另一個通道傳出。通道可將郵件移出佇列,然後處理該郵件或將讓郵件在其他 MTA 通道中形成佇列。

主要程式和從屬程式

一般來說 (但並不總是),通道與兩個程式關聯:主要程式和從屬程式。從屬程式接受來自其他系統的郵件,並將它們加入通道的郵件佇列中。主要程式將來自通道的郵件傳送至其他系統。

例如,SMTP 通道有一個傳送郵件的主要程式和一個接收郵件的從屬程式。它們分別是 SMTP 用戶端和伺服器。

主要通道程式通常負責由 MTA 啟動的外寄連線。主要通道程式:

從屬通道程式通常接受內送的連線,即 MTA 回應外部請求。從屬通道程式:

例如,圖 8-3 所示為兩個通道程式,即通道 1 和通道 2。通道 1 中的從屬程式接收來自遠端系統的郵件。它查看位址,並依需要套用重寫規則,然後根據重寫位址讓郵件在相應的通道郵件佇列中形成佇列。

主要程式將郵件從佇列中移出,並啟動郵件的網路傳輸。請注意,主要程式僅能從它自己的通道佇列中將郵件移出佇列。

圖 8-3  主要程式和從屬程式

本圖顯示主要程式和從屬程式互動作業。

儘管典型的通道有主要程式和從屬程式,但可能會有某個通道僅包含 從屬程式主要程式。例如,Messaging Server 提供的 ims-ms 通道就僅包含一個主要程式,因為此通道僅負責將郵件移出佇列並將其送至本地郵件儲存,如圖 8-4 所示。

圖 8-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 tcp_auth
tcp_intranet-daemon

第一個詞 (此例中為 tcp_intranet) 是通道名稱。最後一個詞 (此例中為 tcp_intranet-daemon) 稱為通道標記。通道標記是重寫規則用來導向郵件的名稱。通道名稱和通道標記之間的詞稱為通道關鍵字,它們指定如何處理郵件。數百個不同的關鍵字允許按照多種方式處理郵件。「Sun Java System Messaging Server Administration Reference」和第 12 章「配置通道定義」中列示並介描述了通道關鍵字的完整列表。

通道主機表定義 Messaging Server 可以使用的通道以及與每個通道關聯的系統名稱。

在 UNIX 系統上,檔案中的第一個通道塊通常描述本地通道 l。(預設通道是個例外,它可以顯示在本地通道之前。)本地通道用於作出路由決定和傳送由 UNIX 郵件工具傳送的郵件。

您也可以在 MTA 選項檔案 (option.dat) 中為通道設定全域選項,或在通道選項檔案中為特定通道設定選項。如需有關選項檔案的更多資訊,請參閱「選項檔案」和「TCP/IP (SMTP) 通道選項檔案」。如需有關配置通道的詳細資訊,請參閱第 12 章「配置通道定義」。如需有關建立 MTA 通道的更多資訊,請參閱「MTA 配置檔案」。


MTA 目錄資訊

對於 MTA 處理的每封郵件,它需要存取有關其支援的使用者、群組和網域的目錄資訊。此資訊儲存在 LDAP 目錄服務中。MTA 可直接存取 LDAP 目錄。第 9 章「MTA 位址轉換和路由」對其進行了完整的描述。


工作主控台

每次郵件在通道中形成佇列時,工作控制器均可確保有一項遞送郵件的工作正在執行。這可能涉及到啟動新的工作程序、新增執行緒或只指明工作已在執行中。如果因為已達到通道或儲存區的工作限制而無法啟動工作,工作控制器將會等待,直到其他工作結束。當不再超出工作限制時,工作控制器將啟動其他工作。

通道工作在工作控制器中的處理儲存區內部執行。可以認為儲存區是通道工作執行的「地方」。儲存區提供一個運算區域,可供一組工作在其中作業,而無需與儲存區外部的工作競爭資源。如需有關儲存區的更多資訊,請參閱「工作控制器檔案」和「通道執行工作的處理儲存區」。

通道的工作限制由 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

重新啟動工作控制器會關閉目前正在執行的工作控制器,然後立即啟動新的工作控制器。



上一個      目錄      索引      下一個     


Copyright 2005 Sun Microsystems, Inc. 版權所有。