Docker部署RabbitMQ集群(镜像模式+Haproxy)

标签: RabbitMQ

一、镜像模式

概念介绍

镜像模式:集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的。并且实现集群非常的单间,一般互联网大厂都会构建这种集群模式;

Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方法,主要就是实现数据的同步,一般来是2-3个节点实现数据同步(对以100%数据可靠性解决方案一般是3个节点)集群架构如下:
在这里插入图片描述
我是在windows上使用docker单机部署的;
RabbitMQ 集群环境说明:

服务器IP 容器名称 节点说明 端口 管控台地址
192.168.1.105 master72 rabbitmq master 5672 http://192.168.1.105:15672
192.168.1.105 slave73 rabbitmq slave 5673 http://192.168.1.105:15673
192.168.1.105 slave74 rabbitmq slave 5674 http://192.168.1.105:15674
192.168.1.105 rabbitmq-haproxy8100 haproxy 8100 http://192.168.1.105:8100/rabbitmq-stats
192.168.1.105 rabbitmq-haproxy8101 haproxy 8101 http://192.168.1.105:8101/rabbitmq-stats

部署步骤

1、下载windows版本的docker参考https://www.runoob.com/docker/windows-docker-install.html

2、创建一个桥接网络
docker network create rabbtimanet
查看网络:docker network ls
在这里插入图片描述

3、拉取最新rabbitmq和haproxy 最新镜像
docker pull rabbitmq
docker pull haproxy
查看镜像:docker images
在这里插入图片描述
4、启动并创建容器master72、slave73、slave74

docker run -d --name=master72 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=master72 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h master72 --net=rabbtimanet rabbitmq:latest

docker run -d --name=slave73 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=slave73 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h slave73 --net=rabbtimanet rabbitmq:latest

docker run -d --name=slave74 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=slave74 -e RABBITMQ_ERLANG_COOKIE=‘JIANGZHONGJIE’ -h slave74 --net=rabbtimanet rabbitmq:latest

RABBITMQ_ERLANG_COOKIE:通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有容器都一致即可。
-h: 设置容器hostname名称
–net: 设置所属网络

分别进入master72、slave73、slave74 容器(docker exec -it 容器id /bin/bash),执行一下:

//图形化界面安装
rabbitmq-plugins enable rabbitmq_management

可以访问以下地址进行测试:
http://localhost:15672/#/
http://localhost:15673/#/
http://localhost:15674/#/

5、salve加入集群操作(注意做这个步骤的时候:需要配置/etc/hosts必须相互能够寻地到 我们已通过-h指定hostname)
分别进入slave73、slave73容器(docker exec -it 容器id /bin/bash),执行一下:

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram master72@master72
//(--ram:内存存储方式,默认磁盘存储)
rabbitmqctl start_app

访问任意管控台http://localhost:15674/#/ 如下图:
在这里插入图片描述

//其他基本操作
// 在另外其他节点上操作要移除的集群节点
rabbitmqctl forget_cluster_node master73@master73
//集群名称(默认为第一个node名称)修改(任意节点):
rabbitmqctl set_cluster_name rabbitmq_cluster1
//查看集群状态(任意节点)
rabbitmqctl cluster_status

6、配置镜像队列

//设置镜像队列策略(在任意一个节点上执行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

*将所有队列设置为镜像队列,即队列会被同步复制到各个节点,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看队列是否在从节点同步。

二、HaProxy

概念介绍

HaProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HaProxy特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。HaProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以简单安全整合进您当前框架中,同时可以保护你的web服务器不被暴露到网络上

部署步骤

我们将创建两个容器分别为:rabbitmq-haproxy8100、rabbitmq-haproxy8101

1、创建容器rabbitmq-haproxy8100挂载的配置文件haproxy.cfg

#logging options
global
	log 127.0.0.1 local0 info
	maxconn 5120
	chroot /usr/local/etc/haproxy
	uid 99
	gid 99
	daemon
	quiet
	nbproc 20
	pidfile /var/run/haproxy.pid

defaults
	log global
	#使用4层代理模式,”mode http”为7层代理模式
	mode tcp
	#if you set mode to tcp,then you nust change tcplog into httplog
	option tcplog
	option dontlognull
	retries 3
	option redispatch
	maxconn 2000
	timeout connect 5s
    #客户端空闲超时时间为 60秒 则HA 发起重连机制
    timeout client 60s
    #服务器端链接超时时间为 15秒 则HA 发起重连机制
    timeout server 15s
#front-end IP for consumers and producters

listen rabbitmq_cluster
	bind 0.0.0.0:5677
	#配置TCP模式
	mode tcp
	#balance url_param userid
	#balance url_param session_id check_post 64
	#balance hdr(User-Agent)
	#balance hdr(host)
	#balance hdr(Host) use_domain_only
	#balance rdp-cookie
	#balance leastconn
	#balance source //ip
	#简单的轮询
	balance roundrobin
	#rabbitmq集群节点配置 
	#inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
    server master72 192.168.1.105:5672 check inter 5000 rise 2 fall 2
    server slave73 192.168.1.105:5673 check inter 5000 rise 2 fall 2
    server slave74 192.168.1.105:5674 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
	bind 0.0.0.0:8100
	mode http
	option httplog
	stats enable
	#设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
	stats uri /rabbitmq-stats
	stats refresh 5s
	stats auth admin:123456
listen rabbitmq_admin #监听8000端口转发到rabbitmq的客户端
    bind 0.0.0.0:8000
    server master72 192.168.1.105:15672 check inter 5000 rise 2 fall 2
    server slave73 192.168.1.105:15673 check inter 5000 rise 2 fall 2
    server slave74 192.168.1.105:15674 check inter 5000 rise 2 fall 2	

2、创建容器rabbitmq-haproxy8101挂载的配置文件haproxy.cfg
复制上面内容把5677、8100、8000端口改成5678、8101、8001即可

3、分别创建并且运行容器

docker run --name rabbitmq-haproxy8100 -p 5677:5677 -p 8100:8100 -p 8000:8000  --net=rabbtimanet -v H:\haproxy\8100\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
docker run --name rabbitmq-haproxy8101 -p 5678:5678 -p 8101:8101 -p 8001:8001  --net=rabbtimanet -v H:\haproxy\8101\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest

容器启动成功后访问:
http://localhost:8100/rabbitmq-stats
http://localhost:8101/rabbitmq-stats
在这里插入图片描述
访问地址查看RabbitMQ的3个节点为绿色,表示正常;

访问以下地址转发到RabbitMQ客户端:
http://localhost:8000
http://localhost:8001

本文参考教学视频:https://www.bilibili.com/video/av71666962

版权声明:本文为qq_33676124原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33676124/article/details/104936552

智能推荐

RabbitMQ详解(四):RabbitMQ集群默认模式、使用Docker搭建RabbitMQ集群、镜像队列

七、RabbitMQ集群 1、默认模式 RabbitMQ集群允许消费者和生产者在RabbitMQ单个节点崩溃的情况下继续运行,它可以通过添加更多的节点来线性地扩展消息通信的吞吐量。当失去一个RabbitMQ节点时,客户端能够重新连接到集群中的任何其他节点并继续生产或者消费 RabbitMQ集群不能保证消息的万无一失,即使将消息、队列、交换机等都设置为可持久化,生产端和消费端都正确地使用了确认方式,...

docker搭建 Haproxy+rabbitmq集群

交流QQ号:555913397 有什么问题可以加群大家一起交流 Docker安装 安装环境:Centos7 1.安装docker 2.配置阿里云docker镜像服务 在阿里云容器镜像服务里有个镜像加速器,在里面可以得到私有的镜像加速地址 下面编辑docker镜像加速 会得到如下内容 下面来改造它 保存文件进行docker配置文件重载 3.配置docker开机启动 4.启动docker Haprox...

Rabbitmq 集群高可用部署详细 (镜像模式)。

序言 为什么搭建 rabbitmq 集群?rabbitmq 集群有那些模式?如何搭建 Rabbitmq 集群?rabbitmq 镜像高可用策略有那些? 首先这款产品本身的优点众多,大家最看好的便是他的异步化提高系统抗峰值能力,然后便是系统及功能结构解耦,那么照此两点来说,他的在整个系统中的作用还是至关重要的,那么如此重要,当然要考虑他的高可用性,那么便有第一个问题的解答。 rabbitmq 有 3...

docker部署RabbitMQ集群

原创内容,纯手敲,转载请写明出处~ 公司开发用rabbitmq,要部署集群,在此做个笔记 首先安装docker,并安装portainer,这里不介绍,有需要可以留言,我来补齐安装docker及portainer可视化工具的步骤 安装rabbitmq 我用的是 rabbitmq:3-management  docker pull rabbitmq:3-management 下载好...

Mybatis基础(part 1)

一.mybatis调用SQL语句 1.使用XML配置SQL语句 在SqlMapConfig.xml配置数据源并指定映射配置文件的位置(每个DAO对应的XML文件,该文件映射了DAO的全限定类名)   2.使用注解配置sql语句 在SqlMapConfig.xml配置数据源和class属性(指定被注解的dao全限定类名),在DAO上写注解。 用注解来配置,故此处使用class属性指定被注解...

猜你喜欢

Docker 容器内运行 Dubbo 服务

原文:http://www.aqcoder.com/post/content?id=41 在使用 Docker 容器内运行 Dubbo 服务的时候一个令人很头痛的问题就是服务地址注册。 Docker 容器内有自己的 IP 段,和宿主主机是隔离的,Dubbo 会使用容器内的 IP 注册到 zookeeper 注册中心上。这样其他的服务是无法访问的。 方式一:–host 一个很直接的方案就...

python基础教程

Python基础教程 一、简介 1.1 python语言介绍 python的创始人:Guido Van Rossum Python下载地址:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Pycharm下载地址:https://www.runoob.com/w3cnote/pycharm-windows-instal...

1、Git安装与配置

1、Git安装与配置 一:版本控制 定义:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 为什么要用版本控制:在起初的项目开发中,我们会不断的编写代码,但是,害怕有一天系统突然挂掉了,完蛋,辛苦写的代码就这么没了,所有为了防止这一点,都会开发一点就以目录拷贝的形式保存下来,自己这么1.0、2.0、3.0…的这么去标记,开始的还好,后面的话你压根就不知道...

Golang net/rpc 包的深度解读和学习

Golang 提供了一个开箱即用的RPC服务,实现方式简约而不简单。本文对net/rpc 包做深度解读和学习实战。 RPC 简单介绍 远程过程调用 (Remote Procedure Call,RPC) 是一种计算机通信协议。允许运行在一台计算机的程序调用另一个地址空间的子程序(一般是开放网络中的一台计算机),而程序员就像调用调用本地程序一样,无需额外做交互编程。RPC 是一种 CS (Clien...

merge sort

归并排序(merge sort) 具体算法: I.对原数组进行分组:对数组进行遍历,每检测出一个有序序列则记录一个分组,一般分组都是上升序列,下降序列也会被转换成上升序列 II.对两两相邻的分组进行合并,合并后的分组也将被记录 III.迭代合并之前合并后的分组直到出现最后的一个有序的大分组,也就是排序的最终结果 java.util.DualPivotQuicksort类中的static void ...