赞
踩
RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成
RabbitMQ的5大核心概念:Connection(连接)、Channel(信道)、Exchange(交换机)、Queue(队列)、Virtual host(虚拟主机)。
普通模式的集群是不会将创建的队列复制到其他节点,虽然我们在其它节点能够看到这个节点;这是由于其它节点只会保存一份这个队列的元数据,展示给我们看的,真实的队列还是存在创建这个队列的节点中的;如果这个时候我们把创建队列的的节点关闭,那么这个队列其实就不可用了; 为了解决这个问题,rabbitmq还提供了另外一种集群模式:镜像模式
镜像模式是rabbit提供的一种可添加的策略模式,如果创建的队列和创建的策略能够匹配上,则会把队列同步复制到其他节点中,而不再只是复制元数据;
这里使用docker来搭建rabbitmq集群的镜像模式,首先准备好docker环境,下载好镜像
docker network create rabbitmq_net
#安装三个rabbitmq组件,一主两从
docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management
docker exec -it rabbitmq_master /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave2 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
浏览器分别访问以下地址,用户名和密码都是admin
http://localhost:15672/#/ http://localhost:15673/#/ http://localhost:15674/#/ 如果成功登入,则代表组件安装成功,但是这时候还不是集群模式,我们需要手动加入到集群
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit
docker exec -it rabbitmq_slave2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl set_policy my_ha "^" '{"ha-mode":"all"}'
exit
到这里,rabbitmq集群镜像模式就安装成功了
start_rabbitmq.sh
#创建网卡 docker network create rabbitmq_net #安装三个rabbitmq组件,一主两从 docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX rabbitmq:3.8.27-management #开启三个组件的管理端插件 docker exec -it rabbitmq_master rabbitmq-plugins enable rabbitmq_management docker exec -it rabbitmq_slave1 rabbitmq-plugins enable rabbitmq_management docker exec -it rabbitmq_slave2 rabbitmq-plugins enable rabbitmq_management #salve1加入集群 docker exec -it rabbitmq_slave1 rabbitmqctl stop_app docker exec -it rabbitmq_slave1 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master docker exec -it rabbitmq_slave1 rabbitmqctl start_app #salve2加入集群 docker exec -it rabbitmq_slave2 rabbitmqctl stop_app docker exec -it rabbitmq_slave2 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master docker exec -it rabbitmq_slave2 rabbitmqctl start_app #开启镜像队列 docker exec -it rabbitmq_slave1 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。