原文地址: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. 解决Dubbo无法发布被事务代理的Service问题

    在HelloServiceImpl类上加入@Transactional注解后,虽然工程可以正常跑起来,但是通过dubbo管理控制台可以看到里面并没有服务发布上来. 此时启动服务提供者和服务消费者,并访 ...

  2. VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法

    故障描述: 通过 VMware vSphere Client 连接到安装 VMware ESXi 虚拟环境的主机时,当启动其中的虚拟机后,无法连接到控制台. 选择"控制台"时,控制 ...

  3. SessionStorage、LocalStorage详解

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/sessionstorage-and-localst ...

  4. bootStrap小结3

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. CSP-S2020AFO记

    2020-10.11 考初赛辣. 选择题考了一堆时间复杂度,一个不会(卒) 我寻思这01背包哪里能用贪心? 啊,这,这,这手写快排竟如此简单,手写取Max,手写队列,两个字符串颠来倒去,竟活到爆! 震 ...

  6. go 加锁

    package mainimport ( "fmt" "math/rand" "sync" "time")var tic ...

  7. go 下载图片

    package main import ( "net/http" "fmt" "io/ioutil" "strings" ...

  8. requests-html添加header

    from requests_html import HTMLSession session = HTMLSession() headers = { "User-Agent":&qu ...

  9. minianaconda3安装

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-lates ...

  10. git学习(一) 入门级命令

    git 本地操作 调出Git的帮助文档 git --help 查看某个具体命令的帮助文档 git +命令 --help 查看git的版本 git --version 生成空的本地仓库 git init ...