记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
问题描述:
机房突然停电,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 allno 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
备注:本文为迁移博客,非近期遇到的故障
相关文章:

记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 机房突然停电,rabbitmq的主机异常断电,集群服务全部需要重启。但是在执行service…...

rime中州韵小狼毫 help lua Translator 帮助消息翻译器
lua 是 Rime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 h…...

C++完成使用map Update数据 二进制数据
1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…...

ARCGIS PRO SDK 访问Geometry对象
一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection:Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合,属性成员: 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…...

数据结构之各大排序(C语言版)
我们这里话不多说,排序重要性大家都很清楚,所以我们直接开始。 我们就按照这张图来一一实现吧! 一.直接插入排序与希尔排序. 这个是我之前写过的内容了,大家可以通过链接去看看详细内容。 算法之插入排序及希尔排序(…...
c++ 中多线程的使用
如果你的其他逻辑必须在线程 t1 和 t2 之后执行,但你又希望这些线程能够同时运行,你可以在主线程中使用 std::thread::detach 将线程分离,让它们在后台运行。这样,主线程不会等待这些线程的完成,而可以继续执行其他逻辑…...

理解二叉树的遍历(算法村第七关白银挑战)
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]解 LeetCode以及面试中提供的方法可能…...

所有单片机使用的汇编语言是统一的吗?
所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…...

C ++类
定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…...

STM32疑难杂症
1.keil的奇怪问题 创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了 stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使…...
GIT使用简介
Git 是一种版本控制系统,常用于团队协作开发和管理代码。下面是 Git 的基本使用方式: 安装 Git:首先,在你的计算机上安装 Git。你可以从 Git 官方网站(https://git-scm.com/)下载适合你操作系统的版本&…...
easycode 插件配置文件
easycode是一个idea生成文件的插件,以下是我的一个项目中配置信息,需要的可以拿走,保存成json文件导入即可 {"author" : "XXX","version" : "1.2.8","userSecure" : "","…...

elasticsearch系列四:集群常规运维
概述 在使用es中如果遇到了集群不可写入或者部分索引状态unassigned,明明写入了很多数据但是查不到等等系列问题该怎么办呢?咱们今天一起看下常用运维命令。 案例 起初我们es性能还跟得上,随着业务发展壮大,发现查询性能越来越不…...
6.6 会话与输入事件(三)
三,Pointer会话 3.1 Pointer会话及其属性 指针输入会话使用SCREEN_EVENT_POINTER类型创建,通常用于控制光标的形状和位置。 指针会话的SCREEN_PROPERTY_MODE属性未使用。但是,可以使用下面的会话属性配置指针会话: SCREEN_PROPERTY_ACCELERATION表示一组六个整数,表示x…...

【自动化测试总结】优点、场景、流程、项目人员构成
一、自动化测试的概念 以程序测试程序,以代码代替思维,以脚本的运行代替手工测试,可以大大提高工作测试的效率。 二、自动化测试的优点 1.回归测试更为方便,可靠。自动化测试最主要的任务和特点,特别是在程序修改比较…...

杨中科 ASP.NETCore Rest
什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…...

RTU数据采集终端
在现代工业控制系统中,数据采集是一个至关重要的步骤。RTU(远程终端单元)作为一种常用的数据采集终端设备,不仅可以实现数据的采集和传输,还可以实现现场设备的远程监控和控制。 一、RTU数据采集终端的工作原理 RTU数据采集终端是一种将现场…...
双指针--- 数组元素的目标和
目录 数组元素的目标和思路:暴力做法思路:双指针做法: 代码: 原题链接 数组元素的目标和 给定两个升序排序的有序数组 A 和 B ,以及一个目标值 x 。 数组下标从 0 开始。 请你求出满足 A[i]B[j]x 的数对 (i,j) 。 数据保证有唯…...

你的网站或许不需要前端构建(二)
前一阵,有朋友问我,能否在不进行前端编译构建的情况下,用现代语法开发网站界面。 于是,就有了这篇文章中提到的方案。 写在前面 这篇文章,依旧不想讨论构建或不构建,哪一种方案对开发更友好,…...

flutter 使用adb 同时连接 多个模拟器
MUMU模拟器 MuMu模拟器官网_安卓12模拟器_网易手游模拟器 传统只需要 连接一个 默认命令是 默认端口是7555 adb connect 127.0.0.1:7555 但是需要同时连接调试多个模拟器的时候 就需要连接多个 这里可以使用自带的多开 多开后 使用 1 是对应多开的序号 这样就可以查看对…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...