■ 北京市馳宇通信導航工程公司 秦明
編者按:MQ故障原因很多,經常會出現MQ軟件故障,但有時其他方面的故障卻容易被忽略,本文講解了因為網絡原因導致的一次故障,并對常見的MQ故障做了總結。
MQ在銀行、電信、交通運輸、政府機關等各行各業廣泛應用,它以其特有的先進機制保證對消息的“Once and Once only”的傳輸,做到不丟失、不復傳,保證傳輸的可靠性。
MQ應用于民航數據庫中,MQ消息是24小時不間斷發送。隨著MQ在民航數據庫中應用越來越多,MQ故障也越來越多。MQ故障又分為很多種,有時處理一個故障要花費不少時間。為了盡可能縮短處理MQ故障時間,急需把民航數據庫中MQ的故障總結出來,并加以分析。當以后再遇到相同故障時,能及時處理故障。保證MQ在民航數據庫中不間斷地傳輸數據。本文結合MQ在民航數據庫的應用,分析MQ在應用中的一個故障。

圖1 MQ的簡單流程
民航數據庫系統是一個實時數據庫系統,MQ在民航數據庫中主要負責傳輸各種數據。MQ的簡單流程如圖1所示。
圖1中,當應用程序A把消息放在隊列管理器A的遠程隊列A中時,消息將被存放在傳輸隊列B中,直到發送通道A被啟動。當發送通道A啟動時,機器B的接收通道被自動啟動。MCA將消息交付到遠程隊列管理器B的目標隊列中,即本地隊列C中。應用程序C從本地隊列C接收消息。如果本地隊列不存在或隊列已滿,則將消息交付死信隊列,如無死信隊列則消息滯留在傳輸隊列中,通道則被堵塞,如果是非永久消息則丟棄。消息通道的兩端都必須處在“running”狀態,消息才能被發送。
以上是消息從機器A的隊列管理器A發送到機器B的隊列管理器B。反過來,當應用程序D把消息放在隊列管理器D的遠程隊列D中時,消息將被存放在傳輸隊列E中,直到發送通道B被啟動。當發送通道B啟動時,機器A的接收通道被自動啟動。MCA將消息交付到遠程隊列管理器A的目標隊列中,即本地隊列F中。應用程序B從本地隊列F接收消息。
通訊機機器A負責向數據庫DB01機器和數據庫DB02機器傳輸各種數據,當時通訊機A機器發生硬盤故障,無法重新啟動機器。決定啟用通訊機A備份機器。重新啟動通訊機A備份機器后,啟動MQ隊列管理器,啟動相關應用程序后,還需啟動通訊機機器A備機到數據庫DB01和數據庫DB02的通道。
在通道的發送方運行命令:
Stop CHANNEL(通道名)
RESET CHANNEL(通道名)
在通道的接收方運行命令:
RESET CHANNEL(通道名)
然后再在通道的發送方運行命令:
Start CHANNEL(通道名)
啟動通道后,到數據庫DB01通道狀態是retrying,一直不能變成running。到數據庫DB02的通道是running。又嘗試了一次重啟到數據庫DB01通道,還是retrying。
查看網絡是否連通,ping數據庫DB01的IP地址,發現網絡不通。通訊機A備機和數據庫DB01是不同網段的,查看路由發現沒有添加路由。手工添加路由后,ping數據庫DB01的IP地址,發現網絡連通,到數據庫DB01的通道變成running,故障解決。
由此看出,保障MQ正常傳輸數據,首先要保障網絡連接正常。如果網絡不通的故障不經常出現,比較容易忽視掉。
而且網絡不通也有很多種情況,比如某段網線的問題、網線結晶頭問題、HUB故障、HUB端口問題、路由器故障、路由器端口問題、路由器設置問題、光纖問題、路由沒有添加問題,還有因為斷電問題引起等等,都需要一步一步排查。
(1)某段網線有問題
當網絡不通時,可能是某段網線有問題,可以使用測網線儀器,每段網線進行測試,最后找到有問題的網線,更換網線。
(2)網線結晶頭問題
更換網線結晶頭。
(3)HUB故障
發現HUB故障,更換一個新HUB。
(4)HUB端口問題
如果是HUB端口問題,可以更換另外一個端口。也可以更換一個新HUB。
(5)路由器故障
發現路由器故障,更換一個新HUB。
(6)路由器端口問題
可以更換另外一個端口。
(7)路由器設置問題
如果發現是路由器設置問題,恢復原先備份的路由器配置,或者重新配置路由器。
(8)光纖問題
如果發現是光纖問題,可以使用儀器測光纖,找到有問題的光纖,更換光纖。或者使用備份光纖。
(9)斷電問題
如果發現是斷電問題,及時聯系電工處理進行恢復。
(10)沒有添加路由問題
手工添加路由。
通過上面MQ的故障實例,可以清楚知道這次故障主要是沒有添加路由,導致網絡不通,不是MQ軟件故障。但是剛開始切換通訊機備機后,到數據庫DB01通道狀態是retrying,一直不能變成running,會習慣性的認為是MQ軟件故障。因為局域網的網絡故障很少發生,大部分時間網絡基本上都是通的,故障率很低,而且每天巡視設備和檢查網絡,所以網絡故障很容易被忽視。第一故障點排查時會檢查MQ軟件故障,比如通常先檢查MQ錯誤日志;重置MQ序列號,重啟通道;查看MQ有沒有啟動通道監聽程序;還有MQ的權限問題等等。
如果這樣一步一步查下去,每一步都要浪費不少時間,最后可能還是沒查出問題所在。那么如果先檢查網絡狀況的話,耽誤的時間很少,一個ping命令就可以。如果不是網絡故障很快就能排除。如果是網絡故障,直接就去查網絡,然后找到故障點,找到處理故障的方法。
目前應用最多的消息中間件產品為IBM MQ。MQ應用于民航數據庫中,要保證MQ消息24小時不間斷地發送,因此快速處理MQ故障越來越重要。
所以我們要總結經驗,寫成維護手冊。當以后再出現這種類似故障時,能快速找到故障點,處理故障, 大大縮短處理故障的時間,保障MQ在民航數據庫中及時傳輸數據。