原文地址:https://www.jianshu.com/p/11963564dd3d

教你如何从0开始搭建rabbitmq集群

一、准备工作

1、三台centos虚拟机

2、三台虚拟机都安装了docker

3、假设三台虚拟机的ip是192.168.2.128,192.168.2.129,192.168.2.130

二、搭建rabbitmq集群

1、3台机子分别配置host文件

vim /etc/hosts

填入内容:

192.168.2.128 rabbit1

192.168.2.129 rabbit2

192.168.2.130 rabbit3

2、运行rabbit容器

在rabbit1机器运行

docker run -d --hostname rabbit1 --net=host --name myrabbit1 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management

在rabbit2机器运行

docker run -d --hostname rabbit2 --net=host --name myrabbit2 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management

在rabbit3机器运行

docker run -d --hostname rabbit3 --net=host --name myrabbit3 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management

3、加入集群

在rabbit2机器执行命令

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit

在rabbit3机器执行命令

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit

进入 192.168.2.130:15672 查看状态账号密码是guest/guest

如果要摘除节点,在rabbit1机器执行:

docker exec -it myrabbit1 bash

rabbitmqctl forget_cluster_node rabbit@rabbit3

exit

点击queues,填写队列名,然后新增一个队列



此时队列内容没冗余,只存在rabbit1中,当rabbit1的队列服务挂了,此队列也不可用了。

在rabbit1机器执行

docker stop myrabbit1

再查看管理台



三、创建镜像队列

重新启动rabbit1

docker start myrabbit1

新建2个队列extqueue和nodesqueue

rabbitmqctl set_policy [-p ] [--priority ] [--apply-to ]

指令参数详情

参数名称 描述

-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".

例子:要对规则是^ext*的队列增加镜像队列,一共是2个队列

docker exec -it myrabbit1 bash

rabbitmqctl set_policy --apply-to queues extpolicy "^ext*" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

exit

例子:要对规则是^nodes*的队列增加镜像队列,分别在rabbit@rabbit2和rabbit@rabbit3两台服务器上镜像

docker exec -it myrabbit1 bash

rabbitmqctl set_policy --apply-to queues nodespolicy "^nodes*" '{"ha-mode":"nodes","ha-params":["rabbit@rabbit2","rabbit@rabbit3"],"ha-sync-mode":"automatic"}'

exit



可以看到都匹配到对应的规则,有1个冗余的队列。

此时我们把rabbit2停掉看一看效果;

在rabbit2的机器上执行

docker stop myrabbit2





nodesqueue队列依旧工作



extqueue队列的镜像队列换了一个。

rabbitmq集群搭建,镜像队列搭建的更多相关文章

  1. rabbitmq集群和镜像队列

    Rabbitmq集群和镜像队列 1引言 1.1编写目的 2 原理和使用 2.1镜像队列原理 2.1.1 原理 默认的一个rabbitmq中的queue是在一个node上的,至于在那个node上取决于c ...

  2. RabbitMQ集群、镜像部署配置

    1   RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Act ...

  3. RabbitMQ 集群之镜像同步

    mirrored 在上个博文中讲到了如果做集群,那么集群是成功了,但是queue是如何存放的呢?消息又是怎么同步呢. 默认的,也就是什么也不配置,直接在某个节点中添加一个queue,那么它仅仅是属于这 ...

  4. rabbitmq集群搭建方法简介(测试机linux centos)【转】

    本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...

  5. Centos6.9下RabbitMQ集群部署记录

    之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...

  6. RabbitMQ集群部署、高可用和持久化

    RabbitMQ 安装和使用 1.安装依赖环境 在 http://www.rabbitmq.com/which-erlang.html 页面查看安装rabbitmq需要安装erlang对应的版本 在 ...

  7. RabbitMQ集群架构(HA)并结合.NET Core实操

    一.前言 已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core.DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园 ...

  8. 消息中间件-RabbitMQ集群和高可用

    多机多节点集群部署 一. 环境准备 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤 10.10.1.41 10.10.1.42 10.10.1.43 提示:如果使用虚拟机,可以在一台VM ...

  9. RabbitMQ学习笔记(五、RabbitMQ集群)

    目录: RabbitMQ集群 镜像队列 RabbitMQ服务日志 RabbitMQ分布式部署 高可用集群 RabbitMQ集群: 1.集群中组件的状态 首先MQ一定要是一个高可用的中间件所以集群肯定是 ...

随机推荐

  1. Power Designer建模之餐饮在线点评系统——业务处理模型

    餐饮在线点评系统除查看会员促销活动.查看站内消息等简单业务流程外,相对复杂的业务流程包括管理员注册餐厅,发布餐厅信息,餐厅信息主要包括特色菜.促销活动.团购活动和优惠券信息. 餐厅信息发布后,用户可以 ...

  2. SetDlgItemText()与UpdateData()的区别

    转载:https://blog.csdn.net/qq_20161893/article/details/72818874 SetDlgItemText(IDC_EDIT_RXDATA,m_strRE ...

  3. CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral

    论文提出类特定控制门CSG来引导网络学习类特定的卷积核,并且加入正则化方法来稀疏化CSG矩阵,进一步保证类特定.从实验结果来看,CSG的稀疏性能够引导卷积核与类别的强关联,在卷积核层面产生高度类相关的 ...

  4. 一个Java对象的内存布局

    1.对象的创建过程 class loading class linking(verification,preparation,resolution) class initializing 申请对象内存 ...

  5. Docker 启动容器时,报错 WARNING:IPv4 forwarding is disabled. Networking will not work. 的解决办法

    Centos 7 Docker 启动了一个web服务 但是启动时 报 WARNING: IPv4 forwarding is disabled. Networking will not work. 解 ...

  6. shell-变量的数值运算-bc-typeset-中括号等方法介绍

    1. bc命令的用法: bc是unix下的计算器,它也可以用在命令行下面:    例:给自变量i加1 i=2 i=`echo $i + 1|bc` --------效率低     因为bc支持科学计算 ...

  7. 虚拟主机和ECS的选择——有的坑你可以不躺,有的钱你可以不花(一)

    一直想做网站,由于最开始虚拟主机有优惠,所以三年前买了虚拟主机,后来一直续费,间歇性使用过,发现很多功能都不行​. 昨天准备买新的,然后想起学生购买有优惠,于是开始了学生认证之旅​. 首先,看一下之前 ...

  8. C#数据结构-链栈

    上一篇我们通过数组结构实现了栈结构(准确的说是栈的顺序存储结构),现在我们通过链(单链)存储栈,也就是链栈. 通常对于正向单链表来说,是从头节点开始,在链的尾部附加节点,前一个节点的指针指向附加节点: ...

  9. day27 Pyhton 面向对象02 组合

    # 组合 # 什么是组合 : 一个类对象的属性是另外一个类的对象 class Person: def __init__(self,name,sex,hp,mp,ad): self.name = nam ...

  10. 利用github创建个人网站

    先建个仓库,仓库名为: 用户名.github.io 进入仓库,删除README.md文件 新建个文件,文件名为: index.html,内容根据自己要求编写 打开网站,地址:https://用户名.g ...