MQ在民航数据库中的故障
2019-04-03北京市驰宇通信导航工程公司秦明
■ 北京市驰宇通信导航工程公司 秦明
编者按: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接收消息。
民航数据库应用中的一个故障分析
1.故障现象
通讯机机器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。
2.故障原因及解决方法
查看网络是否连通,ping数据库DB01的IP地址,发现网络不通。通讯机A备机和数据库DB01是不同网段的,查看路由发现没有添加路由。手工添加路由后,ping数据库DB01的IP地址,发现网络连通,到数据库DB01的通道变成running,故障解决。
3.故障分析总结
由此看出,保障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在民航数据库中及时传输数据。