rabbitmq集群搭建,镜像队列搭建
原文地址: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集群搭建,镜像队列搭建的更多相关文章
- rabbitmq集群和镜像队列
Rabbitmq集群和镜像队列 1引言 1.1编写目的 2 原理和使用 2.1镜像队列原理 2.1.1 原理 默认的一个rabbitmq中的queue是在一个node上的,至于在那个node上取决于c ...
- RabbitMQ集群、镜像部署配置
1 RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Act ...
- RabbitMQ 集群之镜像同步
mirrored 在上个博文中讲到了如果做集群,那么集群是成功了,但是queue是如何存放的呢?消息又是怎么同步呢. 默认的,也就是什么也不配置,直接在某个节点中添加一个queue,那么它仅仅是属于这 ...
- rabbitmq集群搭建方法简介(测试机linux centos)【转】
本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...
- Centos6.9下RabbitMQ集群部署记录
之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...
- RabbitMQ集群部署、高可用和持久化
RabbitMQ 安装和使用 1.安装依赖环境 在 http://www.rabbitmq.com/which-erlang.html 页面查看安装rabbitmq需要安装erlang对应的版本 在 ...
- RabbitMQ集群架构(HA)并结合.NET Core实操
一.前言 已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core.DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园 ...
- 消息中间件-RabbitMQ集群和高可用
多机多节点集群部署 一. 环境准备 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤 10.10.1.41 10.10.1.42 10.10.1.43 提示:如果使用虚拟机,可以在一台VM ...
- RabbitMQ学习笔记(五、RabbitMQ集群)
目录: RabbitMQ集群 镜像队列 RabbitMQ服务日志 RabbitMQ分布式部署 高可用集群 RabbitMQ集群: 1.集群中组件的状态 首先MQ一定要是一个高可用的中间件所以集群肯定是 ...
随机推荐
- Eclipse 重命名工程、包、类
Eclipse版本 重命名工程,使用鼠标右键点击工程,选Refactor > Rename...(快捷键:Alt + Shift + R) 重命名包.类的操作与重命名工程一样. 其实,最简单的操 ...
- JavaScript返回当前的时分秒
要求: 封装一个函数返回当前的时分秒 格式 08:08:08 代码实现: function getTimer() { var time = new Date(); var h = time.getHo ...
- JVM内存布局(又叫Java运行时数据区)
JVM 堆中的数据是共享的,是占用内存最大的一块区域. 可以执行字节码的模块叫作执行引擎. 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器. JVM 的内存划分与多线程是息息相关的.像我们程序中运 ...
- C#数据结构-双向链表
链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以c#语言实现简单的双向链表,作为备用,记录下~ public class Node<T> { private Nod ...
- 利用 Python 插入 Oracle 数据
# coding=utf-8 ''''' Created on 2020-01-05 @author: Mr. Zheng ''' import json; import urllib2 import ...
- ORA-00018: maximum number of sessions exceeded 超出最大会话数
ORA-00018: maximum number of sessions exceededORA-00018: 超出最大会话数 Cause: All session state obje ...
- SpringBoot整合Mybatis 编译失败:找不到符号 程序包不存在
问题描述:jpa不好用,转用mybatis,配置多数据源 但是配置后无法编译mvn clean install dao层这些报错,找不到entity的包 问题解决:罪魁祸首:热部署的部分 ...
- 持续集成工具之Jenkins pipline简单示例
前文我们主要聊了下jenkins的插件安装.用户及权限管理.邮件发送.配置凭证到gitlab上拉取项目和创建普通job:回顾请参考https://www.cnblogs.com/qiuhom-1874 ...
- springMvc配置拦截器无效
说明 springMvc配置国际化拦截器失败,点击页面按钮切换中英文无效,排查发现没有进入 LocaleChangeInterceptor 类中,判断拦截器没有起作用,那么是什么原因导致拦截器无效,通 ...
- Verilog基础入门——简单的语句块编写(二)
[题干] [代码] module top_module( input a, input b, output out ); assign out = a&b; endmodule [与或非门等] ...