WebSphere MQ消息通道管理調優

WebSphere MQ作爲IBM軟件家族的消息傳輸中間件產品,以其出色的特性和功能在業界享有盛譽。WebSphere MQ獨特的安全機制、簡便快速的編程風格、卓越不凡的穩定性、可擴展性和跨平臺性,以及強大的消息通訊能力,使得它在銀行、電信,還是在交通運輸、政府機關等各行各業,贏得了很高的市場份額。在中國,WebSphere MQ同樣擁有廣泛的用戶基礎和許許多多的成功案例。它不僅具有跨平臺、跨網絡的特性,而且以其特有的先進機制保證對消息的"Once and Once only"的傳輸,做到不丟失、不復傳。
  在WebSphere MQ給客戶帶來的衆多價值中,有一點十分重要,就是它的通訊感知和恢復機制,尤其適用於我國目前的現狀,在我國很多地方存在網絡線路質量差,網絡狀態不穩定的現狀。因爲WebSphere MQ在支持同步通訊的同時,提供了基於消息隊列存儲-轉發機制的異步通訊模式,應用程序只需將消息交給WebSphere MQ,就由WebSphere MQ負責將消息安全、可靠地發送出去,不再需要應用和人工的干預,當網絡出現故障的情況下,或對方主機發生故障時,WebSphere MQ能夠作到不需要人工干預,自動探測網絡狀況的好壞,並且在網絡恢復正常之後能夠繼續正常工作。
  而這一功能需要對操作系統的 TCP/IP參數和MQ本身有關配置參數的正確配置爲前提;另一方面,在WebSphere MQ的系統配置和管理中,對通道(Channel)的管理是最複雜也是最重要的部分,本文將對如何利用TCP/IP參數配置來更好地實現通訊恢復作一討論,並對有關WebSphere MQ通道管理方面的幾個有效措施加以簡單討論。
  如何配置操作系統TCP/IP參數和MQ從而實現斷網續傳和故障恢復
  WebSphere MQ作爲一個消息傳輸產品,本身是架構在TCP/IP之上的,因此與操作系統或網絡底層的TCP/IP特性有着密切的關係,很多情況下我們要藉助於修改操作系統的YCP/IP參數,來使它更好地爲WebSphere MQ服務,從而更加完善地發揮WebSphere MQ的強大功能,現僅對TCP/IP參數設置的有關技巧作一簡單討論,並舉例加以說明。
  當我們要在WebSphere MQ的兩個隊列管理器之間建立通訊時,由於WebSphere MQ的通道是單向的,我們必須要建立兩條通道(Chanel),比如建立兩條類型分別爲發送(sender)類型和接收(receiver)類型的通道來實現兩個WebSphere MQ Server之間的通訊,在通道的兩端WebSphere MQ利用MCA(消息通道代理)來管理和監控通道的起停等運行狀態,並對通道兩端的消息系列號(Message Sequence Number)等進行協同管理,以保證WebSphere MQ對消息的"Once and Once Only"的傳輸。對WebSphere MQ而言,在其系統配置配置文件mqs.ini文件中,在mqs.ini文件中,包含了對隊列管理器的日誌大小、通道屬性以及通過XA標準與數據庫協同工作時的有關參數的設置,除此之外,有一節用於控制有關TCP/IP特性的信息,即:
  TCP:
  KeepAlive=Yes或
  KeepAlive=No
  它的作用在於:當設置KeepAlive=Yes時,表示操作系統的TCP/IP參數設置對WebSphere MQ生效。
  由於WebSphere MQ接收通道的MCA處於通訊的被動方,它一直等待從發送方傳來的消息,因此它不知道什麼時候發送方會停止發送消息,也不知道當網絡出現故障時,發送方什麼時候會從工作狀態變爲停止狀態。這時由於出現網絡故障,網絡連接被斷掉,發送方通道狀態會由running狀態變爲retrying狀態,發送方會試圖重新建立網絡連接,而這時接收方的通道卻沒有停下來,仍處於一種假"running"的狀態,相應的我們會得到一個"Channel is in use"的錯誤信息,導致發送端想重起卻重起不了。
  出現這一現象的原因是:當發送方MCA啓動通道並長時間沒有斷開連接,這時出現網絡故障,TCP/IP的socket連接被破壞,當發送停止通道並重新啓動時,它需要建立一個新的socket連接,而接收方仍停留在原來的RECEIVE調用上,它的socket特徵與發送方新的socket特徵不一致,因此新的socket連接建立失敗。
我們可以利用TCP/IP特性來克服這一點,更好地實現斷網續傳。通常,操作系統的TCP/IP參數的缺省設置是2個小時(常見的操作系統平臺如:Windows 2000/NT以及AIX,HP-UX,Sun Solaris,Linux等,缺省設定均爲2個小時)即發送KeepAlive探測包的時間是2小時,所以需要2個小時的時間它纔會獲知網絡連接已經斷開,這對於我們來說無疑是無法接受的。
  在這種情況下,我們可以通過配置TCP/IP KeepAlive參數來提高TCP/IP的響應速度,從而實現網絡故障時WebSphere MQ能夠迅速斷開通道連接從而重新啓動通道,實現斷網續傳的強大功能。只有這樣,在發送端,MQ的channel才能由running狀態變爲 retrying狀態,同時,在接收端,MQ的channel才能由running狀態變爲not found狀態, 這樣,在網絡或主機重新恢復時,通道才能重新建立起連接,恢復running狀態。
  要實現上述功能,我們需要作以下兩方面的工作:
  1)修改WebSphere MQ系統配置文件mqs.ini,增加如下一節:
  TCP:
  KeepAlive=Yes
  目的是使系統的TCP/IP設置對WebSphere MQ生效。
  2)修改操作系統的TCP/IP參數;
  在不同的系統上,修改TCP/IP參數的方法略有不同,現僅以Windows 2000/NT、RISC6000和HP爲例作一簡單說明。
  在Windows NT平臺上, 我們利用regedit來修改系統註冊表,修改HKEY_LOCAL_MACHINE\CurrentControlSet\Services\Tcpip\Parameters下的以下三個參數:
  KeepAliveInterval,設置其值爲1000
  KeepAliveTime,設置其值爲300000(單位爲毫秒,300000代表5分鐘)
  TcpMaxDataRetransmissions,設置其值爲5
  在RISC6000平臺上, 用no命令修改如下參數:
  tcp_keepidle保持TCP/IP連接的時間,單位爲0.5秒,缺省值爲14,400,即兩個小時,我們可將它設爲5分鐘;
  tcp_keepinittcp連接初始timeout值,單位爲0.5秒,缺省值爲150,我們可將它設爲50;
  tcp_keepintvl連接間隔,單位爲0.5秒,缺省值爲150,我們可將它設爲50;
  我們也可以修改/etc/rc.net文件,
  /usr/sbin/no -o tcp_keepidle=240
  /usr/sbin/no -o tcp_keepinit=50
  /usr/sbin/no -o tcp_keepintvl=50
  注意:直接使用命令行修改,在機器重啓後,會失效;修改rc.net文件,可以做到永久生效。
  在HP平臺上,
  對於HP-UNIX V10.20及其在此之前的版本,用/usr/contrib/bin nettune命令來修改有關參數;
  對於HP-UNIX V10.30及其以上版本,用/usr/bin/ndd命令來修改有關參數。
  在SUN Solaris平臺上,
  用ndd -set /dev/tcptcp_keepalive_interval NNN命令來修改有關參數,tcp_keepalive_interval的單位爲毫秒,缺省值爲7200000毫秒,即2個小時。
  在SCO OpenServer平臺上,
  tcp_keepalive 和 tcp_keepidle 相同,其原先默認值爲 7200 秒,可設爲 600秒。tcp_keepintvl 其原先默認值爲 75 秒,可設爲15秒。均以"秒"爲單位。
  運行命令 ifconfig 命令修改:
  /etc/inconfig tcp_keepidle
  /etc/inconfig tcp_keepintvl
  需要注意的一點是通道兩端的KeepAlive參數要保持協調一致,若發送端的KeepAlive值小於接收端的KeepAlive值,則當網絡出現故障時,發送端的通道停下來之後,接收端的通道會仍然停不下來。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章