慌的一批,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

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

b1b4b833b12bfe1b88cfea34c48684f2.png

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

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

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

a44d9fc385aa0e67391815ebc56cb9ec.png

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

839d821696f10886d5474149a0060e9b.png

再次重新启动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 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

fd755befc5b621bbdb4c383cd0893bb9.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里9b672a1a43f340f58ec9c887af890f4c.gif好文分享给更多人↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值