首页 > 其他分享 >【Rabbitmq使用】docker compose 命令重启rabbitmq后数据丢失问题

【Rabbitmq使用】docker compose 命令重启rabbitmq后数据丢失问题

时间:2024-05-24 20:28:28浏览次数:25  
标签:compose 重启 hostname rabbitmq Rabbitmq rabbit docker 数据

目录

0. 导火索

在服务器上使用一个rabbitmq服务,但是需要多个项目使用这一个mq服务,于是就建立了rabbitmq的虚拟主机virtual host来作为各个服务的迷你版mq来使用;
再使用docker compose命令重启后,某个项目报错如下:

 com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - vhost my-test1 not found, class-id=10, method-id=4

其中my-test1就是我建立的多个vhosts(virtual hosts)其中的一个

1. 问题和背景

  • 背景:本地安装的docker,然后使用docker-compose.yml文件方式安装的rabbitmq服务 ;

  • 问题:在使用docker compose up -d命令重启rabbitmq后发现;

    • 1.除了guest用户,所有新建用户全部丢失;数据也丢失;
    • 2.建立的virtual host 虚拟主机信息也全部丢失;

2. 原因与解决

网上找帖子和查阅机器人一直提示没有做数据持久化存储,仔细检查yml配置文件后发现,已对数据做了持久化处理;

volumes:
          - /data/docker/rabbit/data:/var/lib/rabbitmq
          - /data/docker/rabbit/config:/rabbit-config
          - /data/docker/rabbit/cert:/var/lib/cert

2.1 原因

原因: 在linux中,RabbitMQ运行中的数据保存在我们一般是默认保存在/var/lib/rabbitmq/mnesia/中,数据目录是通过主机名自动生成,(在此背景下)我们是通过docker命令操作yml文件来部署安装的,所以RabbitMQ数据目录跟名字跟容器的id相同;

但是我们每次使用docker compose up -d 重启后docker容器的id都会重新生成新的,就会找不到原有的数据;如下图:
解析:

  • 我们第一次配置用户信息、vhosts信息后,此时的数据应该存储在rabbit@54bc8ceb7ac1文件夹中(看文件生成时间);
  • 但是在我们重启第一次后容器帮我门重新生成了rabbit@0098c3b23dbb文件;
    ( 重启第二次会继续生成)
  • 所以我们之前持久化在rabbit@54bc8ceb7ac1的数据容器是找不到的;
    在这里插入图片描述

2.2 解决

所以我们要告诉容器我们要一直把这些数据持久化在某个文件夹下,这样重启后便不会再生成新的文件夹;
解决方法

  • 在rabbitmq服务器下新增一条指令,重启数据丢失问题就会解决。
    hostname: myrabbitmq(注:hostname和container_name无关联)

RabbitMQ 在启动时会依据 hostname 等标识来决定加载哪些配置文件或状态。如果 hostname 不明确,RabbitMQ 可能无法正确匹配到之前的配置状态,从而丢失了之前设置的 vhosts 配置。没有明确的 hostname,可能会影响其正确指向持久化存储的数据。明确 hostname 后,它能更准确地定位到对应的配置或数据存储,确保配置的连续性。

例图:
在这里插入图片描述
此时我们就可以在data文件夹下看到hostname对应的文件夹已经生成
(这里我把名字换了,大家理解即可)

在这里插入图片描述
然后我们再去rabbitmq的管理端界面去新建我们的用户和vhosts;

  • 右上角就是我们现在持久化存储的文件夹名称;
  • 然后再次重启,我们的数据就不会消失了;
    在这里插入图片描述

标签:compose,重启,hostname,rabbitmq,Rabbitmq,rabbit,docker,数据
From: https://blog.csdn.net/m0_48904153/article/details/139128276

相关文章

  • Dockerfile和Docker-Compose作用和用途
    Dockerfile和DockerCompose是用于构建和管理Docker容器的两种不同工具,它们有着不同的作用和用途:Dockerfile:定义镜像:Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令,每条指令表示一层修改。镜像定制:通过编写Dockerfile,你可以定制自己的镜像,包括基于官......
  • docker及docker-compose离线安装
    docker及docker-compose离线安装参考https://blog.csdn.net/linmengmeng_1314/article/details/135653694dockeryumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engi......
  • Asp .Net Core 系列:集成 CAP + RabbitMQ + MySQL(含幂等性)
    简介官网:https://cap.dotnetcore.xyz/CAP是什么?是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。什么是EventBus?事件总线是一种机制,它允许不同的组件彼此通信而不彼此了解。组件可以......
  • RabbitMQ广播模式
    RabbitMQ广播模式Fanout交换机工作原理Fanout交换机会将接收到的消息广播给所有与之绑定的队列,不考虑路由键。每个绑定到fanout交换机的队列都会接收到消息。使用场景广播消息:所有消费者都需要接收到相同的消息。日志广播:将日志消息广播给多个日志处理服务。Direct......
  • Docker Compose(V2)
    DockerCompose概述DockerCompose是用于定义和运行多容器应用程序的工具。这是解锁简化和高效的开发和部署体验的关键。Compose简化了对整个应用程序堆栈的控制,让您能够在单个易于理解的YAML配置文件中轻松管理服务、网络和卷。然后,只需一个命令,即可创建并启动所有服务......
  • rabbitMq的status报错Error: unable to perform an operation on node ‘rabbit……
    遇到下图这个错大部分问题可能是由于 RabbitMQ CLI工具的ErlangCookie与服务器上的不匹配而导致连接问题。ErlangCookie在RabbitMQ节点之间进行身份验证和安全通信时起着重要作用。可以在c盘搜索一下看下两个.erlang.cookie文件中的内容是否一致,不一致的话就改成一致的......
  • docker - 安装compose
    安装流程很简单,只要将下载到的文件,放到指定文件夹下即可。业务需求:安装harbor需要这个。https://github.com/docker/compose/releases/download/v2.3.0/docker-compose-linux-x86_64#如果文件名不叫docker-compose,重命名一下mvdocker-compose-linux-x86_64docker-compos......
  • Compose
    最近研究Strapi源码,偶尔看到request-compose这个包,看到一个很简单很有用的compose方法的实现。compose(...fns)(args),这个是compose方法的使用形式,它的目的是将某个参数按顺序依次传递给每个方法,前一个方法的返回是第二个方法的参数。它的难点是,这些方法可能是同步异步混合在一......
  • RabbitMQ在Java中的完美实现:从入门到精通
    哈喽,大家好,我是木头左!一、RabbitMQ简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。本......
  • docker-compose
    服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。项目(project):由一组关联的应用容器组成的一个完整业务单元。一个项目可以由多个服务(容器)关联而成,Compose面向项目进行管理。 docker-compose最常用于Web项目网站 下面是docker-compose.yml的实例核心代码#......