docker-compose安装rabbitmq集群(主从集群---》镜像集群)

yls

2020/5/11

创建docker-compose.yml 文件

version: '3'
services:
rabbitmq1:
image: rabbitmq:3.8.3-management
container_name: rabbitmq1
restart: always
hostname: rabbitmq1
ports:
- 15683:15672
- 5683:5672
volumes:
- ./data1:/var/lib/rabbitmq
- ./rabbitmq.sh:/home/rabbitmq.sh
- ./etc/hosts:/etc/hosts
environment:
- RABBITMQ_DEFAULT_USER=root
- RABBITMQ_DEFAULT_PASS=root
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
networks:
rabbit:
ipv4_address: 192.168.6.2 rabbitmq2:
image: rabbitmq:3.8.3-management
container_name: rabbitmq2
restart: always
hostname: rabbitmq2
ports:
- 15684:15672
- 5684:5672
volumes:
- ./data2:/var/lib/rabbitmq
- ./rabbitmq.sh:/home/rabbitmq.sh
- ./etc/hosts:/etc/hosts
environment:
- RABBITMQ_DEFAULT_USER=root
- RABBITMQ_DEFAULT_PASS=root
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
networks:
rabbit:
ipv4_address: 192.168.6.3 rabbitmq3:
image: rabbitmq:3.8.3-management
container_name: rabbitmq3
restart: always
hostname: rabbitmq3
ports:
- 15692:15672
- 5692:5672
volumes:
- ./data3:/var/lib/rabbitmq
- ./rabbitmq.sh:/home/rabbitmq.sh
- ./etc/hosts:/etc/hosts
environment:
- RABBITMQ_DEFAULT_USER=root
- RABBITMQ_DEFAULT_PASS=root
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
networks:
rabbit:
ipv4_address: 192.168.6.4 networks:
rabbit:
external:
name: rabbitmqnet

创建 rabbitmqnet 子网

docker network create --subnet 192.168.6.1/24 rabbitmqnet

创建 rabbitmq.sh 脚本

如果想用ram存储就用第一个shell文件,用硬盘存储就用第二个shell文件

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbitmq@rabbitmq1
rabbitmqctl start_app
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbitmq@rabbitmq1
rabbitmqctl start_app

配置docker-compose.yml文件同步目录下的 ./etc/hosts 文件(集群节点间需能互相访问,故每个集群节点的hosts文件应包含集群内所有节点的信息以保证互相解析)

192.168.6.2 rabbitmq1
192.168.6.3 rabbitmq2
192.168.6.4 rabbitmq3

注意:一定不要加rabbit@ ,我之前配成 192.168.6.4 rabbit@rabbitmq1 ,白白浪费好多时间

若不配置或者配错hosts文件,会出现如下错误

sudo rabbitmqctl join_cluster --ram rabbit@rabbitmq11
Clustering node rrabbit@rabbitmq1 with rabbit@rabbitmq-node1...
Error: unable to connect to nodes rabbit@rabbitmq1]: nodedown DIAGNOSTICS
===========
attempted to contact: [rabbit@rabbitmq1]
rabbit@rabbitmq-node1:
* unable to connect to epmd (port 4369) on rabbitmq1: nxdomain (non-existing domain)
current node details:
- node name: 'rabbitmqctl-526rabbitmq1'
- home dir: /var/lib/rabbitmq
- cookie hash: 50YO3zK+HJHos0tab1vHjg==

docker-compose up -d 运行容器

docker exec -it rabbitmq1 bash 分别进入从节点容器(本文中从节点是 rabbitmq3,rabbitmq2),启动脚本

chmod +777 /home/rabbitmq.sh

./home/rabbitmq.sh

主从集群已经搭建好,查看集群状态 rabbitmqctl cluster_status

主从集群的不足: 默认情况下,队列只位于主节点上,尽管他们可以从所有节点看到和访问,也就是说整个集群与主节点共存亡。

因此,当主节点宕机时,无法进行自动的故障转移,下面的队列镜像集群可以解决这个问题。

下面开始搭队列镜像集群

镜像集群就是在主从集群的基础上,添加相应策略,将主节点消息队列中的信息备份到其它节点上,主节点宕机时,对整个集群不产生影响,使集群可以高可用。

添加策略(可以在创建队列之前添加,也可以创建队列之后添加)

参考官方文档: https://www.rabbitmq.com/parameters.html#policies

策略模板([]表示可选参数,<>表示必穿参数)
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
参数 说明
-p vhost 对指定的vhost进行设置
name policy的名称
pattern queue的匹配模式(正则表达式)
definition 镜像定义:包含三个部分ha-mode,ha-params,ha-sync-mode
ha-mode:指明镜像队列的模式。all: 集群中所有节点进行镜像;exactly:在指定个数节点进行镜像,节点个数由ha-params指定;nodes:在指定节点进行镜像,节点名称由ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 消息的同步方式(automatic,manual)
priority policy的优先级,当有多个策略指定同一个队列时,优先级高的策略生效

添加策略实例

rabbitmqctl set_policy ha-11 '^11' '{"ha-mode":"all","ha-sync-mode":"automatic"}'

说明:策略正则表达式为 "^" 表示匹配所有队列名称, ^11 :表示匹配hello开头的队列

查看当前策略

rabbitmqctl list_policies

删除策略

rabbitmqctl clear_policy ha-11

以上策略的添加,删除,查看都可以在web UI 界面操作。

docker-compose安装rabbitmq集群(主从集群---》镜像集群)的更多相关文章

  1. 手把手教你 Docker Compose安装DOClever

    一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...

  2. Docker容器安装RabbitMQ

    Docker容器安装RabbitMQ 准备资料 erlang的rpm安装包 https://github.com/rabbitmq/erlang-rpm/releases rabbitmq的rpm安装 ...

  3. Docker Compose安装以及入门

    Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...

  4. 使用 docker compose 安装 tidb

    目标 : 单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群 前提条件: 1.centos版本在7.3 以上 2.安装git 3.安装docker Docker versi ...

  5. docker和docker compose安装使用、入门进阶案例

    一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...

  6. Docker Compose安装部署Jenkins

    流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...

  7. docker 中安装 rabbitMQ

    安装rabbitMQ的命令 docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RAB ...

  8. Docker Compose 安装 on centos7

    本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...

  9. centos docker compose安装

    docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...

  10. Docker 尝试安装rabbitmq实践笔记

    docker pull rabbitmq 自定義的rabbitmq Dockerfile # base image FROM rabbitmq:3.7-management # running req ...

随机推荐

  1. three.js obj转js的详细步骤 convert_obj_three.py的用法

    three.js是最近非常流行的一个前端webgl库. js格式的模型文件是three.js中可以直接加载的文件.使用THREE.JSONLoader()直接加载,而不需要引用其它的loader插件. ...

  2. Connections in Galaxy War ZOJ - 3261 (并查集)

    点权并查集的反向离线操作 题目大意:有n个stars,每一个都一定的“颜值”.然后stars与stars之间可以相连,query c表示再与c相连的stars中,颜值比c高的,stars的标号,如果有 ...

  3. D - Leading and Trailing LightOJ - 1282

    题解:求n^k的前三位和后三位. 后三位直接快速幂对1000去余就可以了.前三位可以转换成浮点数来操作,也是用快速幂,我们只保留答案的前三位,当前值大于1000.0的话就除以10,直到结果小于等于10 ...

  4. Problem E. Bet

    转载:https://blog.csdn.net/qq_40861916/article/details/84403731 #include<iostream> #include<c ...

  5. Python的6种方式实现单例模式

    单例模式是一个软件的设计模式,为了保证一个类,无论调用多少次产生的实例对象,都是指向同一个内存地址,仅仅只有一个实例(只有一个对象). 实现单例模式的手段有很多种,但总的原则是保证一个类只要实例化一个 ...

  6. 从源码解读Spring如何解决bean循环依赖

    1 什么是bean的循环依赖 循环依赖的原文是circular reference,指多个对象相互引用,形成一个闭环. 以两个对象的循环依赖为例: Spring中的循环依赖有 3 种情况: 构造器(c ...

  7. 进阶 Linux基本命令-1

    vmware三种网络模式1,桥接虚拟机直接连接外网,局域网.宿主机电脑不提供路由. 2,NAT网络地址转换,家庭网 3,host only 只能和宿主电脑打交道 Linux命令形式 命令 +[参数]+ ...

  8. 关于join on 和单表查询的实时效果

    当数据量大(10W单位级)的时候,join的优势,会被单表查询超过. 以下是两张表单查和两张表联查的时间对比,同时,这样的记录有局限性的. 一.数据量少时: 单表查: 表一:显示行 0 - 2 ( 3 ...

  9. 测试Thread中的常用方法

    package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...

  10. 一个令人兴奋的ES6星特性-结构赋值

    学完了前4节,今天我给大家带来的是一个令人兴奋的特性:解构赋值.这个章节代码片段有点偏多,不过可以放心,一点都不烧脑,还是老样子:简单易懂. 什么是解构赋值 按照一贯的套路,接下来的内容是解释:什么是 ...