使用Docker搭建RabbitMQ集群
一、准备工作
1、两台centos服务器
2、两台服务器都安装了docker
3、假设两台虚拟机的ip是192.168.2.128,192.168.2.129
二、搭建RabbitMQ集群
1、两台机子分贝配置host文件
进入到:vim /etc/hosts
添加内容:
192.168.2.128 rabbit1
192.168.2.129 rabbit2
2、运行rabbit容器
在rabbit1机器运行
# docker run -d --hostname rabbit1 --net=host --name myrabbit1 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8-management
在rabbit2机器运行
# docker run -d --hostname rabbit2 --net=host --name myrabbit2 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8-management
3、加入集群
在rabbit2机器执行命令
# docker exec -it myrabbit2 bash #进入容器
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster rabbit@rabbit1 #加入到rabbit1
# rabbitmqctl start_app
# exit #退出
进入 192.168.2.129:15672 查看状态账号密码是admin/admin
默认账号密码是guest/guest,这里我在运行容器的同时设置了user与pass,所以我可以用admin来进行访问。
如果要摘除节点,在rabbit1执行
# docker exec -it myrabbit1 bash
# rabbitmqctl forget_cluster_node rabbit@rabbit3
# exit
这里的rabbit3,是假设有第三个机器,也就是第三个节点。
点击queues,填写队列名,然后新增一个队列
此时如果还没有设置镜像集群,那么这个队列只存在于rabbit1中,如果rabbit1的队列服务挂了,此队列也就不可用了。
可以在rabbit1执行
docker stop myrabbit1
此时rabbit1的管理台是进不去了,要换成rabbit2的
并且进入Queues里的消息也是down状态。
三、创建镜像队列
镜像集群,就是让3台或多台节点的数据互相复制,在他们之间设置主从关系。当一台节点宕机时,其他节点可以继续提供服务。
类似于redis集群的哨兵模式。
重新启动rabbit1docker start myrabbit1
1、策略说明
指令参数详情
参数名称 描述
-p 可选参数,针对指定 vhost 下的exchange或 queue
--priority 可选参数,policy 的优先级
--apply-to 可选参数,策略适用的对象类型,其值可为 "queues", "exchanges" 或 "all".默认是"all"
name policy 的名称
pattern 匹配模式(正则表达式)
definition 镜像定义,json 格式,包括三部分(ha-mode,ha-params,ha-sync-mode)具体配置见下表
definition参数详情参数名称 描述
ha-mode 指名镜像队列模式,其值可为"all","exactly"或"nodes",all:表示在集群所有节点上进行镜像;exactly:表示在指定个数的节点上镜像,节点个数由 ha-params 指定;nodes:表示在指定节点上进行镜像,节点名称通过ha-params 指定。
ha-params ha-mode模式需要用到的参数:exactly 模式下为数字表述镜像节点数,nodes 模式下为节点列表表示需要镜像的节点。
ha-sync-mode 镜像队列中消息的同步方式,其值可为"automatic"或"manually".
2、查看当前策略
rabbitmqctl list_policies
3、添加策略
rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
说明:策略正则表达式为 “^” 表示所有匹配所有队列名称 ^work:匹配hello开头队列
4、删除策略
当然也可以进行删除
rabbitmqctl clear_policy ha-all
配置完成后,任意节点宕机,其他节点仍可以对外提供访问。