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

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;

  • 右上角就是我们现在持久化存储的文件夹名称;
  • 然后再次重启,我们的数据就不会消失了;
    在这里插入图片描述
  • 66
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用Docker Compose安装RabbitMQ,你可以按照以下步骤进行操作: 1. 确保你已经安装了DockerDocker Compose。 2. 创建一个名为docker-compose.yml的文件,并在其中定义RabbitMQ的配置。你可以使用不同的镜像版本,具体取决于你的需求。例如,你可以使用以下配置: ```yaml version: '3' services: rabbitmq: image: rabbitmq:3.9.13-management container_name: rabbitmq restart: always hostname: rabbitmq ports: - 15672:15672 volumes: - ./data:/var/lib/rabbitmq - ./config/rabbitmq.sh:/etc/rabbitmq/rabbitmq.sh environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest - RABBITMQ_ERLANG_COOKIE=hellocookie ``` 3. 在终端中执行`docker-compose up -d`命令RabbitMQ容器。 这样,你就可以使用Docker Compose安装RabbitMQ了。请注意,你可以根据自己的需求进行配置,例如更改端口映射、添加环境变量等。 #### 引用[.reference_title] - *1* [【rabbitmq系列】使用docker-compose安装rabbitmq](https://blog.csdn.net/Think_and_work/article/details/123380095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker-compose安装RabbitMQ](https://blog.csdn.net/qq_41865652/article/details/123263529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [docker-compose安装rabbitMq](https://blog.csdn.net/zhangcongyi420/article/details/105324128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大龄烤红薯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值