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

2024-07-06 1197阅读

目录

  • 0. 导火索
  • 1. 问题和背景
  • 2. 原因与解决
  • 2.1 原因
  • 2.2 解决

    0. 导火索

    在服务器上使用一个rabbitmq服务,但是需要多个项目使用这一个mq服务,于是就建立了rabbitmq的虚拟主机virtual host来作为各个服务的迷你版mq来使用;

    再使用docker compose命令重启后,某个项目报错如下:

     com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method(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的数据容器是找不到的;

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

          2.2 解决

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

          解决方法

          • 在rabbitmq服务器下新增一条指令,重启数据丢失问题就会解决。

            hostname: myrabbitmq(注:hostname和container_name无关联)

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

            例图:

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

            此时我们就可以在data文件夹下看到hostname对应的文件夹已经生成

            (这里我把名字换了,大家理解即可)

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

            然后我们再去rabbitmq的管理端界面去新建我们的用户和vhosts;

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

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]