线上MQ宕机复盘
背景
时间:2018年11月20号晚上10点40
服务器:mq-slave
故障现象: 钉钉收到报警MQ服务器的rabbitmq进程挂了.手动启动后,过一会超时退出
1.查看日志.提示delayed_message插件超时.无法启动.
联系开发.可能是白天修改了延时队列机制的缘故
1 | less /var/log/rabbitmq/rabbit@node2 |
2.关闭该插件
1 | root@node2:~# rabbitmq-plugins disable rabbitmq_delayed_message_exchange |
3.再次启动.可以成功启动
1 | root@node2:~# service rabbitmq-server start |
4.尝试手动启动该插件.仍然超时失败
1 | root@node2:~# rabbitmq-plugins enable rabbitmq_delayed_message_exchange |
5.停止rabbitmq服务
1 | root@node2:~# service rabbitmq-server stop |
联系开发.可能是延迟队列消息太多,将服务器的MQ程序卡死,导致插件无响应.从而无法启动.由于MQ使用了2台服务器座位集群,而且使用了镜像队列方式.所以清洗mq-slave服务器这台服务器的数据.重新启动.
确定是否使用镜像队列方式可以通过以下命令查看.
1 | root@node2:~# rabbitmqctl list_policies |
ha-mode: 代表使用镜像队列.
ha-sync-mode:表示自动同步数据
更多信息请网上搜索
1.关闭插件,重新启动rabbitmq进程.(因为清除数据需要先启动rabbitmq进程)
1 | root@node2:~# service rabbitmq-server start |
2.将这台服务器从集群节点拿掉.不然清楚数据会影响现有的生产环境
1 | root@node2:~# rabbitmqctl stop_app |
3.数据删除完毕后,重新启动rabbitmq节点
1 | root@node2:~# rabbitmqctl start_app Starting node rabbit@node2 ... |
4.启动插件.显示已经启动了
1 | oot@node2:~# rabbitmq-plugins enable rabbitmq_delayed_message_exchange |
5.显示插件,查看确实已经成功启动
1 | root@node2:~# rabbitmq-plugins list -E |
6.查看节点状态
1 | rabbitmqctl status |
7.查看集群状态.可以看到只识别到本身这台的节点,没有加入到集群
1 | root@node2:~# rabbitmqctl cluster_status |
8.关闭这台服务器节点
1 | root@node2:~# rabbitmqctl stop_app Stopping node rabbit@node2 ... |
9.加入另外一台node1的集群
1 | root@node2:~# rabbitmqctl join_cluster rabbit@node1 |
10.启动节点
1 | root@node2:~# rabbitmqctl start_app |
11.查看集群状态.可以看到2个节点都识别到了
1 | root@node2:~# rabbitmqctl cluster_status |
12.查看日志,可以看到集群正在往该节点上同步数据
1 | =WARNING REPORT==== 21-Nov-2018::00:39:47 === msg_store_persistent: rebuilding indices from scratch |
13.在本节点上查看队列.可以看到队列已经同步过来了
1 | root@node2:~# rabbitmqctl list_queues |
另外在web控制台上还能看到更详细的信息.