rabbitmq集群搭建,这里我们采用docker的方式来进行搭建,确定安装了docker环境
1.拉取镜像
docker pull rabbitmq:3.6.15-management
2.创建rabbitmq容器
创建rabbitmq容器1:
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
创建rabbitmq容器2:
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link=myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
执行成功后如下图
解释:
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的别名。
--link 用于在容器中进行通信的时候需要使用到的。
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie'
其中 -e 设置环境变量 变量名为:RABBITMQ_ERLANG_COOKIE 值为:rabbitcookie 该值可以任意。
但是一定要注意,两个容器的cookie值一定要一样才行。他的作用用于发现不同的节点,并通过该cookie进行自动校验和通信使用。
--hostname rabbit2
其中:--hostname 用于设置容器内部的hostname名称,如果不设置,那就会自动随机生成一个hostname字,如下图。
这里一定要设置。因为rabbitmq的节点数据进行通信加入集群的时候需要用hostname作为集群名称。
3.配置rabbitmq集群
这里我们使用 集群名 rabbit@rabbit1 ,将节点2 加入到节点1号中。
3.1配置rabbit1
进入到myrabbit1容器内部
docker exec -it myrabbit1 bash
配置节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
执行如下图:
rabbitmqctl stop_app --- 表示关闭节点
rabbitmqctl reset --- 重新设置节点配置
rabbitmqctl start_app --- 重新启动 (此处不需要设置 ,将该节点作为集群master,其他节点加入到该节点中)
exit ---退出容器
3.2配置rabbit2
进入到myrabbit2容器内部
docker exec -it myrabbit2 bash
配置节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
执行如下图:
解释:
rabbitmqctl join_cluster --ram rabbit@rabbit1
-- 用于将该节点加入到集群中
-- ram 设置为内存存储,默认为 disc 磁盘存储,如果为磁盘存储可以不用配置ram
-- rabbit@rabbit1 该 配置 为节点集群名称:集群名称为:rabbit@server 而server指定就是hostname的名称。
配置完成,打开web管理界面http://机器IP:15672,账密guest/guest,如下图所示:
4.配置镜像队列
如上,我们已经搭建好了集群,但是并不能做到高可用,所以需要配置升级为镜像队列。
在任意的节点(A或者B)中执行如下命令:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
执行正确如下图
解释:
rabbitmqctl set_policy
用于设置策略
ha-all
表示设置为镜像队列并策略为所有节点可用 ,意味着 队列会被(同步)到所有的节点,当一个节点被加入到集群中时,也会同步到新的节点中,此策略比较保守,性能相对低,对接使用半数原则方式设置(N/2+1),例如:有3个结点 此时可以设置为:ha-two 表示同步到2个结点即可。
"^" 表示针对的队列的名称的正则表达式,此处表示匹配所有的队列名称
'{"ha-mode":"all"}' 设置一组key/value的JSON 设置为高可用模式 匹配所有exchange
此时查看web管理界面:添加一个队列test_queue,如下图已经可以出现结果为有一个结点,并且是ha-all模式(镜像队列模式)