「深入 Exchange 2013」16 隊列 part1

關於隊列的內容較多,咱得多分幾部分來講,講到哪是哪吧。

每當咱在Exchange裏查看隊列的時候,我們會看到隊列分成好幾個組,每個郵箱數據庫都有自己的目標隊列,DAG、AD站點也是,AD林也是一個隊列,最後最多的就是外部SMTP域隊列。

當傳輸服務處理隊列裏的郵件時,它首先會嘗試投遞隊列裏的第一封郵件,如果郵件投遞成功,傳輸服務會去告訴傳輸高可用系統(後邊的章節裏會介紹到)這封郵件投遞成功。如果不成功,那麼郵件會留在隊列裏,然後過段時間進行重試。當重試次數打到某個預設值時,或者是重試的間隔超時,這封郵件就被視爲未送達,然後返回發送者一個NDR報告。

Exchange不同版本之間的隊列行爲各有千秋,但是基本目的都差不多,郵件進入隊列直到它們被其他組件檢索和處理投遞完成。

隊列類型:

不同的隊列類型對應不同的作用,所以Exchange有多種隊列類型也並不奇怪。首先是三種永久性隊列

提交隊列(Submission Queue):提交隊列裏保存並組織郵件等待分揀器處理,任何剛剛抵達服務器的郵件都會被放到這個隊列裏,然後分揀器對此隊列中檢索郵件,確定收件人的位置和路由,再重定向給相應的合適的其他隊列。

無法送達隊列(Unreachable Queue):包含着無法路由給目的地的郵件,比如發一封郵件給一個沒有MX記錄的SMTP域,那麼這封郵件就會出現在無法到達隊列裏,發送給無效收件人的郵件也會出現在這裏。Exchange會週期性的重試這個隊列裏的郵件,當檢測到路由更改的時候,也會進行重試。所以這裏面的郵件要麼就是退回一封NDR,要麼就會被成功發送。每臺服務器上只有一個無法送達隊列,且該隊列在平常沒有內容的時候是不可見的(EMS和EAC都看不到,除非裏頭有東西)。

病毒郵件隊列(Poison Message Queue):病毒郵件隊列也通常爲空且不可見,它裏邊兒保存(隔離)了一些被視爲是病毒的郵件(廢話),這些郵件通常會導致傳輸服務崩潰。病毒郵件隊列裏的郵件不會自動嘗試重新提交,管理員需要手動去刪除或者恢復它們。

然後是另外三種隊列:

傳遞隊列(Delivery Queue):最常用的隊列,保存着通過使用SMTP傳遞到本地或者遠程目標的郵件。每個目的地都會有一個傳遞隊列,如果目標服務是傳輸代理類型的連接器,那麼非SMTP目標也會使用傳輸隊列。每個隊列中的郵件傳遞完畢之後,該隊列會空置一段時間,然後被自動刪除,這個時間可以由Set-TransportService命令裏的QueueMaxIdleTime參數來控制,默認爲3分鐘。

卷影冗餘隊列(Shadow Redundancy Queues):卷影隊列在郵件傳輸時會保留郵件的冗餘副本。

Safety Net:保留傳輸服務器成功傳遞的郵件備份。管理工具無法訪問Safety Net隊列。

關於最後兩種負責傳輸系統冗餘的隊列,我們在後面傳輸的高可用裏會詳細講到,這裏就暫且不提。

隊列數據庫

在Exchange 2010當中,所有隊列信息被存儲在一個ESE(Extensible Storage Engine)數據庫中,默認位於%ExchangeInstallPath%\TransportRoles\Data\Queue中。使用ESE格式作爲隊列數據庫,而不是面對一堆文件,所以隊列數據庫(Mail.que)也和郵箱數據庫一樣,有ESE事務日誌文件(Trn*.log),檢查點文件(Trn*.chk),以及保留日誌文件(Tnres0001.jrs Tnres0002.jrs)。

Exchange 2013的隊列數據庫與Ex2010和Ex2007的不同之處在於郵件消息是如何存放到隊列數據庫中的,Ex2007和Ex2010針對每封郵件單獨進行操作,郵件量變大意味着大量對數據庫裏的表的增刪操作,而Exchange 2013則將每個小時的郵件聚集到一張表中,比如說在上午9點到10點鐘到達的郵件歸類到一張表中,10點準的時候,服務器會新建一張表,然後將後續郵件再放進去;如果前面的郵件都發送成功了,就把9點的那張表給刪除掉。

EdgeTransport.exe.config文件中可以配置隊列數據庫的存放位置,你可以通過修改這個來將隊列數據庫移動到更合適的地方(重啓Microsoft Exchange傳輸服務生效)。如圖:

p_w_picpath

下表列出了圖中常用幾個參數的配置意思,這些參數不是最完全的,可以參照Technet給出的全表(https://technet.microsoft.com/zh-cn/library/bb125022%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396#QueueDBFiles),對config文件裏添加需要的項目並賦值以達到配置目的:

參數

含義

QueueDatabasePath

指定隊列數據庫的默認位置,如果你要修改該位置,那麼到目標位置創建好文件夾,然後停止傳輸服務,將隊列數據庫拷貝過去,然後重啓傳輸服務即可

QueueDatabaseLoggingPath

指定隊列數據庫事務日誌文件的存放位置,不一定要和隊列數據庫放在一起

QueueDatabaseLoggingBufferSize

指定在將事務記錄寫入到事務日誌文件之前用於緩存它們的內存。默認爲5MB。

QueueDatabaseLoggingFileSize

指定事務日誌文件大小。默認爲5M

QueueDatabaseOnlineDefragEnabled

是否爲隊列數據庫打開在線碎片整理(Exchange裏翻譯爲聯機……)默認情況下這個選項不存在config文件裏,如果要關閉該功能則需要手動添加該項。

QueueDatabaseOnlineDefragSchedule

隊列數據庫在線碎片整理計劃任務開始時間,默認爲凌晨1點

QueueDatabaseOnlineDefragTimeToRun

指定在線碎片整理任務的最長時間,默認爲3個小時。


如果手動更改了EdgeTransport.exe.config文件之後,每次安裝CU之前都記得備份一下自定義的項目,因爲CU和SP的更新裏都會覆蓋這些配置。其他的config文件也是這個道理。

另外,針對隊列數據庫的移動,Exchange在Scripts文件夾裏提供了一個腳本“Move-TransportDatabae.ps1”,可以直接使用這個腳本來進行移動,需要目標文件夾所在磁盤有2GB的空間。打比方我現在要將隊列數據庫移動到D:\Exchange\Queues文件夾裏,那麼我就可以這麼輸入:

.\Move-TransportDatabae –QueueDatabasePath D:\Exchange\Queues\ –QueueDatabaseLoggingPath D:\Exchange\Queues\

今天就先聊到這裏,關於隊列後邊還有很多內容。下一節我們會講講隊列的處理效率,還有如何去查看隊列。下次見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章