记一次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 是对应多开的序号 这样就可以查看对…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
