赞
踩
目录
我们在Centos7虚拟机中使用Docker来安装。
docker pull rabbitmq:3-management
- docker run \
- -e RABBITMQ_DEFAULT_USER=root \
- -e RABBITMQ_DEFAULT_PASS=root \
- --name mq \
- --hostname mq1 \
- -p 15672:15672 \
- -p 5672:5672 \
- -d \
- rabbitmq:3-management
命令说明:
-e RABBITMQ_DEFAULT_USER : 设置管理后台用户名
-e RABBITMQ_DEFAULT_PASS : 设置管理后台密码
--name mq :设置容器名字
--hostname mq1 : 集群时用到,表示此服务的名称
-p 15672:15672 : 映射管理后台端口
-p 5672:5672 : 映射接受MQ的端口
-d : 后台运行
rabbitmq:3-management : 启动使用的镜像和tag
地址:宿主机地址:15672
账户名密码:root/root
在RabbitMQ的官方文档中,讲述了两种集群的配置方式:
普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。
镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。
仲裁队列:仲裁队列是3.8版本以后才有的新功能,用来替代镜像队列,具备下列特征:
与镜像队列一样,都是主从模式,支持主从数据同步
使用非常简单,没有复杂的配置
主从同步基于Raft协议,强一致
我们的计划部署3节点的mq集群:
主机名 | 控制台端口 | amqp通信端口 |
---|---|---|
mq1 | 8081 ---> 15672 | 8071 ---> 5672 |
mq2 | 8082 ---> 15672 | 8072 ---> 5672 |
mq3 | 8083 ---> 15672 | 8073 ---> 5672 |
集群中的节点标示默认都是:rabbit@[hostname]
,因此以上三个节点的名称分别为:
rabbit@mq1
rabbit@mq2
rabbit@mq3
1)获取cookie
集群模式中的每个RabbitMQ 节点使用 cookie 来确定它们是否被允许相互通信。
要使两个节点能够通信,它们必须具有相同的共享秘密,称为Erlang cookie。cookie 只是一串最多 255 个字符的字母数字字符。
每个集群节点必须具有相同的 cookie。实例之间也需要它来相互通信。
我们先在之前启动的mq容器中获取一个cookie值,作为集群的cookie。执行下面的命令:
docker exec -it mq cat /var/lib/rabbitmq/.erlang.cookie
可以看到cookie值如下:
FXZMCVGLBIXZCDEMMVZQ
接下来,停止并删除当前的mq容器,我们重新搭建集群。
docker rm -f mq
2)准备集群配置
在/tmp目录新建一个配置文件 rabbitmq.conf:
- cd /tmp
- # 创建文件
- touch rabbitmq.conf
文件内容如下:
- loopback_users.guest = false
- listeners.tcp.default
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。