RabbitMQ消息队列集群

RabbitMQ

MQ(Message Queue,消息队列)是一款消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。

集群原理

rabbitmq 是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。
rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;

RabbitMQ的Cluster集群模式一般分为两种, 普通模式和镜像模式 。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。

普通模式下, 以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式下, 将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

系统架构

概念说明:

Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
Queue:消息的载体,每个消息都会被投到一个或多个队列
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key:路由关键字,exchange根据这个关键字进行消息投递
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离
Producer:消息生产者,就是投递消息的程序
Consumer:消息消费者,就是接受消息的程序
Channel:消息通道,在客户端的每个连接里,可建立多个channel

系统环境

主机名 操作系统 IP地址 用途
rabbitmq01 Centos 7.4 x86_64 192.168.96.41 磁盘节点
rabbitmq02 Centos 7.4.x86_64 192.168.96.42 内存节点
rabbitmq03 Centos 7.4 x86_64 192.168.96.43 内存节点

开始部署

以下三台服务器部署配置一致,如下步骤1 - 8

1.关闭防火墙及Selinux

setenforce 0
systemctl stop firewalld

2.分别修改三台服务器的主机名

2.1 rabbitmq01服务器

vim /etc/hostname

rabbitmq01

2.2 rabbitmq02服务器

vim /etc/hostname

rabbitmq02

2.3 rabbitmq03服务器

vim /etc/hostname

rabbitmq03

3.分别修改三台服务器的hosts文件

vim /etc/hosts

192.168.96.23   rabbitmq01
192.168.96.21   rabbitmq02
192.168.96.22   rabbitmq03

4.安装最新repo源

yum -y install epel-release

5.安装rabbitmq-server软件包

yum -y install rabbitmq-server

6.查看已安装的插件

rabbitmq-plugins list

7.启动管理服务

rabbitmq-plugins enable rabbitmq_management

8.分别启动rabbitmq服务

systemctl start rabbitmq-server



rabbitmq集群部署

1.先停止rabbitmq服务

systemctl stop rabbitmq-server

2.进入cookie文件目录

cd /var/lib/rabbitmq/

3.编辑.erlang.cookie文件序列号(各节点需要有相同序列号值)

vim .erlang.cookie

4.再启动rabbitmq服务

systemctl start rabbitmq-server

5.停止rabbitmq应用

rabbitmqctl stop_app

6.将rabbitmq02、rabbitmq03加入rabbitmq01,使它们成为一个集群

rabbitmqctl join_cluster --ram [email protected]

7.启动rabbitmq应用

rabbitmqctl start_app

8.分别查看rabbitmq服务器状态

rabbitmqctl cluster_status

通过客户端浏览器进行访问RabbitMQ (用户名:guest 密码:guest)http://192.168.96.41:15672

原文地址:http://blog.51cto.com/10316297/2155665

时间: 2024-10-08 10:49:47

RabbitMQ消息队列集群的相关文章

RabbitMQ消息队列集群配置

RabbitMQ是什么? MQ(Message Queue,消息队列)消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息同步. 原理介绍 rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以

消息队列集群配置

原理介绍 rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点 rabbitmq集群中,各个ra

ActiveMQ消息队列集群的搭建

1.准备activemq apache-activemq-5.12.0-bin.tar 2.解压文件 3.并将文件cp一份命名为activemq1 进入conf文件进行修改 修改属性为brokerNamet他的名字可以随意修改,但是需要保证唯一 这里我们配置了动态 组播 将暂时不需 要的属性进行注释,要修改uri路径的端口号为61616,并在最后引用了组播 4.修改配置文件jetty.xml 将里面的port的端口号改为8161 5.接下来把activemq1复制两份,为activemq2,ac

高可用消息队列集群zookeeper+leveldb+activemq

正在上传中---- 预计8月底完成

(转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例. 1. 客户端接口 Client interface 为了展示一个RPC服务是如何使用的,我们将创建一段很简单的客户端class. 它将会向外提供名字为call的函数,这个call会发送RPC请求并且阻塞知道收到RPC运算的结果.代码如下: [python] vie

RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC) [转]

在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例. 1. 客户端接口 Client interface 为了展示一个RPC服务是如何使用的,我们将创建一段很简单的客户端class. 它将会向外提供名字为call的函数,这个call会发送RPC请求并且阻塞知道收到RPC运算的结果.代码如下: [python] vie

RabbitMQ介绍5 - 集群

RabbitMQ内建集群机制,利用Erlang提供的开放电信平台(OTP,Open telecom Platform)通信框架,使得集群很容易进行横向扩展,提高系统吞吐量.这里只讨论集群的概念.原理,关于如何创建集群见官方介绍: http://www.rabbitmq.com/clustering.html 内存节点和磁盘节点 RabbitMQ将队列.exchange.绑定.vhost的配置信息(也就是创建时提供的信息)称为元数据(集群状态时,集群节点地址.节点与其它元数据的关系也是元数据),简

rabbitmq 消息队列

rabbitmq 消息队列: 解耦:降低一个程序降低耦合性 异步: 优点:--解决排队的问题. --解决资源浪费的问题.   --讲要处理的事物,进行存放,集中处理. 缺点:--不能保证任务被及时执行 应该场景:--去哪儿网 --12306 同步: 优点:--可以保证任务被及时执行 缺点:--排队问题,占用资源,造成资源浪费 大并发: web环境: --Nginx (epoll模式)   10000-20000 --Apache(epoll模式)1000-2000 pv = page visit

RabbitMQ 消息队列 应用

安装参考    详细介绍   学习参考 RabbitMQ 消息队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.