RabbitMQ 集群架构介绍

 

 

1我们先克隆当前的虚拟机 
修改ip地址
2 在idea中编写yml语句
#3.8.5-management-alpine  带图形化界面 体积小适合开发环境
#在搭建rabbitMQ集群时 必须保证 cookie必须一直  值随便
#5272 是通信端口  15272是图形化界面   4369  集群之间交互端口  25672 集群之间也需要开放的端口
version: '3.1'
services:
    rabbitmql:
      image: rabbitmq:3.8.5-management-alpine
      container_name: rabbitmq1
      hostname: rabbitmq1
      extra_hosts:
        - "rabbitmq1:192.168.1.137"
        - "rabbitmq2:192.168.1.138"
      environment:
        - RABBITMQ_ERLANG_COOKIE=SDFHKSFS
      ports:
        - 5672:5672
        - 15672:15672
        - 4369:4369
        - 25672:25672
---
version: '3.1'
services:
  rabbitmq2:
    image: rabbitmq:3.8.5-management-alpine
    container_name: rabbitmq2
    hostname: rabbitmq2
    extra_hosts:
      - "rabbitmq1:192.168.1.137"
      - "rabbitmq2:192.168.1.138"
    environment:
      - RABBITMQ_ERLANG_COOKIE=SDFHKSFS
    ports:
      - 5672:5672
      - 15672:15672
      - 4369:4369
      - 25672:25672
3 在虚拟机中拉取镜像文件  分别在两台虚拟机上创建(如果docker中已经有可rabbitmq 镜像 我们需要stop掉 然后再运行下面指令)
vi docker-compose.yml
复制上面的第一段yml配置
docker-compose up -
当成功运行mq1 和mq2都能在docker中正常运行 ,但是在访问图形化界面时
mq2 无法访问,这是因为 防火墙需要先启动防火墙再重新关闭
systemctl start firewalld
systemctl stop firewalld

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 让谁加入谁  就进入到加入方的容器内部

docker exec -it rabbitmq2 bash
rabbitmqctl stop_app

rabbitmqctl reset

 rabbitmqctl join_cluster rabbit@rabbitmq1

这里报错

 

 我们先关闭node1的防火墙  (按照报错提示来   2 erlangCookie 检查是否写错  我们是复制的不可能写错  3 检查节点是否正常运行  上述图可知 mq正常运行 )

此时的问题是在容器内部无法访问外面的网络  宿主机但是可以ping通 但是容器无法ping通

 

 此时我们退出容器 重启docker

 systemctl  restart docker

启动rabbitMQ1

  docker start rabbitmq1

启动rabbitMQ2

 docker start rabbitmq2

 

然后重新进入rabbitMQ2 重新上述4步骤

bash-5.0# rabbitmqctl stop_app
bash-5.0# rabbitmqctl reset
bash-5.0# rabbitmqctl join_cluster rabbit@rabbitmq1
bash-5.0# rabbitmqctl start_app

 

 

 

 

 

 

 

 当我们在mq1中创建一个queue   当mq1 宕机后 mq2接替mq1中的queue

因此我们需要设置镜像模式

 

 

 

posted @ 2022-07-19 13:05  花心大萝卜li  阅读(154)  评论(0)    收藏  举报