docker部署rabbitmq集群的实现方法

拉取rabbitmq management镜像

docker pull rabbitmq:3.7-rc-management

若不使用Rabbitmq的management功能,可以拉取镜像:rabbitmq:3.7-rc

参考: https://hub.docker.com/_/rabbitmq/

创建网络

创建rabbitmq私有网络

# docker network create rabbitmqnet
# docker network ls
NETWORK ID     NAME        DRIVER       SCOPE
65b44ea8847c    rabbitmqnet     bridge       local
...

创建节点

通过docker命令创建三个Rabbitmq nodes;

注意这里使用相同的 RABBITMQ_ERLANG_COOKIE 值

# docker run -d \
--name=rabbitmq1 \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_NODENAME=rabbitmq1 \
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \
-h rabbitmq1 \
--net=rabbitmqnet \
rabbitmq:3.7-rc-management

# docker run -d \
--name=rabbitmq2 \
-p 5673:5672 \
-p 15673:15672 \
-e RABBITMQ_NODENAME=rabbitmq2 \
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \
-h rabbitmq2 \
--net=rabbitmqnet \
rabbitmq:3.7-rc-management

# docker run -d \
--name=rabbitmq3 \
-p 5674:5672 \
-p 15674:15672 \
-e RABBITMQ_NODENAME=rabbitmq3 \
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \
-h rabbitmq3 \
--net=rabbitmqnet \
rabbitmq:3.7-rc-management

组建rabbitmq集群

登陆Rabbitmq的后两个节点,执行命令加入第一个Rabbitmq节点集群

### Disk Node
# docker exec rabbitmq2 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"

### Ram Node
# docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"

退出集群

# docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app"

拉取haproxy镜像

拉取haproxy镜像

# docker pull haproxy

启动haproxy

# cat haproxy-create.sh
#! /bin/bash

docker run -d \
  --name rabbitmq-haproxy \
  -p 1080:80 -p 5677:5677 -p 8001:8001 \
  --net=rabbitmqnet \
  -v /root/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \
  haproxy:latest

haproxy的配置文件如下:

root@node0:~/rabbitmq# cat haproxy-etc/haproxy.cfg
# Simple configuration for an HTTP proxy listening on port 80 on all
# interfaces and forwarding requests to a single backend "servers" with a
# single server "server1" listening on 127.0.0.1:8000

global
  daemon
  maxconn 256

defaults
  mode http
  timeout connect 5000ms
  timeout client 5000ms
  timeout server 5000ms

listen rabbitmq_cluster
  bind 0.0.0.0:5677
  option tcplog
  mode tcp
  balance leastconn
  server rabbit1 rabbitmq1:5672 check inter 2s rise 2 fall 3
  server rabbit2 rabbitmq2:5672 check inter 2s rise 2 fall 3
  server rabbit3 rabbitmq3:5672 check inter 2s rise 2 fall 3

listen http_front
  bind 0.0.0.0:80
  stats uri /haproxy?stats

listen rabbitmq_admin
  bind 0.0.0.0:8001
  server rabbit1 rabbitmq1:15672
  server rabbit2 rabbitmq2:15672
  server rabbit3 rabbitmq3:15672

启动haproxy后,可以通过haproxy来访问rabbitmq集群:http://external-ip:8001

获取haproxy的状态:http://external-ip:1080/haproxy?stats

rabbitmq exporter部署

要收集rabbitmq的metrics给prometheus使用的话,可以使用开源的rabbitmq-exporter

参考如下:

https://github.com/kbudde/rabbitmq_exporter

https://hub.docker.com/r/kbudde/rabbitmq-exporter/

拉取镜像

# docker pull kbudde/rabbitmq-exporter

启动rabbitmq实例

代码如下:

# docker run -d --name=rabbitmq1 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq1 -e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' -h rabbitmq1 --net=rabbitmqnet -p 9090:9090 rabbitmq:3.7-rc-management

开启9090端口,这个是rabbitmq exporter的默认PUBLISH_PORT

启动rabbitmq exporter实例

# docker run -d --net=container:rabbitmq1 kbudde/rabbitmq-exporter

获取rabbitmq的metrics

# wget http://localhost:9090/metrics

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • RabbitMQ的配置与安装教程全纪录

    前言 最近这几天身体不舒服,脖子痛的厉害,可能是上月太累了好久没写博客了,之前也说了公司的.Net项目部做了,改用Scale来做,原本想着会用java来搞,所以上个月在拼命的学java,这几天一直脖子不舒服,也就不学了,也一直在追剧,和陈工聊天时也讨论过要不要转java,继续学,考虑了好久决定还是先不折腾了,继续.Net.本来想着再休息一周呢,不过最近脖子好多了,今天正好没事做就研究了下RabbitMQ. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法

  • 安卓开发之mqtt协议实例代码

    首先物联网协议mqtt协议是基于tcp/ip协议的,使用了官方的mqttclient框架 /* *初始化mqttclient */ private void init() { try { //MQTT的连接设置 options = new MqttConnectOptions(); //host为主机名,test为clientid即连接MQTT的客户端ID,一般以客户端唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存 client = new M

  • springboot+RabbitMQ+InfluxDB+Grafara监控实践

    本文需要有相关spring boot 或spring cloud 相关微服务框架的基础,如果您具备相关基础可以很容易的实现下述过程!!!!!!! 希望 本文的所说对需要的您有所帮助 从这里我们开始进入闲聊阶段. 大家都知道 spring boot整合了很多很多的第三方框架,我们这里就简单讨论和使用 性能监控和JVM监控相关的东西.其他的本文不讨论虽然有些关联,所以开篇有说需要有相关spring boot框架基础说了这么多废话,下面真正进入主题. 这里首先给大家看下整体的数据流程图,其中两条主线一

  • Spring Boot RabbitMQ 延迟消息实现完整版示例

    概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可.面试官不是很满意,提出: 用定时任务无法做到准实时通知,有没有其他办法? 我当时的回答是: 可以用队列,订单下完后,发送一个消息到队列里,并指定过期时间,时间一到,执行回调接口. 面试官听完后,就不再问了.其实我当时的思路是对的,只不过讲的不是很专业而已.专业说法是利用 延迟消息 . 其实用定时任务,确实有点问题,原本业务系统希望10分钟后,如果订

  • springboot实现rabbitmq的队列初始化和绑定

    配置文件,在rabbit中自动建立exchange,queue和绑定它们的关系 代码里初始化exchange 代码里初始化queue 代码里绑定exchange,queue和routekey 配置文件,直接声明vhost 代码里初始化exchange /** * rabbitMq里初始化exchange. * * @return */ @Bean public TopicExchange crmExchange() { return new TopicExchange(EXCHANGE); }

  • Docker MQTT安装使用教程

    MQTT简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议. Docker安装RabbitMQ配置MQTT 使用RabbitMQ作为MQTT服务端,Eclipse Paho作为客户端.宿主机系统为ubuntu16.04 Docker下载镜像 docke

  • springboot集成mqtt的实践开发

    序 MQTT(Message Queuing Telemetry Transport)是基于二进制消息的发布/订阅编程模式的消息协议,非常适合需要低功耗和网络带宽有限的IoT场景.这里简单介绍一下如何在springboot中集成. maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</arti

  • vue使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt消息通知建立一个独立于业务服务系统的消息通知服务,这个服务还可以与开发的语言无关,客户端既可以是安卓也可以是ios,也可以是java或者c#,python等.闲话不多扯,这里只是实现了在vue中使用mqtt的js客户端,后台用.net WEB API用的是c#的mqtt客户端 第一步:安装依赖 np

  • PHP基于rabbitmq操作类的生产者和消费者功能示例

    本文实例讲述了PHP基于rabbitmq操作类的生产者和消费者功能.分享给大家供大家参考,具体如下: 注意事项: 1.accept.php消费者代码需要在命令行执行 2.'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQCommand.php操作类代码 <?php /* * amqp协议操作类,可以访问rabbitMQ * 需先安装php_amqp扩展 */ class RabbitMQCommand{ public $

  • docker部署rabbitmq集群的实现方法

    拉取rabbitmq management镜像 docker pull rabbitmq:3.7-rc-management 若不使用Rabbitmq的management功能,可以拉取镜像:rabbitmq:3.7-rc 参考: https://hub.docker.com/_/rabbitmq/ 创建网络 创建rabbitmq私有网络 # docker network create rabbitmqnet # docker network ls NETWORK ID NAME DRIVER

  • docker搭建rabbitmq集群环境的方法

    本文主要讲述如何用docker搭建rabbitmq的集群.分享给大家,希望此文章对各位有所帮助. 下载镜像 采用bijukunjummen该镜像. git clone https://github.com/bijukunjummen/docker-rabbitmq-cluster.git 运行 启动集群 cd docker-rabbitmq-cluster/cluster docker-compose up -d ...... Status: Downloaded newer image for

  • Docker搭建RabbitMQ集群的方法步骤

    目录 集群模式介绍 1.普通集群的搭建 1.1.普通集群架构介绍 1.2.环境准备 1.3.集群搭建 2.镜像集群的搭建 2.1.配置镜像集群的策略 集群模式介绍 RabbitMQ集群模式有两种:普通模式和镜像模式 普通模式:默认模式,多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.交换器结构.交换器与队列绑定关系.vhost.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化

  • docker实现redis集群搭建的方法步骤

    目录 一.创建redis docker基础镜像 二.制作redis节点镜像 三.运行redis集群 引用: 摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库--首要解决把整个数据集按照分区规则映射到多个节点的问题. 这边就需要知道分区规则--哈希分区规则.Redis Clus

  • 阿里云服务器部署RabbitMQ集群的详细教程

    目录 一.为什么要搭建RabbitMQ集群? 二.RabbitMQ集群的三种模式 ️单机模式 普通集群模式 镜像队列 三.阿里云服务器下Docker搭建RabbitMQ集群 ️Docker安装RabbitMQ集群 测试RabbitMQ集群 四.SpringBoot整合RabbitMQ集群 创建Maven聚合工程 引入共有依赖 创建生产者 创建消费者 ️核心源码 五.测试消息的生产与消费 小结 一.为什么要搭建RabbitMQ集群? 未部署集群的缺点 如果RabbitMQ集群只有一个broker节

  • 使用docker部署hadoop集群的详细教程

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群 准备: 首先要有一台内存8G以上的centos7机器,我用的是阿里云主机. 其次将jdk和hadoop包上传到服务器中. 我安装的是hadoop2.7.7.包给大家准备好了,链接:https://pan.baidu.com/s/15n

  • Docker部署Mysql集群的实现

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信红包巨大业务量,数据库承受巨大负载 常见MySQL集群方案 mysql 集群方案介绍,建议使用pxc,因为弱一致性会有问题,比如说a节点数据库显示我购买成功,b 节点数据库显示没有成功,这就麻烦了,pxc 方案是在全部节点都写入成功之后才会告诉你成功,是可读可写双向同步的,但是replication

  • Docker部署MySQL8集群(一主二从)的实现步骤

    目录 一.CentOS7.9安装Docker20 二.部署MySQL集群(一主二从) 三.结果 一.CentOS7.9安装Docker20 1.安装yum-utils工具 yum install -y yum-utils 2.设置docker的依赖源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 注释:CentOS直接使用yum命令安装的Docker版本为1.13.1属于

  • 基于Docker部署Tomcat集群、 Nginx负载均衡的问题小结

    写在前面 看完Dokcer相关的书籍,正好有个项目要这样搞,所以自己练习一下. 当作一百世一样.这里的道理很明白:我思故我在,既然我存在,就不能装作不存在.无论如何,我要为自己负起责任.--王小波<三十而立> 结构图: 这里仅作为一种学习,一般这种负载的话,Nginx是放到主机侧的, JavaWeb(Tomcat)应用放到容器里. 效果 新建文件夹. D=uag;mkdir $D;cd $D;mkdir uag_nginx uag_tomcat8; ls uag_nginx uag_tomca

  • ubuntu docker搭建Hadoop集群环境的方法

    spark要配合Hadoop的hdfs使用,然而Hadoop的特点就是分布式,在一台主机上搭建集群有点困难,百度后发现可以使用docker构建搭建,于是开搞: github项目:https://github.com/kiwenlau/hadoop-cluster-docker 参考文章://www.jb51.net/article/109698.htm docker安装 文章中安装的是docker.io 但是我推荐安装docker-ce,docker.io版本太老了,步骤如下: 1.国际惯例更新

随机推荐