Centos 7.5虚拟机三台:
以上虚拟机统一安装docker环境
三台机器分别配置如下所示的hosts文件,以供rabbitmq容器使用
$ vim /home/rabbitmq/hosts # 文件中写入以下内容
192.168.102.128 rabbit1 rabbit1
192.168.102.130 rabbit2 rabbit2
192.168.102.131 rabbit3 rabbit3
在三台机器上,分别management版本的rabbitmq镜像
$ docker pull rabbitmq:management
在三台机器上分别创建rabbitmq容器
在192.168.102.128上创建容器rabbit1
$ docker run --restart=unless-stopped -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 <br /> --name myrabbit1 <br /> -v /home/rabbitmq:/var/lib/rabbitmq:z <br /> -v /home/rabbitmq/hosts:/etc/hosts <br /> -e RABBITMQ_DEFAULT_USER=admin <br /> -e RABBITMQ_DEFAULT_PASS=123456 <br /> -e RABBITMQ_ERLANG_COOKIE='xxx_2019' <br /> rabbitmq:management
在192.168.102.130上创建容器rabbit2
$ docker run --restart=unless-stopped -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 <br /> --name myrabbit2 <br /> -v /home/rabbitmq:/var/lib/rabbitmq:z <br /> -v /home/rabbitmq/hosts:/etc/hosts <br /> -e RABBITMQ_ERLANG_COOKIE='xxx_2019' <br /> rabbitmq:management
在192.168.102.131上创建容器rabbit3
$ docker run --restart=unless-stopped -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 <br /> --name myrabbit3 <br /> -v /home/rabbitmq:/var/lib/rabbitmq:z <br /> -v /home/rabbitmq/hosts:/etc/hosts <br /> -e RABBITMQ_ERLANG_COOKIE='xxx_2019' <br /> rabbitmq:management
参数说明:
重置myrabbit1节点
$ docker exec -it myrabbit1 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app
加入myrabbit2节点到集群中
$ docker exec -it myrabbit2 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit1 && rabbitmqctl start_app
加入myrabbit3节点到集群中
$ docker exec -it myrabbit3 /bin/bash
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit1 && rabbitmqctl start_app
$ rabbitmqctl cluster_status
$ docker exec -it rabbit2 /bin/bash
$ rabbitmqctl stop_app
在一个正常的节点上移除一个异常的节点
$ docker exec -it rabbit1 /bin/bash
$ rabbitmqctl forget_cluster_node rabbit@rabbit2
进行数据消费时随机连接到一个节点,当队列不是当前节点创建的时候,需要有一个从创建队列的实例拉取队列数据的开销。此外由于需要固定从单实例获取数据,因此会出现单实例的瓶颈。
可以由多个节点消费单个队列的数据,提高了吞吐量
参数说明:
Pattern 模式:""为全部;"all-"为所有all-开头
Priority 优先级:建议10,比较耗费资源
Definition 定义参数:
ha-mode=all 或 exactly;ha-sync-mode=automatic;ha-params=2(ha-mode=exactly);
综上所述,对于可靠性要求比较高的场合,推荐使用镜像模式。
1、策略policy概念
使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。
为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。
2、添加策略
登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy
name:随便取,策略名称
Pattern:^ 匹配符,只有一个^代表匹配所有
Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)
或者使用命令:
#rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
3、查看效果
此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://ip:15672 再次进行访问,可以看到队列镜像同步。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章