RabbitMQ (十三) 集群+单机搭建(window)
拜读了网上很多前辈的文章,对RabbitMQ的集群有了一点点认识.
好多文章都说到,RabbitMQ的集群分为普通集群和镜像集群,有的还加了两种:单机集群和主从集群.
我看来看去,看了半天,怎么感觉,其实RabbitMQ的集群实际就一种:普通集群.
至于单机集群,无非是在一台机器上模拟普通集群,
镜像集群,不过是RabbitMQ的HA方案而已,因为这种集群方式在部署的时候,其实是通过配置参数,让队列可以"真正的"在多个节点上存储.(而普通集群,队列实际只会存储在一个节点).
主从集群,则是在镜像集群的基础上,加一层负载均衡而已.
个人愚见,也许不对.
一.原理
RabbitMQ的集群的设计目的是在增加更多节点时,能线性的增加性能(CPU,内存)和容量(内存,磁盘).同时,一个节点宕机了,其他节点依然可以提供 RabbitMQ 的服务.
所以,队列的完整数据只会保存在创建它的那个节点上,其他节点只会保存该队列的元数据和一个指向这个队列的指针而已.
一个队列的完整数据包括队列的元数据和队列的内容:
RabbitMQ一共有4种类型的元数据,并且,RabbitMQ集群会始终同步这4种元数据.
- 队列元数据:队列的名称和声明队列时设置的属性(是否持久化、是否自动删除、队列所属的节点)
- 交换机元数据:交换机的名称、类型、属性(是否持久化等)
- 绑定元数据:一张简单的表格展示了如何将消息路由到队列.包含的列有 交换机名称、交换机类型、路由键、队列名称等
- vhost元数据:为vhost内队列、交换机和绑定提供命名空间和安全属性
因此,当用户访问其中任何一个RabbitMQ节点时,通过rabbitmqctl查询到的queue,user,exchange,vhost等信息都是相同的.
下图是一个有3个节点的集群,可以看到,消息保存在节点1.
当消费者从节点2获取消息时,RabbitMQ 会把节点1的消息取出来,传递到节点2,再发送给消费者.这种方式的最大问题在于,如果节点1宕机了,那么节点2和节点3就无法获取到节点1中还未消费的消息了.
如果做了队列持久化及消息持久化,那么必须等到节点1恢复后,才能被消费,并且在节点1恢复之前,其它节点不能再创建节点1已经创建过的队列;
如果队列没有持久化,消息就会失丢.
因此,这种默认的集群模式更适合非持久化队列,只有该队列是非持久话的,客户端才能重新连接到集群里的其他节点,并重新创建该队列.假如该队列是持久化的,那么只能将故障节点恢复起来.否则,永远无法创建同名的队列.
为了证明上面说的话,我们通过搭建一个单机集群,来模拟这个场景 .
二.搭建单机集群
1.配置Hosts节点
127.0.0.1 node1
127.0.0.1 node2
2.复制两份 RabbitMQ ,分别取名"-1","-2"
这里我们约定 "-1" 是 node1 的 RabbitMQ,"-2"是 node2 的 RabbitMQ.
3.修改 node1 的 rabbitmq-env.bat 文件
文件路径 : rabbitmq_server-3.7.10-1\sbin\rabbitmq-env.bat
在 16 行加如下配置:
set RABBITMQ_CONFIG_FILE=!RABBITMQ_HOME!\etc\rabbitmq-node1
set RABBITMQ_BASE=!RABBITMQ_BASE!\rabbitmq-cluster
set RABBITMQ_NODENAME=rabbit1@node1
set RABBITMQ_NODE_PORT=
再上个图,清楚些.
注意第19行, 是 rabbit1@node1 ,不是 rabbit@node1 ,单机集群,@前面一定要不一样,否则会"痛不欲生"...
4.修改 node1 的 rabbitmq-node1.config 文件
首先进入 rabbitmq_server-3.7.10-1\etc 文件夹,安装的时候会有一个官方示例文件 : rabbitmq.config.example
复制一份,改个名 : rabbitmq-node1.config
在 542 行加如下配置:
{listener,[{port,},
{ip,"127.0.0.1"},
{ssl,false}]}
注意,我的 RabbitMQ 版本是 3.7.10 ,版本不一样,行数不一样,截个图,就是在这几行注释下面 :
5.启动 node1
1)关闭启动的 RabbitMQ
由于电脑上已经以window服务的方式启动了RabbitMQ,为了方便演示单机集群的搭建,所以我们需要将它关闭掉.
rabbitmq-service stop
,
2)启动 node 1 的 RabbitMQ
进入 node1 的 sbin 文件夹,也就是 rabbitmq_server-3.7.10-1\sbin 文件夹,然后我们以后台应用的方式启动.
rabbitmq-server -detached
验证一下:
在浏览器地址栏输入 http://localhost:15672/#/
如果没有启动管理后台插件,需要先启动它 : rabbitmq-plugins enable rabbitmq_management (由于之前已经启动过了,所以我这里就不需要再启动了)
默认的账号密码都是 guest
在管理后台可以看到,node1 已经成功启动了.
6.修改 node2 的配置文件
按照第3,4步的方式修改,只是把管理后台的端口由 15672 改成 15673,当然,文件名要改成 rabbitmq-node2.config
{listener,[{port,},
{ip,"127.0.0.1"},
{ssl,false}]}
rabbitmq-env.bat 文件修改如下,红色标注,特别注意 rabbit2@node2
set RABBITMQ_CONFIG_FILE=!RABBITMQ_HOME!\etc\rabbitmq-node2
set RABBITMQ_BASE=!RABBITMQ_BASE!\rabbitmq-cluster
set RABBITMQ_NODENAME=rabbit2@node2
set RABBITMQ_NODE_PORT=
7.启动 node2
参考第5步的第2小步启动.
验证一下:
在浏览器地址栏输入 http://localhost:15673/#/
没毛病!
8.将 node2 加入集群
1)关闭 node2
rabbitmqctl stop_app
2)将 node2 加入到 node1
rabbitmqctl join_cluster rabbit1@node1
3)启动 node2
先停止 rabbitmqctl stop
在启动 rabbitmq-server -detached
4)打开 15672 和 15673 管理后台验证:
三.节点操作
增加
删除
硬删除
参考:
https://www.cnblogs.com/nulige/p/8874893.html
https://blog.csdn.net/vbirdbest/article/details/78723467
https://blog.csdn.net/fgf00/article/details/79558498
RabbitMQ (十三) 集群+单机搭建(window)的更多相关文章
- Redis 5.0.7 讲解,单机、集群模式搭建
Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...
- RabbitMQ之集群搭建
1.RabbitMQ集群模式RabbitMQ集群中节点包括内存节点(RAM).磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点. 2.普通模式(默认) 对于普通模式,集群中 ...
- redis在Windows下以后台服务一键搭建集群(单机--伪集群)
redis在Windows下以后台服务一键搭建集群(单机--伪集群) 一.概述 此教程介绍如何在windows系统中同一台机器上布置redis伪集群,同时要以后台服务的模式运行.布置以脚本的形式,一键 ...
- ZooKeeper 系列(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 1.2 解压 1.3 配置环境变量 1.4 修改配置 1.5 启动 1. ...
- ZooKeeper —— 单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- ZooKeeper系列(二)—— Zookeeper 单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本 Zookeeper,这里我下载的版本 3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # ...
- RabbitMQ 3.9.7 镜像模式集群的搭建
1. 概述 老话说的好:做人脚踏实地,一步一个脚印,便定能战胜一切困难,最终取得成功!!! 言归正传,之前我们聊了 RabbitMQ 单点服务的安装,今天我们来聊聊 RabbitMQ 3.9.7 镜像 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)
异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...
随机推荐
- 【C++对象模型】第六章 执行期语意学
执行期语意学,即在程序执行时,编译器产生额外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行. 1.对象的构造和析构 对于类对象的构造,一般在定义之后则开始内部的构造过程 ...
- 企业CEO最核心的应该是销售意识
一个企业的本质是赚利润,利润怎么来?靠卖东西,所以企业里面最重要的应该是销售人员.在一些500强的外企里有一个规定,没有做过销售的人是很难升到总经理的,在以色列的军队中,没有当过班长,是不可以被提拔为 ...
- NGINX: 反向代理 Nexus
Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...
- 【洛谷 P2763】 试题库问题(最大流)
题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...
- 小程序var that=this
小程序的js函数中,一般第一句就是var that=this,那么此语句的必要性是什么呢?下面用一段代码来解释这个问题 Page({ //页面的初始数据 loadUsers: function () ...
- [IOS]Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史
官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址 http:// ...
- js_跑马灯
跑马灯?刚听到这个词的时候,脑袋第一个想到的是跑马?嗯?就是香港的那种跑马场.懂?其次就是霓虹灯了,一闪一闪的多好看. 霓虹灯?哦,那是城市的杰作,记忆中是.开往城市边缘开,把车窗都摇下来,用速度换一 ...
- metasploit后门维持技术
在meterpreter中执行:run metsvc -A 如此以后便会自动在服务器当中多生成一个meterpreter的服务,并且是开机自动启动.所以二次如果要利用直接: use exploit/m ...
- Linux内核【链表】整理笔记(2) 【转】
转自:http://blog.chinaunix.net/uid-23069658-id-4725279.html 关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比 ...
- mongodb 学习笔记 3 --- 查询
在mongodb的查询中可以通过使用如下操作符进行深度查询 1.条件操作符 $gt $gte : > >= {"age":{"$gt":18 ...