- 浏览: 358096 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
在本章中我们来学习配置rabbitmq集群类型之一的built-in内置集群。
metadata元数据
在一个单节点的rabbitmq server中,queue metadata队列元数据、exchange metadata交换机元数据、binding metadata绑定元数据和vhost metadata虚拟主机元数据都全部保存在服务器的内存当中;在built-in内置rabbitmq server集群中,这四种元数据会被保存在每一个节点服务器内存中。
rabbitmq节点类型:RAM内存节点和Disk磁盘节点
单节点的rabbitmq只能是Disk磁盘类型的服务器节点。
在内置的rabbitmq服务器集群中,服务器节点分为RAM内存节点和Disk磁盘节点。RAM内存节点的rabbitmq server会将元数据信息保存在服务器内存中,而Disk磁盘节点的rabbitmq server会会将元数据信息刷新到磁盘上,RAM节点的性能好高于Disk节点的rabbitmq server的性能。
队列中的数据
在内置的rabbitmq服务器集群的队列中的消息并不会被“广播”到每个服务器节点的队列中,这也就是说如果用户将消息发布到了rabbitmq server1节点的Q1队列中,后来又向集群中添加了一个节点rabbitmq server3,rabbitmq server3会copy四种类型的metadata元数据,但是却不会copy已有队列中的消息,如果rabbitmq server1重启,那么rabbitmq server1中所有队列中的消息在再次其中之前——如果其中的所有的exchange、queue和消息都是持久化的——都会“丢失”,但是这个时候可以向其他节点发布消息。
在实际的生产环境中,对于内置rabbitmq集权来所,通常会在集群中配置一到2个Disk磁盘类型的rabbitmq节点。在这样的集群中,元数据信息的每一次变化,RAM节点的rabbitmq都会将修改保存到内存,而Disk磁盘类型的rabbitmq节点都会将修改保存到磁盘。如果集群中的Disk磁盘服务器节点宕机——整个集群中只有一个Disk磁盘服务节点的话,那整个集群都不能做以下操作:
1、创建queue队列;
2、创建exchange交换机;
3、创建binding;
4、添加用户;
5、修改用户权限;
6、添加或删除节点。
有了以上缺点,那为什么还要在集群中特别设置一些Disk磁盘服务器节点呢?这是因为,要想集群重启后元数据可以恢复,就需要把集群元数据持久化到磁盘,这也是为什么建议在rabbitmq的内置集群中为什么要设置1 ~2个Disk磁盘服务器节点的原因。RAM节点重启后只有链接到Disk节点获取元数据信息才能重新配置自己的节点。
首先我们先按照在CentOS上安装rabbitmq-server来重新安装2个rabbitmq server服务器:
# cd rabbitmq-server-3.1.1
# make
# make install TARGET_DIR=/opt/mq/rabbitmq2 SBIN_DIR=/opt/mq/rabbitmq2/sbin MAN_DIR=/opt/mq/rabbitmq2/man //将rabbitmq编译到/opt/mq/rabbitmq2目录
# make install TARGET_DIR=/opt/mq/rabbitmq3 SBIN_DIR=/opt/mq/rabbitmq3/sbin MAN_DIR=/opt/mq/rabbitmq3/man //将rabbitmq编译到/opt/mq/rabbitmq3目录
下面我们来开始在一台CentOS上配置rabbitmq内置集群的过程:
//节点1 rabbit@JackyChen
# cd /opt/mq/rabbitmq/sbin
# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit ./rabbitmq-server --detached
//节点2 rabbit2@JackyChen
# cd /opt/mq/rabbitmq2/sbin
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq2/rabbit2-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq2/rabbit2-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq2/logs /opt/mq/rabbitmq2/sbin/rabbitmq-server --detached
//节点3 rabbit3@JackyChen
# cd /opt/mq/rabbitmq3/sbin
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq3/rabbit3-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq3/rabbit3-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq3/logs /opt/mq/rabbitmq3/sbin/rabbitmq-server --detached
//创建集群节点rabbit2@JackyChen
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl reset
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl join_cluster rabbit@JackyChen //将rabbit@JackyChen和rabbit2@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl cluster_status
//创建集群节点rabbit3@JackyChen
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl reset
//将rabbit@JackyChen和rabbit3@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl join_cluster rabbit@JackyChen
//rabbit3@JackyChen设置为RAM节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl change_cluster_node_type ram
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl cluster_status
# ./rabbitmqctl cluster_status
节点信息显示如下:
注意:如果实在不同的服务器上配置rabbitmq节点,那么就需要在rabbitmq服务器共享一个.erlang.cookie,文件在/var/lib/rabbitmq目录下。
在物理服务器重启后,只要重新启动这几个rabbitmq后,集群就又自动建立起来了,很方便吧?!
metadata元数据
在一个单节点的rabbitmq server中,queue metadata队列元数据、exchange metadata交换机元数据、binding metadata绑定元数据和vhost metadata虚拟主机元数据都全部保存在服务器的内存当中;在built-in内置rabbitmq server集群中,这四种元数据会被保存在每一个节点服务器内存中。
rabbitmq节点类型:RAM内存节点和Disk磁盘节点
单节点的rabbitmq只能是Disk磁盘类型的服务器节点。
在内置的rabbitmq服务器集群中,服务器节点分为RAM内存节点和Disk磁盘节点。RAM内存节点的rabbitmq server会将元数据信息保存在服务器内存中,而Disk磁盘节点的rabbitmq server会会将元数据信息刷新到磁盘上,RAM节点的性能好高于Disk节点的rabbitmq server的性能。
队列中的数据
在内置的rabbitmq服务器集群的队列中的消息并不会被“广播”到每个服务器节点的队列中,这也就是说如果用户将消息发布到了rabbitmq server1节点的Q1队列中,后来又向集群中添加了一个节点rabbitmq server3,rabbitmq server3会copy四种类型的metadata元数据,但是却不会copy已有队列中的消息,如果rabbitmq server1重启,那么rabbitmq server1中所有队列中的消息在再次其中之前——如果其中的所有的exchange、queue和消息都是持久化的——都会“丢失”,但是这个时候可以向其他节点发布消息。
在实际的生产环境中,对于内置rabbitmq集权来所,通常会在集群中配置一到2个Disk磁盘类型的rabbitmq节点。在这样的集群中,元数据信息的每一次变化,RAM节点的rabbitmq都会将修改保存到内存,而Disk磁盘类型的rabbitmq节点都会将修改保存到磁盘。如果集群中的Disk磁盘服务器节点宕机——整个集群中只有一个Disk磁盘服务节点的话,那整个集群都不能做以下操作:
1、创建queue队列;
2、创建exchange交换机;
3、创建binding;
4、添加用户;
5、修改用户权限;
6、添加或删除节点。
有了以上缺点,那为什么还要在集群中特别设置一些Disk磁盘服务器节点呢?这是因为,要想集群重启后元数据可以恢复,就需要把集群元数据持久化到磁盘,这也是为什么建议在rabbitmq的内置集群中为什么要设置1 ~2个Disk磁盘服务器节点的原因。RAM节点重启后只有链接到Disk节点获取元数据信息才能重新配置自己的节点。
首先我们先按照在CentOS上安装rabbitmq-server来重新安装2个rabbitmq server服务器:
引用
# cd rabbitmq-server-3.1.1
# make
# make install TARGET_DIR=/opt/mq/rabbitmq2 SBIN_DIR=/opt/mq/rabbitmq2/sbin MAN_DIR=/opt/mq/rabbitmq2/man //将rabbitmq编译到/opt/mq/rabbitmq2目录
# make install TARGET_DIR=/opt/mq/rabbitmq3 SBIN_DIR=/opt/mq/rabbitmq3/sbin MAN_DIR=/opt/mq/rabbitmq3/man //将rabbitmq编译到/opt/mq/rabbitmq3目录
下面我们来开始在一台CentOS上配置rabbitmq内置集群的过程:
引用
//节点1 rabbit@JackyChen
# cd /opt/mq/rabbitmq/sbin
# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit ./rabbitmq-server --detached
//节点2 rabbit2@JackyChen
# cd /opt/mq/rabbitmq2/sbin
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq2/rabbit2-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq2/rabbit2-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq2/logs /opt/mq/rabbitmq2/sbin/rabbitmq-server --detached
//节点3 rabbit3@JackyChen
# cd /opt/mq/rabbitmq3/sbin
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 RABBITMQ_MNESIA_DIR=/opt/mq/rabbitmq3/rabbit3-mnesia RABBITMQ_PLUGINS_EXPAND_DIR=/opt/mq/rabbitmq3/rabbit3-plugins-scratch RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_LOG_BASE=/opt/mq/rabbitmq3/logs /opt/mq/rabbitmq3/sbin/rabbitmq-server --detached
//创建集群节点rabbit2@JackyChen
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl reset
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl join_cluster rabbit@JackyChen //将rabbit@JackyChen和rabbit2@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5674 ./rabbitmqctl cluster_status
//创建集群节点rabbit3@JackyChen
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl stop_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl reset
//将rabbit@JackyChen和rabbit3@JackyChen设置为Disk节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl join_cluster rabbit@JackyChen
//rabbit3@JackyChen设置为RAM节点
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl change_cluster_node_type ram
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl start_app
# RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5676 ./rabbitmqctl cluster_status
# ./rabbitmqctl cluster_status
节点信息显示如下:
注意:如果实在不同的服务器上配置rabbitmq节点,那么就需要在rabbitmq服务器共享一个.erlang.cookie,文件在/var/lib/rabbitmq目录下。
在物理服务器重启后,只要重新启动这几个rabbitmq后,集群就又自动建立起来了,很方便吧?!
发表评论
-
RabblitMQ Cluster + HAProxy(负载均衡)
2013-07-24 16:24 6168在本节中,我们主要来学习软件负载均衡器HAPr ... -
RabbitMQ:镜像队列Mirrored queue
2013-07-23 18:11 6508在上一节《R ... -
RabbitMQ:使用python发布/订阅消息
2013-07-22 18:32 6278在上一章节中,我们学习了RabbitMQ:基础 ... -
RabbitMQ:基础,运行和管理
2013-07-22 00:32 7177在本章中我们来学习一下RabbitMQ的基础知 ... -
CentOS 6.4 安装redis-2.6
2013-07-15 16:24 2343引用 # wget http:// ... -
CentOS 6.4 安装Sonar
2013-07-14 23:43 3279在本章中,我们来学习一下如何在Linux下配置 ... -
CentOS 6.4 优化编译安装Nginx
2013-07-13 22:13 2445在本章中,我们来学习一下如何在Linux下编译 ... -
CentsOS 6.4 安装Maven私人仓库Nexus
2013-07-12 19:22 1927在本章中,我们将来学习如何在linux下安装并配 ... -
CentOS 6.4 hadoop集成 Hbase Hive
2013-07-10 00:05 2351在之前的CentOS 5.4 hadoop集 ... -
CentOS 6.4 hadoop集成 Hbase Zookeeper
2013-07-09 22:41 2527再上一章中我们已经学习了Hadoop-1.0. ... -
CentOS 6.4 hadoop集成Hive
2013-07-09 01:58 2415在本节中,我们来学习如何安装Hive。在之前我 ... -
CentOS 6.4 优化编译安装MySQL-5.6
2013-07-09 00:25 4081在本章中,我们来学习一下怎么在CentOS 6 ... -
CentOS 6.4 安装伪分布式Hadoop 1.0.3
2013-07-02 00:52 2378在本章中学习如何在CentOS 6.4上安装配 ... -
Centos 6 上安装Apache Subversion(SVN)
2013-06-30 22:25 5284本章中我们来 ... -
Centos 6 上安装Git
2013-06-30 21:28 7099本章中我们来学习如何在CentOS 6.4上安装 ... -
Centos 6 上安装easy_install
2013-06-30 16:51 10064之前已经介绍过怎么安装python-pip了,本 ... -
Centos 6 上安装python-pip
2013-06-30 16:41 21224在使用Python时,需要导入一些第三方工具包,一 ... -
CentOS 6.4上安装VLC视频播放器
2013-06-16 01:33 3834由于安装了双系统,先看一些Windows上的视频 ... -
CentOS 6.4安装qq2012
2013-06-16 00:52 4969在CentOS 6.4安装qq2012,需要经过 ... -
CentOS查看Windows的NTFS分区
2013-06-15 20:48 1504本人的台式机上安装了双系统Windows + C ...
相关推荐
5. **启动RabbitMQ服务**:在每个节点上启动RabbitMQ服务。 6. **创建集群**:使用`rabbitmqctl join_cluster`命令将节点加入到集群中,例如`rabbitmqctl join_cluster rabbit@m1`,其中`m1`是集群的另一个节点。 7....
RabbitMQ集群允许消息发布者将消息发送到任意一个集群节点上,而消费者可以从任意一个节点消费消息。这种模式有助于提升消息传输效率并增强系统的容错性。 #### 二、RabbitMQ集群搭建步骤详解 ##### 1. 安装依赖...
1. 集群组建:通过在多台服务器上部署RabbitMQ,并配置节点间的通信,形成一个集群。集群中的节点可以是磁盘节点或内存节点,前者用于持久化消息,后者则更注重性能。 2. 节点同步:RabbitMQ使用镜像队列策略,确保...
x-oss-process=style/pnp8 (42.73KB, 下载次数:227) 下载附件 2019-12-2023 :01 上传【课程介绍】:第一章 : RabbitMQ介绍:消息中间件概念、RabbitMQ安装、RabbitMq客户端调用的Java实现。 第 2 章:RabbitMQ 概念...
- **在第一个节点上(例如node132)执行集群初始化操作**: ```bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@node132 rabbitmqctl start_app ``` - **在其他节点上加入集群...
集群是将多个RabbitMQ节点联合在一起,形成一个单一的逻辑服务。在集群中,消息可以在任何节点上发布,并可以在任何其他节点上被消费,这大大增强了系统的可用性和性能。创建RabbitMQ集群的目的是为了提供冗余,防止...
docker安装rabbitmq3.8集群-3台-详细笔记文档-带安装包
- **统一cookie**:RabbitMQ节点间通信依赖于相同的cookie,因此需要在所有节点上设置相同的Erlang cookie,以确保它们能加入同一个集群。 - **启动集群**:在第一台服务器上,使用`rabbitmqctl join_cluster`命令将...
资源包含rabbitmq镜像集群的搭建文档和springboot连接rabbitmq集群的配置方式,供参考
5. **集群配置**:配置RabbitMQ集群涉及修改节点的erlang.cookie文件以确保通信安全,设置节点类型,以及使用`rabbitmqctl join_cluster`命令将新节点添加到现有集群。 6. **网络要求**:集群内的节点需要能够相互...
rabbitmq-server-3.9.11.exe
1. **节点类型**:RabbitMQ 集群中的节点有两种类型,即磁盘节点和内存节点。磁盘节点存储所有数据,包括消息和元数据,适合大型、持久化的消息;内存节点不存储消息,仅用于处理短暂、低延迟的消息。 2. **集群...
接下来,在其他集群节点之一上,从集群状态中删除/清理rabbit@remote-host ,如下所示: rabbitmqctl -n rabbit@local-host eval "rabbit_node_scrubber:scrub( 'rabbit@remote-host' )." 2.从群集中删除本地节点 ...
kubernetes搭建rabbitmq集群,只需创建好相应的pv即可,无需修改,依次执行
5. **加入集群**:将新的节点加入到集群中,通常选择一个已存在的节点作为主节点,然后在其他节点上执行相应的 `stop_app`、`reset`、`join_cluster` 和 `start_app` 命令。例如,将 `rmq-broker-test-2` 加入到由 `...
例如,假设在一个三节点集群中,Exchange A的信息在所有节点上是相同的,而Queue Q的数据只存在于创建它的节点N1上,其他节点N2和N3仅保存有关Queue Q的元数据和指向N1的链接。 ##### 1.2 元数据同步机制 RabbitMQ...
rabbitmq-3.7.28-management-alpine 离线镜像安装包
适用于RabbitMQ的Docker 描述 该存储库使使用docker... - rabbitmq-vol:/var/lib/rabbitmq - rabbitmq-log:/var/log/rabbitmq - ./conf/:/etc/rabbitmq/ networks : - rabbitmq-net 步骤2:在端口中添加默认端口