慌的一批,rabbitmq 断电后无法启动了...

Posted Java知音_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了慌的一批,rabbitmq 断电后无法启动了...相关的知识,希望对你有一定的参考价值。

点击关注公众号,实用技术文章及时了解

生产的rabbitmq集群环境已经部署了好几年了,版本是3.8.2, 3个节点,一直稳定运行,从来不管他。

某一天早上同事给我打电话,说由于某些原因,机柜断电,很多服务都重新启动了。但是有些服务启动需要rabbitmq, 不幸rabbitmq没有启动起来,所以他们的服务也启动不了。大早上从被褥中起来,胡乱塞了两口赶紧的去公司看看什么情况。

先看一下服务的状态:

systemctl status rabbitmq-server.service

结果肯定是inActive,先试着启动一个节点:

systemctl start rabbitmq-server

漫长的等待,最后终于出来提示,大意是:连接或者读取超时,具体记不清楚了。在其他的两个节点启动服务,同样的报错。当时就蒙了,两年多没有碰rabbitmq 了,有关的知识都忘了,还是老老实实从日志查吧。

cat /var/log/rabbitmq/rabbit@xxxxx.log | more

仔细查找,发现了下面的问题:

之前没有更深入的研究过rabbitmq, 看见Mnesia tables都不知道是干什么的?百度一下,解释为:

Mnesia 是一个分布式数据库,RabbitMQ 使用它来存储有关用户、交换器、队列和绑定的信息。但是,消息不存储在数据库中。

有点明白了,我集群部署rabbitmq, 交换器、队列等都是设置为持久化的,那么这个Mnesia文件数据库保存的是这些相关的信息;由于突然断电,Mnesia被破坏,rabbitmq在读取Mnesia里面的信息的时候读取不了,超时,所以服务没有启动起来。我找到这个Mnesia:

由于是休息日早上,业务少的可怜,根本不会有消息堆积的,所以直接先使用 mv mnesia mnesia.bak改一下,备份一下:

再次重新启动rabbitmq服务,成功启动。另外两个节点也同样处理。

由于mnesia已经被备份,原来的信息都丢失了,所以重新把后面的两个节点加入到第一个节点作为集群部署:

sudo rabbitmqctl stop_app //只关闭rabbitmq服务,不关闭erlang服务
sudo rabbitmqctl reset //这个命令我在加集群时没有执行
sudo rabbitmqctl join_cluster rabbit@XXXXXXXXX //--ram这个参数是内存节点模式,不是就是硬盘节点
sudo rabbitmqctl start_app

用户也没有了,加上远程可以访问的用户:

sudo rabbitmqctl add_user rabbitmq ******
sudo rabbitmqctl set_user_tags rabbitmq administrator
sudo rabbitmqctl set_permissions -p "/" rabbitmq ".*" ".*" ".*"
//查看新增加的用户
sudo rabbitmqctl list_users

创建自己的vhost:

rabbitmqctl add_vhost XXX
rabbitmqctl set_permissions -p XXX rabbitmq ".*" ".*" ".*"

ok, 其他人的应用都可以启动连上rabbitmq了。最后我把镜像队列加了一下:

sudo rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue "
^queue_"
' "ha-mode ":"all","ha-sync-mode ":"automatic" 

一切又恢复了平静。

推荐

Java面试题宝典

技术内卷群,一起来学习!!

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

以上是关于慌的一批,rabbitmq 断电后无法启动了...的主要内容,如果未能解决你的问题,请参考以下文章

慌的一批,rabbitmq 断电后无法启动了...

请教在断电后如何自动启动虚拟机?

CentOS8断电后无法正常启动

记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程

Geoserver 无法启动 - 断电后 - 是啥原因?

断电之后ESXI里的vcenter server 中安装的一台虚拟机不可访问,无法开启电源,该怎么办?