Docker搭建rabbitmq集群

港控/mmm° 2022-11-09 14:24 295阅读 0赞

文章目录

  • 前言
    • 搭建基础环境
    • 搭建集群
    • 其他问题
    • 拓展

前言

了解下Docker的rabbit的版本:
官方文档地址:https://www.rabbitmq.com/
从官方文档上我们了解有以下几个版本:
在这里插入图片描述
其中management版本是带有web页面的,其他版本需要下载页面插件才可以
。(这里博主就是吃了没看文档的亏,怎么也找不到页面 !!!∑(゚Д゚ノ)ノ)


如果你pull了rabbitmq 的其他版本镜像包,需要做以下操作

  1. docker exec -itd 镜像ID /bin/bash # 进入容器
  2. 进入容器后执行以下操作,即可安装web管理插件
  3. rabbitmq-plugins enable rabbitmq_management #这条命令是安装web插件的,执行完就可以用web页面了。

———————————————————————————————————
为了避免以上错误,我们接下来的操作直接使用rabbitmq:management版本的

搭建基础环境

  1. 创建数据目录

    mkdir -p /data/mqdata{ 01..03}

在这里插入图片描述

  1. 拉取并运行rebbitmq容器

    docker run -d —hostname rabbit01 —name mq01 -v /data/mqdata01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE=’HOUCUGJDZYTFZDSWXTHJ’ rabbitmq:management

    docker run -d —hostname rabbit02 —name mq02 -v /data/mqdata02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE=’HOUCUGJDZYTFZDSWXTHJ’ —link mq01:rabbit01 rabbitmq:management

    docker run -d —hostname rabbit03 —name mq03 -v /data/mqdata03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE=’HOUCUGJDZYTFZDSWXTHJ’ —link mq01:rabbit01 —link mq02:rabbit02 rabbitmq:management

    —name :容器名字

    1. --hostname :容器内部的名字
    2. --RABBITMQ_DEFAULT_USER :登陆用户名
    3. --RABBITMQ_DEFAULT_PASS :登陆密码
    4. --RABBITMQ_ERLANG_COOKIE :集群cookie 要保持一致
    5. --link :应为我们不确定容器各节点的ip地址是否会更变,所以使用--link
    6. 来连接,格式为 容器名:容器内部的名字
  2. 进行访问 宿主机ip:15672 ,可以看到只有一个节点
    在这里插入图片描述

搭建集群

  1. 进入mq01节点容器 停止 start_app服务

    docker exec -it mq01 bash #进入容器
    rabbitmqctl stop_app #停止rabbit应用
    rabbitmqctl reset # 重置rabbit应用
    rabbitmqctl start_app #启动 rabbir 应用

  2. 进入mq02节点容器 加入节点mq01

    docker exec -it mq02 bash

    rabbitmqctl stop_app #停止rabbit应用

    rabbitmqctl reset #重置rabbitmq

    rabbitmqctl join_cluster —ram rabbit@rabbit01 ## -ram 设置内存节点,后面设置的是rabbit01这个节点,这个ID是—hostname的
    rabbitmqctl start_app #启动rabbit应用

  3. 进入mq03节点容器 加入节点mq01

    docker exec -it mq03 bash

    rabbitmqctl stop_app #停止rabbit应用

    rabbitmqctl reset #重置rabbitmq

    rabbitmqctl join_cluster —ram rabbit@rabbit02 ## —ram 设置内存节点,后面设置的是rabbit01这个节点,这个ID是—hostname的

    rabbitmqctl start_app #启动rabbit应用

  4. 实现镜像集群

    docker exec -it mq01 bash #进入mq01 容器
    rabbitmqctl set_policy-p/ha-all”^”‘{“ha-mode”:”all”}’ #策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。

  5. 刚问web页面 ,可以看到集群搭建成功

在这里插入图片描述

其他问题

挂载卷后 如果删除容器,请把卷也删掉。
另外cookie 要保持一致 可以不用提前指定,可以复制成三份
怎么查看各个节点的cookie呢?

  1. docker logs 容器名称

在这里插入图片描述
例如这个容器, 他的cookie就是 “/var/lib/rabbitmq/.erlang.cookie”
另外复制之后,记得进入容器 给予400权限 ,即 容器内操作“chmod 600 /var/lib/rabbitmq/.erlang.cookie”

拓展

以上集群已经搭建完毕
如果需要高可用,可以使用 HAproxy / Nginx + keeplived 做负载和高可用
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,295人围观)

还没有评论,来说两句吧...

相关阅读

    相关 rabbitmq

    集群概述   通过 Erlang 的分布式特性(magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服

    相关 rabbitmq

    rabbitmq集群 集群优点: 1. 避免单节点故障, 提高服务可用性 2. 提高服务性能,单机吞吐量有限,集群可以扩展节点,将流量分摊到集群中各个节点,提升rabb