记一次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 是对应多开的序号 这样就可以查看对…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...