首页 > 其他分享 >RabbitMQ docker集群 多机器部署

RabbitMQ docker集群 多机器部署

时间:2024-04-28 11:22:54浏览次数:17  
标签:队列 -- rabbitmq cluster 集群 RabbitMQ 镜像 docker data

参考 参考 https://blog.csdn.net/m0_47214030/article/details/131358298  

ip port hostname
192.168.2.201 6041 node1
192.168.2.202 6041 node2
192.168.2.203 6041 node3
1、启动三个RabbitMQ容器   新版本已经不建议通过环境变量设置 Erlang Cookie 了,建议在 home 目录下新建 .erlang.cookie 文件,在 每个节点的 .erlang.cookie 写入一致的字符串,注意 .erlang.cookie 文件的权限应该为 400。 所以为了便于修改ErlangCookie,启动容器时要做好容器数据卷的映射。 因为/var/lib/rabbitmq 是 RabbitMQ home 目录和 data 目录,所以需要映射到宿主机 每以机器执行
mkdir -p /data/rabbitmq_cluster/node/{data,conf,log}
chmod -R 777 /data/rabbitmq_cluster/node
cat << EOF >/data/rabbitmq_cluster/node/data/.erlang.cookie
LleLHxuTQBrxgR4VnP03Q7 EOF chmod -R 600 /data/rabbitmq_cluster/node/data/.erlang.cookie

 

    每台机器分别执行 node1
docker run -d --name rabbitmq --restart=always --hostname node1 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node2:192.168.2.202 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

  node2
docker run -d --name rabbitmq --restart=always --hostname node2 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

  node3
docker run -d --name rabbitmq --restart=always --hostname node3 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node2:192.168.2.202 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

  设置节点1
docker exec -it rabbitmq /bin/bash 
rabbitmq-plugins enable rabbitmq_management # 管理页面插件 r
abbitmqctl stop_app # (rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务)
rabbitmqctl reset
rabbitmqctl start_app #(只启动应用服务)
exit

 

  设置节点2
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit

 

设置节点3
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset r
abbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit

 

  2.5、预览结果 节点设置完成之后,在浏览器访问192.168.13.100:15673、192.168.13.100:15674和192.168.13.100:15675中任意一个来查看RabbitMQ Management: 0 至此,RabbitMQ集群搭建完毕。   3、配置镜像队列 3.1、配置镜像的原因 如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并 且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但 是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一 个短暂却会产生问题的时间窗。通过 publisherconfirm(发布确认) 机制能够确保客户端知道哪些消息己经存入磁盘,尽 管如此,一般不希望遇到因单点故障导致的服务不可用。 引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中 的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。   3.2、搭建步骤 启动三台集群节点 随便找一个节点添加 policy(策略) 要先绑定一个交换机和队列才行 参考 https://blog.csdn.net/suyuaidan/article/details/133761176   0         说明:   Name:新建的策略的名字(按照自己的需求进行设置即可) Pattern:会按照设置的规则进行镜像设置(例如本例中设置为 ^mirror,则会为开头是 mirror 的队列进行镜像备份) Pattern: queue的匹配模式(正则表达式)。^表示所有队列都是镜像队列。 Definition: 镜像定义,包括三个部分ha-sync-mode、ha-mode、ha-params。 ha-mode: 指明镜像队列的模式,有效取值范围为all/exactly/nodes。 all:表示在集群所有的代理上进行镜像。 exactly:表示在指定个数的代理上进行镜像,代理的个数由ha-params指定。 nodes:表示在指定的代理上进行镜像,代理名称通过ha-params指定。 ha-params: ha-mode模式需要用到的参数。 ha-sync-mode: 表示镜像队列中消息的同步方式,有效取值范围为:automatic,manually。 automatic:表示自动向master同步数据。 manually:表示手动向master同步数据。 Priority: 可选参数, policy的优先级。   0 3.在 rabbitmq-node1 上创建一个队列发送一条消息,队列存在镜像队列   0   4、停掉 rabbitmq-node1 之后发现 rabbitmq-node2 成为镜像队列 0   5、就算整个集群只剩下一台机器了 依然能消费队列里面的消息 说明队列里面的消息被镜像队列传递到相应机器里面

标签:队列,--,rabbitmq,cluster,集群,RabbitMQ,镜像,docker,data
From: https://www.cnblogs.com/lucoo/p/18163346

相关文章

  • DockerFile
    FROMcentos:7MAINTAINERzhangsan<[email protected]>ENVMYPATH/usr/localWORKDIR$MYPATHRUNyum-yinstallvimRUNyum-yinstallnet-toolsEXPOSE80CMDecho$MYPATHCMDecho"----end----"CMD/bin/bashDockerFile文件教学连接单阶段构建例子FROM......
  • rabbitmq
    一消息队列介绍1.1介绍消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”1.2MQ解决什么问题MQ是一直存在,不过随着微服务架构的流行,成了解决微服务之间问题的常用工具。应用解耦以电商应用为例......
  • docker部署SonarQube流程及相关问题汇总
    环境说明:sonarqube版本:10.4.1-communityPostgreSql版本:14.1系统环境:centos7.6(x86_64)部署流程1、PostgreSql的安装部署在docker中拉取最新版本镜像,命令如下:dockerpullpostgres 镜像拉取成功后执行如下命令创建PostgreSql容器:dockerrun--namepostgres-ePOST......
  • Hadoop集群模式的搭建之二:配置Hadoop平台基础环境
    在进行Hadoop集群的安装部署之前,需要对虚拟机进行一些基础环境配置。例如,为了在集群中识别主机,需要配置主机和IP地址的映射关系;为了使用Web相关的服务和访问连接,需要在集群中关闭并禁用防火墙功能;为了减少节点之间访问时人工输入用户密码,需要配置SSH免密登录;为了集群节点的时间能......
  • docker_常见软件安装
    官网:hub.docker.comDocker中安装tomcatdockersearchtomcat#搜索镜像dockerpulltomcat#拉取镜像dockerimagestomcat#查看拉取的镜像dockerrun-it-p8080:8080tomcat#运行tomcat,需要webApp.dist移动到webAppdockerpullbillygoo/tomcat-jdk8#免修改版......
  • 详细:docker手动部署lnmp以及记录遇到的问题
    一、基本思路(背景)部署时间:2024.04.25主机为deepin20.9安装好docker,从官网下载nginxphpmysql三个镜像设置并启动相应三个容器,并配置portainer二、安装docker1.如果以前安装过老版本,请先卸载以前版本sudoaptremovedockerdocker-engine2.安装docker-ce与密钥管理与下......
  • win11 安装desktop docker
    1.操作系统安装HV如果没有,执行以系统管理员执行HV.cmd,内容如下:pushd"%~dp0"dir/b%SystemRoot%\servicing\Packages\*Hyper-V*.mum>hyper-v.txtfor/f%%iin('findstr/i.hyper-v.txt2^>nul')dodism/online/norestart/add-package:"%SystemRoot......
  • rabbitmq系列03---发布确认
    一、发布确认逻辑生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的......
  • 记录一下docker desktop windows安装,容器安装等
    安装包下载https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe    docker应用管理工具,选择性安装https://www.rainbond.com/docs/quick-start/quick-installhttps://www.bilibili.com/video/BV1MZ4y1b7wW/?p=2&spm_id_from=pageDriver&......
  • Rabbitmq系列02---Exchange
    个人理解:交换机的类型划分个人理解是能过routingkey来划分的,一是否按routingkey找队列;fanout就是不按routingkey找队列,Direct和Topicr按routingkey找队列,只是一个模糊找,一个精准找,而headers不按routingkey是按消头中的内容找队列。一、Fanout(订阅模式|广播模式)  Fanout......