獲取 IBM Lotus iNotes 的高可用性

genusBIT發表於2010-06-18

轉自 http://www.ibm.com/developerworks/cn/lotus/inotes-avail/

 

簡介

Mail 是關鍵企業應用,使用者和管理員都希望郵件 24x7 可用。利用 IBM Lotus Notes 和 Lotus Domino,可獲取具有 Lotus Domino 叢集化和郵件檔案副本特性的高可用性。Lotus Notes 客戶端包括明確的程式碼來處理這樣的場景:該客戶端正與之通訊的 Lotus Domino 伺服器不再可用。

在短暫的延遲(它需要等待一個連線或通訊完成嘗試)後,Lotus Notes 客戶端通知使用者,伺服器不再可用,並要求使用者確認切換到另一個已知的副本伺服器。

然而,對於 Lotus iNotes ,想實現高可用性,需要一些額外基礎設施的輔助,比如 Application Delivery Controller (ADC),ADCs 為資料中心提供很多好處,包括:

  • 提高應用可用性(通過應用監控和負載均衡)
  • 增強安全性(應用防火牆)並提高速度(TCP 和 UDP 優化)
  • 從計算密集型任務中解除安裝伺服器:例如,安全套接字層(SSL)加密

Lotus Domino 包含稱為 Internet Cluster Manager 的技術,通過該技術能夠基於應用,將初始的 URL 重定向到後端郵件伺服器。如果在一個會話開始後,實際的郵件伺服器變得不可用,然而,不存在恢復與切換到儲存有郵件檔案副本的其他可用伺服器的機制。

正常配置後,負載平衡器能為使用者提供無縫的故障轉移體驗。使用者絕不會意識到正與他們互動的原始伺服器已不可用;負載平衡器會無縫地檢測出這個問題,並向其他合適的伺服器發出請求。

有基於軟體的負載平衡器和特定的、提供此能力的硬體(比如 ADC)。硬體產品通常會貴一些,但是能夠提供更優的效能和能力,並能節約後端伺服器的資源。

本文討論恰當實現 Lotus iNotes 負載均衡的一些問題,並提供特定的、有關行業領先的 F5 Networks BIG-IP Local Traffic Manager (LTM) Advanced ADC 的例子。

我們還將探索建立可支援大多數 Lotus iNotes 郵件部署的 BIG-IP LTM 配置,然後考慮通過使用 BIG-IP LTM ,來提高 Lotus Domino 伺服器和使用者的效能。


Lotus Domino 高可用性配置

Lotus Domino 郵件檔案通常有子目錄(例如,mail)和檔名(例如,juser.nsf)。 為實現負載均衡,每個伺服器中的任何郵件檔案的路徑應當是相同的,當到達負載均衡器時,郵件檔案的完整路徑必須是唯一的(明確的)。

我們來討論一些能夠用於獲取高可用性的配置方案。

配置 1 :單映象叢集

這一配置方案最簡單。採用伺服器的全映象、叢集化設定,並且所有的郵件檔案都位於一個叢集中。兩個或三個伺服器採用相同的目錄架構和郵件檔案集,並開啟所有伺服器的叢集複製功能(見圖 1)。


圖 1 .叢集 A 中的兩個映象伺服器
 叢集 A 中的兩個映象伺服器

在本方案中,對於負載均衡器,任何 Lotus iNotes 相關的請求能遞交給叢集中的任何伺服器。

配置 2 : 多映象叢集

更復雜的級別是有多個類似於配置 1 當中的 Lotus Domino 郵件叢集,並且負載平衡器需要將收到的請求傳送給合適的後端伺服器集(那些處於同一叢集的)。

有多種可能的方法來完成這件事:

  • 在第一種方法中,每個叢集使用一個獨特命名的子目錄來儲存郵件檔案,這意味著普通 URLS 包含一個清楚指明叢集的段(見圖 2 )。更新負載均衡器中的規則來切斷這些名稱,並關聯合適的後端伺服器。



    圖 2. 兩臺處於不同叢集的伺服器,每個叢集有獨特的子目錄名稱
     兩臺處於不同叢集的伺服器,每個叢集有獨特的子目錄名稱

    這些獨特叢集子目錄名稱和後端 Lotus Domino 伺服器的硬編碼列表,必須針對任何對於伺服器叢集的更改隨時更新。
  • 在第二種方法中,Lotus iNotes 重定向應用被配置為返回伺服器的 Lotus Domain Name System (DNS) 的主郵件伺服器主機名部分,作為針對郵件檔案生成的 URL 中的一個附加段(就在路徑之前)。負載平衡器使用這一附加段來查詢 Lotus Domino 叢集和相關的後端伺服器。

    此方法的有個問題,Lotus iNotes 會產生後續的 URLs,其中不再包含段名稱。因此,叢集識別符號必須儲存在一個 cookie 當中,這樣如果不存在該段時,負載平衡器就會觀察該值。
  • 在第三種方法中, Lotus Domino 伺服器中增加負載平衡器協助代理,通過負載平衡器查詢,來動態生成包含該郵件檔案副本的相關 Lotus Domino 伺服器列表(見圖 3 )。



    圖 3. 處於不同叢集的兩臺伺服器
     處於不同叢集的兩臺伺服器

    在本方案中,不必在負載平衡器規則中硬編碼特定叢集名稱或者後端 Lotus Domino 伺服器 IP 地址。

配置 3: 多個非映象叢集

更加複雜的級別是在 Lotus Domino 叢集中有多個伺服器的方案,但不是叢集中的每個伺服器中都儲存所有郵件檔案。相反地,使用者郵件檔案稀疏地分佈在叢集內的部分伺服器中。

此方案可能是用於支援負載平衡器的最複雜配置,但它是 Lotus Domino 配置的常用部署方法。這裡有一些完成此配置的可能方法:

  • 每個駐留有特定郵件檔案的、獨特的伺服器組合,在獨特的、郵件檔案所駐留的子目錄名稱中,以某種方式反映出來(見圖 4 )。這種組合意味著,通常的 URLs 實際上標識了郵件檔案所駐留的叢集和伺服器子集。

    負載平衡器利用這一資訊將需求傳送給相應的伺服器子集。



    圖 4. 在叢集 A 中的三個非映象伺服器
    在叢集 A 中的三個非映象伺服器

  • 另外,Lotus Domino 伺服器中增加負載平衡器協助代理,通過負載平衡器查詢,來動態生成包含該郵件檔案副本的相關 Lotus Domino 伺服器列表(見圖 5 )。



    圖 5. 在叢集 A 中的三個帶有重定向器的非映象伺服器
     在叢集 A 中的三個帶有重定向器的非映象伺服器

因此,正如我們對前面選項的討論所示,最通用的解決方案包括增加 Lotus Domino 伺服器來傳遞有關哪個後端伺服器可建立用於平衡當前所收到請求的動態池的資訊,同時不需要使用特定路徑名來傳遞相關故障轉移資訊。

現在,我們來探索有關建立用於實施這一解決方案的通用服務的更多細節,這同樣需要負載平衡器能夠進行動態查詢並使用查詢結果。

F5 Networks BIG-IP LTM 提供精密的、基於 Tool Command Language(TCL)的指令碼語言,該語言可用於建立 iRule 。每個 iRule 使用一個容易學習的指令碼語法,來定製 BIG-IP LTM 如何截獲、檢查、轉換和指示入站或出站應用傳輸。

利用這一方法,負載均衡環境可智慧地將 HTTP 傳輸路由到正確的 Lotus Domino 伺服器。


建立負載均衡器協助服務

Lotus Domino 將關於一個特殊叢集中的獨特 NSF 檔案的資訊儲存在叢集資料庫目錄(cldbdir.nsf)中;然而,該資料庫只在特定叢集中是獨特的。同一域內其他叢集的目錄資料庫包含完全不同的資訊。

確定某個獨特 NFS 檔案是否在特定叢集中的方法是,檢查最初收到請求的伺服器上的叢集目錄,來確定路徑是否已找到。如果是,那就一切順利。會返回相應的伺服器集,並且使用者的主伺服器會處於所返回列表的最前面,來優先展示。

然而,如果伺服器的叢集目錄內沒有該路徑, 負載平衡器必須在不同的叢集中查詢伺服器。為了幫助它向正確的叢集傳送請求,要在 Lotus Domino 目錄 names.nsf 中查詢資訊,在當前使用者郵件檔案所駐留的叢集中定位伺服器集。

為完成這一查詢,該服務為當前已驗證使用者查詢主郵件伺服器,然後查詢該伺服器所屬叢集的 ClusterName 。 可在($Clusters)檢視中查詢該叢集,來獲取屬於該叢集的伺服器。

我們使用 Notes Formula 語言來建立協助服務,並將關鍵程式碼放入 Lotus iNotes 重定向器模板中的表單 ServersLookup 。 當負載均衡器發出請求時,表單 ServersLookup 以 X-Domino-xxxxx 格式,返回兩個 HTTP 響應頭中的一個,每個都包含由逗號分隔的伺服器列表。

當伺服器在自己的叢集中發現相關路徑時,返回 X-Domino-ReplicaServers , 然而,只有當郵件伺服器屬於其他叢集時,才返回 X-Domino-ClusterServers 。

本文中提供了表單 ServersLookup(見附錄)。下面的效能檢測沒有采用協助代理,只檢測配置 1 。


效能分析

DWA85 工作負載施加在兩個叢集化 Lotus Domino 郵件伺服器上,同時進行伺服器的複製。每個伺服器上有 4000 個併發使用者和 2000 個活動使用者,採用 Microsoft® Windows® 64 位作業系統和 Lotus Domino 8.5.1 的 32 位版本。

所有測試中,伺服器的每個 Lotus Domino 目錄都定義了 4000 個使用者。測試開始時,每個使用者擁有一個大約 256 MB 的非壓縮文件,在收件箱資料夾裡有 3000 條訊息。

在這些測試中,通過啟用 Favor Runtime 設定,可得到 Lotus Domino 事務日誌,Mail Journaling 也設定為記錄所有本地訊息。針對訊息傳遞和 Server Operating System 的 Domino Domain Monitoring (DDM) 探測器已啟用,所有使用者都有用於阻止 10 個外部使用者郵件的郵件規則,來用於測試。

利用 Lotus Domino 8.5.1 ,我們在郵件資料庫中啟動文件壓縮功能,這就將所需空間從 250 MB 減少到大約 170 MB 。另外,在一些測試中,在郵件資料庫建立之後,啟用 Domino Attachment and Object Store (DAOS) 資料庫屬性,還在郵件箱和郵件日誌資料庫中啟用 DAOS 。

在第一個測試中,針對兩臺 Lotus Domino 郵件伺服器的 SSL 埠,模擬 4000 個 NotesBench DWA85 使用者, 在客戶端與伺服器之間沒有部署 BIG-IP LTM 代理。在本測試中,每個伺服器有 2000 個活動 DWA 使用者。

在第二個測試中,有 4000 個 NotesBench DWA85 模擬使用者,經過 BIG-IP LTM 代理,然後訪問郵件伺服器。在本測試中,禁用了 Lotus Domino 郵件伺服器的響應快取和 GZIP 壓縮,採用如下的 Notes.ini 設定:

Notes_wa_GZIP_Disable=1
HTTPDisableUrlCache=1

也禁用了 Lotus Domino 目錄伺服器文件中 HTTP 伺服器的 SSL 埠。在測試過程中,BIG-IP LTM 代理伺服器負責處理快取、GZIP 壓縮和 SSL 加密。

表 1-3 總結了所有的硬體規範


表 1. 伺服器 1 的硬體配置
硬體 規範
型號 Intel 64 位平臺
測試用處理器/速度 Intel® Xeon MP configured as 2 quad-core processor /3.67 GHz
記憶體 8 GB
活動物理驅動器 42
活動邏輯卷 3
作業系統 Microsoft Windows 2003 X64
Lotus Domino 版本 Lotus Domino 8.5.1,32 位應用
當 BIG-IP LTM 解除安裝 SSL/gzip 時使用的 Notes.ini 設定 iNotes_wa_GZIP_Disable=1
HTTPDisableUrlCache=1

表 2. 伺服器 2 的硬體配置
硬體 規範
型號 Intel 64 位平臺
測試用處理器/速度 Intel Xeon MP configured as 2 quad-core processor /3.06 GHz
記憶體 12 GB
活動物理驅動器 42
活動邏輯卷 3
作業系統 Microsoft Windows 2003 X64
Lotus Domino 版本 Lotus Domino 8.5.1, 32 位應用
當 BIG-IP LTM 解除安裝 SSL/gzip 時使用的 Notes.ini 設定 iNotes_wa_GZIP_Disable=1
HTTPDisableUrlCache=1

表 3. 伺服器 3 的硬體配置
硬體 規範
型號 6900
2x dual-core
記憶體 8 GB
活動快閃記憶體驅動器 8 GB
活動硬體驅動器 2 x 320 GB
作業系統 10.1

圖 6 顯示配置基線。


圖 6. 配置基線
 配置基線

執行測試配置

採用兩臺配有雙 3.6 GHz Xeon 處理器,8 GB 實體記憶體的 IBM 3850s 伺服器,每個伺服器連線一個配有 42 塊光纖盤的 DS4300 ,採用 Microsoft Windows 2003 Server Enterprise 64-bit Edition 作業系統(見圖 7 )。Linux® 伺服器的 NotesBench 驅動載入系統具有處理 4000 DWA85 模擬使用者的能力。


圖 7. 對 BIG-IP LTM 6900 進行測試配置
 對 BIG-IP LTM 6900 進行測試配置

執行設定

以下是對 BIG-IP LTM 的設定:

  • SNAT: Set to Automap
  • Nagle: Disabled
  • SSL: Enabled
  • Send buffer: 262144
  • Recv window: 262144
  • HTTP Profile:
    • Defaults from http-wan-optimized-compression-caching
    • Compress: Enabled
    • Compress GZIP level: 5
    • RAM cache size: 200 MB

Lotus Notes 的設定為:

  • SSL: Disabled
  • HTTP Caching: Disabled
  • GZIP: Disabled

執行結果

表 4 展示了兩個配置的關鍵度量值。


表 4. 關鍵結果
測試 基線 BIP-IP LTM 提高百分比
事務/分鐘 6028 6044 -0.27%
響應時間(單位:秒) 0.338 0.083 75.44%
處理器忙 29.4 20.9 28.91%
磁碟 I/O Ops/秒 525 530 -0.95%
磁碟 Kbytes/秒 4406 4308 2.22%

在 Lotus Domino 伺服器中,顯示有意義的單個請求響應時間和處理器繁忙級別的區別。通過正確部署 BIGIP ADC ,平均響應時間提高了 75%(見圖 8 )。

換句話說,經過該裝置比直接連線 Lotus Domino 伺服器的響應速度快四倍。這一提高的原因之一是 ADC 持續開啟到 Lotus Domino 伺服器的連線,並能更高效地使用這些通道來進行後續的請求。

而且,Lotus Domino 伺服器上處理器的繁忙級別少於未使用 ADC 時的 28% ;更低的處理器繁忙級別允許 Lotus Domino 伺服器能保持更多的併發使用者。


圖 8. 效能提高百分比
 效能提高百分比

注意:我們還模擬與郵件客戶端進行一些關鍵互動的低速連線,來度量客戶端響應時間。 當頻寬成為關鍵限定因素時, 我們不度量我們所計時的關鍵使用者操作的任何有意義的提高。


結束語

想獲取 Lotus iNotes 的高可用性,需要使用軟體負載均衡器或者硬體 ADC 結合 Lotus Domino 叢集化,以及包含映象配置和稀疏叢集的拓撲。

支援全映象叢集相對簡單,但正確使用稀疏叢集比較複雜。我們還介紹一些新的伺服器端邏輯,來幫助理解稀疏叢集拓撲。

這樣當叢集中的一臺伺服器當機時,稀疏叢集能夠在叢集中將負載平均地分配給剩餘的伺服器,因此不必在叢集內的每臺伺服器上為每個使用者保留郵件檔案的副本。

效能執行還展示了,部署 ADC 後,明顯節省了 Lotus Domino 伺服器的處理器資源。此外,該測試證實了,對於各種請求的響應時間有明顯的優化,也因此縮短了具有合理頻寬的連線使用者的響應時間。

對於想採用更以 Web 為中心的解決方案的組織,在軟體負載均衡器或者硬體 ADC 方面的投資,能夠明顯提高 Lotus Domino 郵件伺服器的使用者響應時間並降低處理器負載。


附錄

表單 ServersLookup 有一個稱為 $$HTMLHead 的,文字型別的 “Computed for display” 欄位。該欄位包含此處所展示的公式。 其中增加了除錯語句,這樣,如果在瀏覽器中手動開啟該表單,就可以看到公式的結果。

要手動開啟表單,發起如下請求:

http://mail.acme.ibm.com/iwaredir.nsf/ServersLookup?OpenForm&nsfpath=mail\jsmith.nsf
tmpDebug := "";
tmpNSFPath := @ReplaceSubstring(@URLDecode
( "Domino"; @UrlQueryString("nsfpath") );"/";"\\");
tmpServers := @DbLookup( "":"" ; "":"cldbdir.nsf" ; "($Pathname)" ; 
tmpNSFPath; "CanonicalServername");
tmpServers:=@If(@IsError(tmpServers);"";tmpServers);
REM {Lookup home mail server };
tmpHomeServer:=@Name([Canonicalize];@NameLookup( [NoUpdate];
@UserName; "MailServer" ));
REM {Is Home Mail server in list of servers, then move this up to 
the front of the list};
tmpServers := @If(@IsMember(tmpHomeServer;tmpServers); 
tmpHomeServer : @Transform(tmpServers;"x";@If(x=tmpHomeServer;@Nothing;x))
;tmpServers);
tmpDebug := tmpDebug + "ReplicaServers:" + @Implode(tmpServers;",");
tmpDNSNames := "";
tmpClusterName := "";
tmpClusterServers := "";
REM {If no servers found, then db is in a different cluster, return list of cluster 
servers, with home server in front of list};
tmpServers := @If(tmpServers="" | @Elements(tmpServers)=0;
  @Do(
    tmpDebug := tmpDebug + "Looking for cluster servers;";
    tmpClusterName := @Subset(@DbLookup("":""; "":"names.nsf"; "($ServersLookup)"; 
    tmpHomeServer; "ClusterName"); 1);
    tmpClusterServers := @DbLookup( "":""; "":"names.nsf"; "($Clusters)"; 
    tmpClusterName; "$0");
  tmpClusterServers := @Transform(tmpClusterServers;"x";
@If(x=tmpHomeServer;@Nothing;@Name([Canonicalize];x)));
    tmpClusterServers := @If(@IsMember(tmpHomeServer;tmpClusterServers); 
    tmpHomeServer : @Transform(tmpClusterServers;"x";
@If(x=tmpHomeServer;@Nothing;x));tmpClusterServers);
    tmpClusterServers);
  tmpServers);
tmpLimit:=@Elements(tmpServers)+1;
@For(n:=1;
n0;tmpDNSNames+",";"") + 
@LowerCase(@If (tmpHTTPHostNameALT!="";tmpHTTPHostNameALT;tmpServerFQDN))
);
@If(tmpClusterName="";@SetHTTPHeader("X-Domino-ReplicaServers";tmpDNSNames);
@SetHTTPHeader("X-Domino-ClusterServers";tmpDNSNames));
@SetHTTPHeader("Cache-control";"no-store");
@If(tmpDebug="";"";"
"+tmpDebug+"
")

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-665641/,如需轉載,請註明出處,否則將追究法律責任。

相關文章