前提在centos7中已经装好了docker环境。
1、先创建文件夹做准备
$ mkdir /mydata/rabbitmq
$ cd /mydata/rabbitmq/
$ mkdir rabbitmq01 rabbitmq02 rabbitmq03
2、利用docker命令创建3个rabbitmq实例并启动
$ docker run -d --hostname rabbitmq01 --name rabbitmq01 -v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='atguigu' rabbitmq:management
$ docker run -d --hostname rabbitmq02 --name rabbitmq02 -v /mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='atguigu' --link rabbitmq01:rabbitmq01 rabbitmq:management
$ docker run -d --hostname rabbitmq03 --name rabbitmq03 -v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15675:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='atguigu' --link rabbitmq01:rabbitmq01 --link rabbitmq02:rabbitmq02 rabbitmq:management
说明:RABBITMQ_ERLANG_COOKIE节点认证作用,部署集成时,需要同步该值
3、节点加入集群
$ docker exec -it rabbitmq01 /bin/bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl start_app
$ docker exec -it rabbitmq02 /bin/bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster --ram rabbit@rabbitmq01
$ rabbitmqctl start_app
$ docker exec -it rabbitmq03 /bin/bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster --ram rabbit@rabbitmq01
$ rabbitmqctl start_app
以上就是普通模式集群。
普通模式集群:它们之间只能同步一些元数据,但是Queue中的消息不能同步,如果主节点宕机,就会导致数据丢失,很不友好。
4、实现镜像集群模式
$ docker exec -it rabbitmq01 /bin/bash
$ rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
$ rabbitmqctl list_policies -p /
说明:
第二条命令中 /表示虚拟主机,^表示所有队列,策略就是所有队列都是高可用的,它们是自动同步数据(元数据+Queue中的Message)。
第三条命令是查看镜像集群的策略。
镜像集群有自己的一套选举策略,生产者和消费者的请求都会先转到主节点,如果主节点宕机,就会从从节点中重新选举出一个新的主节点。可以理解从节点就是主节点的一个备份。
普通集群与镜像集群的区别:
普通集群只会同步元数据信息,不会同步队列的message信息。而镜像集群会。