慌的一批,rabbitmq 断电后无法启动了...
Posted 程序员大咖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了慌的一批,rabbitmq 断电后无法启动了...相关的知识,希望对你有一定的参考价值。
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇
作者丨辣椒
来源丨Java知音(ID:Java_friends)
生产的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"
一切又恢复了平静。
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!
点击👆卡片,关注后回复【面试题
】即可获取
在看点这里好文分享给更多人↓↓
以上是关于慌的一批,rabbitmq 断电后无法启动了...的主要内容,如果未能解决你的问题,请参考以下文章