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

湖蓝几何球体LinkedIn Banner.png
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


问题描述:

机房突然停电,rabbitmq的主机异常断电,集群服务全部需要重启。但是在执行service rabbitmq-server start 启动主节点服务的时候,没有反应,服务没有启动,命令也执行卡住了。必须Ctrl+C结束进程:

[root@master-2 rabbitmq]# service rabbitmq-server start
Starting rabbitmq-server (via systemctl):  ^C
[root@master-2 rabbitmq]#

查看/var/log/rabbitmq/startup_log 发现有如下报错信息:

[root@master-2 rabbitmq]# tail -1000 startup_log 
BOOT FAILED
===========

Timeout contacting cluster nodes: ['rabbit@s1-1','rabbit@slave-2'].

BACKGROUND
==========

This cluster node was shut down while other nodes were still running.
To avoid losing data, you should start the other nodes first, then
start this one. To force this node to start, first invoke
"rabbitmqctl force_boot". If you do so, any changes made on other
cluster nodes after this one was shut down may be lost.

DIAGNOSTICS
===========

attempted to contact: ['rabbit@s1-1','rabbit@slave-2']

rabbit@s1-1:
  * connected to epmd (port 4369) on s1-1
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on s1-1
  * suggestion: start the node
rabbit@slave-2:
  * unable to connect to epmd (port 4369) on slave-2: address (cannot connect to host/port)

current node details:
- node name: 'rabbit@master-2'
- home dir: /var/lib/rabbitmq
- cookie hash: oqRyxdQQXO31mzM8U0ysNA==

{"init terminating in do_boot",timeout_waiting_for_tables}

解决方法1:

根据/var/log/rabbitmq/startup_log日志最后的报错信息{“init terminating in do_boot”,timeout_waiting_for_tables},在网上查询到原因,和linux下rabbitmq大致有关系的,主要有这三种说法:
1、5672端口被占用了,导致服务起不来
2、/var/log/rabbitmq目录的权限不对,需要重新赋权限
3、/var/lib/rabbitmq/mnesia这个数据目录异常,删除原来的数据目录,重新启动服务

方法一:检查端口,发现并没有5672的这个端口:

[root@master-2 rabbitmq]# netstat -anp|grep 5672
tcp        0      0 193.168.0.90:3306       131.10.10.120:56727     ESTABLISHED 3666/mysqld         
tcp6       0      0 193.168.0.90:56727      193.168.0.93:9092       ESTABLISHED 4891/java           
[root@master-2 rabbitmq]# netstat -ano|grep 5672
tcp        0      0 193.168.0.90:3306       131.10.10.120:56727     ESTABLISHED keepalive (54.12/0/0)
tcp6       0      0 193.168.0.90:56727      193.168.0.93:9092       ESTABLISHED keepalive (50.53/0/0)

方法二:修改/var/log/rabbitmq权限,进去/var/log/rabbitmq/目录,发现该目录下面的文件确实存在权限不统一的问题,于是修改权限重新启动服务,还是失败:

[root@master-2 rabbitmq]# cd /var/log/rabbitmq/
[root@master-2 rabbitmq]# ll
total 11740
-rw-r--r--  1 rabbitmq rabbitmq   29075 May 14 11:14 rabbit@master-2.log
-rw-r--r--  1 rabbitmq rabbitmq  159053 Apr 29 03:19 rabbit@master-2.log-20180429.gz
-rw-r--r--  1 rabbitmq rabbitmq 1756006 May  7 03:11 rabbit@master-2.log-20180507.gz
-rw-r--r--  1 rabbitmq rabbitmq 9881632 May 13 03:17 rabbit@master-2.log-20180513
-rw-r--r--  1 rabbitmq rabbitmq    3108 May 14 11:14 rabbit@master-2-sasl.log
-rw-r--r--  1 rabbitmq rabbitmq     950 Apr 28 14:22 rabbit@master-2-sasl.log-20180429.gz
-rw-r--r--  1 rabbitmq rabbitmq    1677 May  4 15:25 rabbit@master-2-sasl.log-20180507.gz
-rw-r--r--  1 rabbitmq rabbitmq  159530 May 11 10:11 rabbit@master-2-sasl.log-20180513
-rw-r--r--  1 root     root           0 May  7 15:14 shutdown_err
-rw-r--r--  1 root     root          44 May  7 15:14 shutdown_log
-rw-r--r--. 1 root     root         103 May 14 11:15 startup_err
-rw-r--r--. 1 root     root        1323 May 14 11:15 startup_log
[root@master-2 rabbitmq]# chown -R rabbitmq:rabbitmq /var/log/rabbitmq/
[root@master-2 rabbitmq]# ll
total 11740
-rw-r--r--  1 rabbitmq rabbitmq   29075 May 14 11:14 rabbit@master-2.log
-rw-r--r--  1 rabbitmq rabbitmq  159053 Apr 29 03:19 rabbit@master-2.log-20180429.gz
-rw-r--r--  1 rabbitmq rabbitmq 1756006 May  7 03:11 rabbit@master-2.log-20180507.gz
-rw-r--r--  1 rabbitmq rabbitmq 9881632 May 13 03:17 rabbit@master-2.log-20180513
-rw-r--r--  1 rabbitmq rabbitmq    3108 May 14 11:14 rabbit@master-2-sasl.log
-rw-r--r--  1 rabbitmq rabbitmq     950 Apr 28 14:22 rabbit@master-2-sasl.log-20180429.gz
-rw-r--r--  1 rabbitmq rabbitmq    1677 May  4 15:25 rabbit@master-2-sasl.log-20180507.gz
-rw-r--r--  1 rabbitmq rabbitmq  159530 May 11 10:11 rabbit@master-2-sasl.log-20180513
-rw-r--r--  1 rabbitmq rabbitmq       0 May  7 15:14 shutdown_err
-rw-r--r--  1 rabbitmq rabbitmq      44 May  7 15:14 shutdown_log
-rw-r--r--. 1 rabbitmq rabbitmq     103 May 14 11:15 startup_err
-rw-r--r--. 1 rabbitmq rabbitmq    1323 May 14 11:15 startup_log

但是修改了权限之后,服务还是起不来:

[root@master-2 rabbitmq]# service rabbitmq-server start    
Starting rabbitmq-server (via systemctl):  ^C
[root@master-2 rabbitmq]# 

方法三:删除原有的数据目录,然后重新启动服务

[root@master-2 rabbitmq]# cd /var/lib/rabbitmq/
[root@master-2 rabbitmq]# ll
total 4020
-rw-r----- 1 rabbitmq rabbitmq 4114398 May 14 11:15 erl_crash.dump
drwxr-x--- 4 rabbitmq rabbitmq      94 May 14 11:38 mnesia
[root@master-2 rabbitmq]# mv mnesia mnesia.bak
[root@master-2 rabbitmq]# ll
total 4020
-rw-r----- 1 rabbitmq rabbitmq 4114398 May 14 11:15 erl_crash.dump
drwxr-x--- 4 rabbitmq rabbitmq      94 May 14 11:38 mnesia.bak

然后重新启动服务成功:

[root@master-2 rabbitmq]# service rabbitmq-server start    
Starting rabbitmq-server (via systemctl):                  [  OK  ]
[root@master-2 rabbitmq]# ps -ef|grep rabbitmq
rabbitmq  3131     1  0 May13 ?        00:00:00 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon
root     19908     1  0 11:41 ?        00:00:00 /bin/sh /etc/rc.d/init.d/rabbitmq-server start
root     19910 19908  0 11:41 ?        00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitmq-server
root     19914 19910  0 11:41 ?        00:00:00 /bin/sh /usr/sbin/rabbitmq-server
root     19932 19914  0 11:41 ?        00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server 
rabbitmq 19935 19932  0 11:41 ?        00:00:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 20158 19935 17 11:41 ?        00:00:04 /usr/lib64/erlang/erts-5.10.4/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -B i -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/ebin -noshell -noinput -s rabbit boot -sname rabbit@master-2 -boot start_sasl -config /etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@master-2.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@master-2-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@master-2-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@master-2" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
rabbitmq 20316 20158  0 11:41 ?        00:00:00 inet_gethost 4
rabbitmq 20317 20316  0 11:41 ?        00:00:00 inet_gethost 4
root     20406 16497  0 11:42 pts/5    00:00:00 grep --color=auto rabbitmq
[root@master-2 rabbitmq]# 

注意,这只是主节点的处理方法,在两台从节点,需要做如下操作:
1、检查两台从节点的/var/lib/rabbitmq/.erlang.cookie文件内容是否和主节点是保持一致的
2、删除原有的数据/var/lib/rabbitmq/mnesia目录,执行rabbitmq-server -detached重新启动服务
3、在两台从节点上执行下面的命令,重新加入集群:

#rabbitmqctl stop_app 
#rabbitmqctl reset 
#rabbitmqctl join_cluster rabbit@master-2   # rabbit@master-2里面的master-2是主节点的主机名,注意修改
#rabbitmqctl start_app

备节点执行完毕上面的步骤之后,需要在主节点验证集群的正确性:

[root@master-2 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@master-2'
[{nodes,[{disc,['rabbit@master-2','rabbit@s1-1','rabbit@slave-2']}]},
 {running_nodes,['rabbit@s1-1','rabbit@slave-2','rabbit@master-2']},
 {cluster_name,<<"rabbit@master-2">>},
 {partitions,[]},
 {alarms,[{'rabbit@s1-1',[]},
          {'rabbit@slave-2',[nodedown]},
          {'rabbit@master-2',[]}]}]

集群验证成功之后,使用主节点IP+端口登录,界面发现输入之前的用户名和密码,已经登录不进去了,需要在主节点重新创建管理用户并且赋予密码和访问权限

[root@master-2 rabbitmq]# rabbitmqctl add_user admin password123   #创建用户和密码
Creating user "admin"
[root@master-2 rabbitmq]# rabbitmqctl set_user_tags admin administrator   #给用户赋予管理员权限  
Setting tags for user "admin" to [administrator]
[root@master-2 rabbitmq]#  rabbitmqctl  set_permissions -p "/" admin ".*" ".*" ".*"  #给管理员赋予访问权限  
Setting permissions for user "admin" in vhost "/"

然后再使用主节点的IP+端口重新登录,输入用户名和密码,服务恢复。

解决方法2(推荐):

问题解决之后,发现还有一种说法:
Are you running in a clustered configuration? If so, rabbit might be waiting for the other nodes to come up.

在后面的工作中发现,确实存在个问题。当整个集群重启的时候,如果关掉了整个集群所有的节点,再启动服务。若先启动主节点,而备节点全部没有启动,就会出现上述的启动不了的问题。
如果先将从节点全部起起来,再启动主节点,就一切顺利,数据也不会丢失,这个应该是比上面更简便的方法。
从节点启动命令:

rabbitmq-server -detached

主节点启动命令:

service rabbitmq-server start

备注:本文为迁移博客,非近期遇到的故障

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/294216.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

热泵,预计到2025年市场规模将达到650亿美元

热泵是一种利用空气、水、地热等低品位能源&#xff0c;转化为高品位热能&#xff0c;提供供暖、热水和冷却等服务的热力设备。近年来&#xff0c;热泵市场逐步发展壮大&#xff0c;成为新能源市场的重点发展领域。全球市场分析&#xff1a; 近年来&#xff0c;全球绿色环保理念…

QT上位机开发(动态库dll的开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有的时候&#xff0c;我们不想把所有的代码都放在一个exe里面&#xff0c;这个时候我们就需要引入dll动态库的概念。在windows平台上面&#xff0c…

接口测试测什么?一个简单问题把我难住了!

那么设计测试用例时我们主要考虑如下几个方面&#xff1a; 01、功能测试 接口的功能是否正确实现了 接口是否按照设计文档中来实现 &#xff08;比如username参数写为了user&#xff0c;那么这就不符合&#xff0c;因为接口文档在整个开发中都需要使用&#xff0c;所以接口实…

Spss Amos 28安装包下载及安装教程

Amos 28下载链接&#xff1a;https://docs.qq.com/doc/DUnhwUXFnTGtyRnJ1 1.鼠标右键解压到“Amos 28” 2.选中Setup&#xff0c;鼠标右击选择“以管理员身份运行” 、3.点击“Next” 4.选择I accept the terms in the license agreement&#xff0c;点击“Next” 5.选择软件安…

Centos7.9或Deebian12安装K3s和k9s详细流程

1、在线安装k3s 安装的版本为&#xff1a;v1.23.15k3s1 curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRRORcn INSTALL_K3S_VERSION"v1.23.15k3s1" sh - 2、安装完成&#xff0c;测试 kubectl get nodes正常输出即没…

【教学类-综合练习-02】20231208 大3班 数字加减法练习(数字火车、X—Y加法减法、X乘法、X—Y数字分合)

教学情况 时间&#xff1a;20231208 班级&#xff1a;大3班 人数&#xff1a;21 目的&#xff1a;幼儿根据自己的能力水平&#xff0c;选择适合的数学题&#xff08;多款样式&#xff09; 在昨天大4班制作的基础上&#xff0c;特地打印一些小纸片数学题&#xff08;节省纸…

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker&#xff0c;Calendar Calendar&#xff1a;日历&#xff08;显示年月日视图控件&#xff09;DatePicker&#xff1a;日期选择器&#xff08;是一个更小的控件&#xff0c;点击控件时才会弹出一个日历&#xff09; Calendar使用 常用属性 DisplayMode&#…

【漏洞复现】通天星CMSV6车载监控平台FTP匿名访问

Nx01 产品简介 深圳市通天星科技有限公司&#xff0c;是一家以从事计算机、通信和其他电子设备制造业为主的企业。通天星车载视频监控平台软件拥有多种语言版本。应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控、警车车载视…

基于Java SSM框架实现宠物管理系统项目【项目源码+论文说明】

基于java的SSM框架实现宠物管理系统演示 摘要 随着我国经济的快速发展&#xff0c;人民生活水平的不断提高&#xff0c;宠物逐渐成为许多宠物爱好者的一种生活方式。 宠物的品种也越来越多样化&#xff0c;宠物不仅能给生活带来乐趣还可以成为空巢老人&#xff0c;独生子女很…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

ShardingSphere-JDBC初探

引言 为什么使用分库分表&#xff1f; 数据量太大单表放不下&#xff0c;并且公司不希望切换产品&#xff0c;可选的方案不多&#xff0c;ShardingSphere就是不错的选择。 切换产品指的是换成es、clickhouse、hbase这种支持大数据&#xff0c;试想一下切换产品对整个项目的改…

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

vivado license申请

AMD: Product Licensing

一分钟全方位认识飞速创软

公司简介 飞速软创专注于面向研发团队的一体化研发平台产品&#xff0c;倾力打造集高效与智能于一体的一体化研发平台产品。其根基深植于深圳这座科技之城&#xff0c;并已将业务版图拓展至北京、上海、珠海及香港等地&#xff0c;通过设立分公司和办事处&#xff0c;全方位覆盖…

音乐制作软件Studio One mac有哪些特点

Studio One mac是一款专业的音乐制作软件&#xff0c;该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

胎牛血清,预计2028年达到27.5亿美元以上

胎牛血清是从胎牛的脐带或心脏中提取出的一种高营养的医疗用品。本文将从全球市场和中国市场两方面进行分析其发展趋势。 全球市场分析&#xff1a;胎牛血清在药品和生物科技行业中有着广泛的应用&#xff0c;如细胞培养、疫苗制备、诊断试剂盒和治疗药物等。随着生物技术的不断…

多台西门子PLC对接Oracle数据库,实现PLC与数据库双向数据通讯

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯&#xff0c;既可以读取PLC的数据上报到数据库&#xff0c;也可以从数据库查询数据后写入到PLC的寄存器。 网关安装在设备侧&#xff0c;与设备同时起停&#xff0c;不担心数据丢失&#xff1b;在断网、服务器维护上报数…

淘宝以图搜商品API调用详细步骤(apiKeysecret)

以图片来搜索商品是电商平台常见的一个功能&#xff0c;一般用于搜索同款、找爆品、淘宝拍立淘等功能。 通过item_search_img可以实现通过图片来搜索同款商品列表&#xff0c;响应参数包括宝贝标题、列表类型、宝贝图片、优惠价、价格、销量、宝贝ID、商品风格标识ID、掌柜昵称…

vue实现项目部署成功之后提示用户刷新页面

vue实现项目部署成功之后提示用户刷新页面 1. 项目根目录新建 version.js require("fs").writeFileSync("./public/version.txt", new Date().getTime().toString()) 2. 改写package.json中打包命令 "scripts": {"dev": "vue-cl…

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门&#xff08;Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C&#xff09;。 题目翻译如下&#xff1a;&#xff08;图片来源&a…