文档章节

Rabbitmq由于queen数据持久化错误,导致无法启动的解决办法

Jason_hu
 Jason_hu
发布于 2017/08/25 13:08
字数 718
阅读 79
收藏 0
点赞 0
评论 0

Rabbitmq由于queen数据持久化错误,导致无法启动的解决办法

环境

  • os:centos 6.5
  • rabbitmq: 3.6.5

故障描述

  • 由于磁盘满,导致rabbitmq崩溃,无法提供服务
  • 清理磁盘空间后,rabbitmq无法自动恢复正常

处理办法

  • service rabbitmq-server stop 无法正确关闭rabbitmq
  • ps -AF | grep rabbitmq,将rabbitmq相关进程全部kill
  • 使用 service rabbitmq-server start 重启,显示启动错误
  • 查看服务口状态:service rabbitmq-server status
Status of node rabbit@gitlab ...
Error: unable to connect to node rabbit@gitlab: nodedown

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

attempted to contact: [rabbit@gitlab]

rabbit@gitlab:
  * connected to epmd (port 4369) on gitlab
  * epmd reports: node 'rabbit' not running at all
                  other nodes on gitlab: ['rabbitmq-cli-11']
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-11@localhost'
- home dir: /var/lib/rabbitmq
- cookie hash: qib2bCkQ8XIJmRtJP4qxFg==
=ERROR REPORT==== 24-Aug-2017::17:33:47 ===
** Generic server <0.215.0> terminating
** Last message in was {'$gen_cast',
                           {submit_async,
                               #Fun<rabbit_queue_index.32.103862237>}}
** When Server state == undefined
** Reason for termination == 
** {{case_clause,undefined},
    [{rabbit_queue_index,add_segment_relseq_entry,3,
                         [{file,"src/rabbit_queue_index.erl"},{line,1091}]},
     {rabbit_queue_index,parse_segment_entries,3,
                         [{file,"src/rabbit_queue_index.erl"},{line,1075}]},
     {rabbit_queue_index,'-recover_journal/1-fun-0-',1,
                         [{file,"src/rabbit_queue_index.erl"},{line,863}]},
     {lists,map,2,[{file,"lists.erl"},{line,1239}]},
     {rabbit_queue_index,segment_map,2,
                         [{file,"src/rabbit_queue_index.erl"},{line,989}]},
     {rabbit_queue_index,recover_journal,1,
                         [{file,"src/rabbit_queue_index.erl"},{line,856}]},
     {rabbit_queue_index,scan_segments,3,
                         [{file,"src/rabbit_queue_index.erl"},{line,676}]},
     {rabbit_queue_index,queue_index_walker_reader,2,
                         [{file,"src/rabbit_queue_index.erl"},{line,664}]}]}
=INFO REPORT==== 24-Aug-2017::17:44:51 ===
Error description:
   {could_not_start,rabbit,
       {{badmatch,
            {error,
                {{{{case_clause,undefined},
                   [{rabbit_queue_index,add_segment_relseq_entry,3,
                        [{file,"src/rabbit_queue_index.erl"},{line,1091}]},
                    {rabbit_queue_index,parse_segment_entries,3,
                        [{file,"src/rabbit_queue_index.erl"},{line,1075}]},
                    {rabbit_queue_index,'-recover_journal/1-fun-0-',1,
                        [{file,"src/rabbit_queue_index.erl"},{line,863}]},
                    {lists,map,2,[{file,"lists.erl"},{line,1239}]},
                    {rabbit_queue_index,segment_map,2,
                        [{file,"src/rabbit_queue_index.erl"},{line,989}]},
                    {rabbit_queue_index,recover_journal,1,
                        [{file,"src/rabbit_queue_index.erl"},{line,856}]},
                    {rabbit_queue_index,scan_segments,3,
                        [{file,"src/rabbit_queue_index.erl"},{line,676}]},
                    {rabbit_queue_index,queue_index_walker_reader,2,
                        [{file,"src/rabbit_queue_index.erl"},{line,664}]}]},
                  {gen_server2,call,[<0.266.0>,out,infinity]}},
                 {child,undefined,msg_store_persistent,
                     {rabbit_msg_store,start_link,
                         [msg_store_persistent,
                          "/var/lib/rabbitmq/mnesia/rabbit@gitlab",[],
                          {#Fun<rabbit_queue_index.2.103862237>,
                           {start,
                               [{resource,<<"yun">>,queue,
                                    <<"com.yun.app.api.internal.AppUserEvents:1.0.1:app-server">>},
                                {resource,<<"/">>,queue,
                                    <<"com.yun.kcbp.finance.api.TicketService:1.0.1">>},
                                {resource,<<"yun">>,queue,
                                    <<"com.yun.park.api.internal.ParkRecordEvents:1.0.1:park-server">>},
                                {resource,<<"yun">>,queue,
                                    <<"com.yun.park.api.internal.ParkBusinessEvents:1.0.1:app-server">>},
                                {resource,<<"yun">>,queue,
                                    <<"com.yun.park.api.internal.ParkRecordEvents:1.0.1:monitor-server">>},
                                {resource,<<"yun">>,queue,
                                    <<"com.yun.sys.api.internal.SysLogEvents:1.0.1:sys-server">>},
                                {resource,<<"yun">>,queue,
                                    <<"com.yun.park.api.internal.ParkRecordEvents:1.0.1:app-server">>}]}}]},
                     transient,30000,worker,
                     [rabbit_msg_store]}}}},
        [{rabbit_variable_queue,start_msg_store,2,
             [{file,"src/rabbit_variable_queue.erl"},{line,454}]},
         {rabbit_variable_queue,start,1,
             [{file,"src/rabbit_variable_queue.erl"},{line,436}]},
         {rabbit_priority_queue,start,1,
             [{file,"src/rabbit_priority_queue.erl"},{line,92}]},
         {rabbit_amqqueue,recover,0,
             [{file,"src/rabbit_amqqueue.erl"},{line,239}]},
         {rabbit,recover,0,[{file,"src/rabbit.erl"},{line,652}]},
         {rabbit_boot_steps,'-run_step/2-lc$^1/1-1-',1,
             [{file,"src/rabbit_boot_steps.erl"},{line,49}]},
         {rabbit_boot_steps,run_step,2,
             [{file,"src/rabbit_boot_steps.erl"},{line,49}]},
         {rabbit_boot_steps,'-run_boot_steps/1-lc$^0/1-0-',1,
             [{file,"src/rabbit_boot_steps.erl"},{line,26}]}]}}

Log files (may contain more information):
   /var/log/rabbitmq/rabbit@gitlab.log
   /var/log/rabbitmq/rabbit@gitlab-sasl.log

最终办法

  • 搜索百度、google无果
  • 仔细看日志内容,发现应该是mq启动时候,恢复队列内容数据时候发生了错误
  • 可能是由于磁盘满了,队列数据写磁盘时候发生日常,导致数据文件格式错误了
  • 进入 cd /var/lib/rabbitmq/mnesia/rabbit@gitlab/queues
  • 该目录是存放队列的数据文件的地方
  • 找到子目录中的数据文件,把可能损坏的文件删除。(或者全部删掉,不过这些队列中的数据就丢失了)
  • 然后重启,就正常了
  • service rabbitmq-server start

PS:还好只是测试服务器,数据丢掉点问题不大。

© 著作权归作者所有

共有 人打赏支持
Jason_hu
粉丝 8
博文 19
码字总数 8642
作品 0
浦东
RabbitMQ学习系列(六): RabbitMQ 高可用集群

前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用。不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/category/855479.html 本来一直想写一...

andrewniu ⋅ 05/09 ⋅ 0

网易蜂巢微服务架构:用RabbitMQ实现轻量级通信

微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的服务,各服务之间使用轻量级的通信...

andrewniu ⋅ 05/10 ⋅ 0

mq、redis、zookeeper

RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用...

u012557298 ⋅ 2017/12/25 ⋅ 0

消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证 一、为何要对消息中间件进行监控? 上线的业务系统需要监控,然而诸如消息队列、数据库、...

癫狂侠 ⋅ 05/28 ⋅ 0

RabbitMQ的应用场景以及基本原理介绍

1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2....

茁壮的小草 ⋅ 06/20 ⋅ 0

消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠 ⋅ 05/25 ⋅ 0

RabbitMQ中的工作队列(work queues)

工作队列的设计思想:避免立即执行资源密集型任务。 我们将任务封装为消息并将其发送到队列,消费者从队列中取出任务并执行任务。当我们开启了多个消费者的时候,任务将在他们之间共享。 循环...

m0_37884977 ⋅ 05/17 ⋅ 0

openstack 最简单的 RabbitMQ 监控方法

先来看张图: 这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue。数据库保存状态信息,而几乎所有的 nova-* 服务都直接依赖于 Queue 实现服务之间的通信和调用...

zhongbeida_xue ⋅ 05/09 ⋅ 0

爬虫架构 | 消息队列应用场景及ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

前言:在之前的业务中,使用了Kafka和RabbitMQ两种消息队列,这篇文章来做一个总结。 消息队列中间件是分布式系统中重要的组件,主要实现异步消息,应用解耦,流量削峰及消息通讯等功能。 下...

小怪聊职场 ⋅ 04/26 ⋅ 0

RabbitMQ 内存控制 硬盘控制

一、内存控制: vmmemoryhigh_watermark 该值为内存阈值,默认为0.4。意思为物理内存的40%。40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC。最坏的情况是使...

andrewniu ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 27分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 35分钟前 ⋅ 0

appium+python3.6

1.安装jdk1.8(不知道为啥只识别1.8,1.10不识别,所以为了少折腾,迁就安装1.8) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置 JAVA_HOME:...

Kampfer ⋅ 54分钟前 ⋅ 0

详解Apache 日志分割教程

一、日志切割 安装cronolog CentOS 5.3中编译安装Apache日志默认是不切割的,需要用用工具Cronnolog进行日志切割。 1.下载及安装 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz ...

dragon_tech ⋅ 56分钟前 ⋅ 0

Keepalived介绍

负载均衡器(Load Balancer, LB )是一组能够将IP数据流以负载均衡形式转发到多台物理服务器的集成软件。有硬件负载均衡器和软件负载均衡器之分,硬件负载均衡器主要是在访问网络和服务器之间...

寰宇01 ⋅ 56分钟前 ⋅ 0

java8-Collections and Streams

stream和集合的区别是什么? 1.在计算的时候处理不同, 2.every element should be computed in the memory and then to be part of collections stream Stream apis filter with a predica......

writeademo ⋅ 今天 ⋅ 0

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你...

honeymose ⋅ 今天 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 今天 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 今天 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部