1.1 普通集群模式RabbitMQ 有三种模式:单机模式,普通集群模式,镜像集群模式。单机模式即单独运行一个 rabbitmq 实例,而集群模式需要创建多个 rabbitmq实例。
默认的集群模式。需要创建多个 RabbitMQ 节点。但对于 Queue 和消息来说,只存在于其中一个节点,其他节点仅同步元数据,即队列的结构信息。
1.2 镜像集群模式把队列做成镜像队列,让各队列存在于多个节点中,属于 RabbitMQ 的高可用性方案。镜像模式和普通模式的不同在于,queue和 message 会在集群各节点之间同步,而不是在 consumer 获取数据时临时拉取。
2. 集群安装 2.1 环境准备
172.16.25.69
172.16.25.70
172.16.25.71
创建mq的hosts文件
vim /mydata/rabbitmq/hosts # 文件中写入以下内容 172.16.25.69 rabbit1 rabbit1 172.16.25.70 rabbit2 rabbit2 172.16.25.71 rabbit3 rabbit32.2 拉取镜像
docker pull rabbitmq:3.8.3-management2.3 创建容器
在172.16.25.69节点上创建容器rabbit1
docker run --restart=always -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name rabbitmq1 -v /mydata/rabbitmq:/var/lib/rabbitmq:z -v /mydata/rabbitmq/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_cookie='rabbitmq_2021' rabbitmq:3.8.3-management
在172.16.25.70节点上创建容器rabbit2
docker run --restart=always -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name rabbitmq2 -v /mydata/rabbitmq:/var/lib/rabbitmq:z -v /mydata/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_cookie='rabbitmq_2021' rabbitmq:3.8.3-management
在172.16.25.71节点上创建容器rabbit3
docker run --restart=always -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name rabbitmq3 -v /mydata/rabbitmq:/var/lib/rabbitmq:z -v /mydata/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_cookie='rabbitmq_2021' rabbitmq:3.8.3-management
参数说明:
-d 表示容器后台运行-h rabbit1 容器的主机名是rabbit1,容器内部的hostname-v /mydata/rabbitmq:/var/lib/rabbitmq:z 将宿主机目录/home/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用-e RABBITMQERLANGcookie=‘rabbit_cluster’ 设置rabbitmq的cookie,该值可以任意设置,只需要三个容器保持一致即可 2.4绑定集群
重置myrabbit1节点
$ docker exec -it rabbitmq1 /bin/bash $ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app
加入myrabbit2节点到集群中
$ docker exec -it rabbitmq2 /bin/bash $ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit1 && rabbitmqctl start_app
加入myrabbit3节点到集群中
$ docker exec -it rabbitmq3 /bin/bash $ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit1 && rabbitmqctl start_app



