RabbitMQ消息队列集群

栏目: Redis · 发布时间: 7年前

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

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消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

系统架构

RabbitMQ消息队列集群

概念说明:

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

RabbitMQ消息队列集群

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

RabbitMQ消息队列集群

4.安装最新repo源

yum -y install epel-release

5.安装rabbitmq-server软件包

yum -y install rabbitmq-server

6.查看已安装的插件

rabbitmq-plugins list

RabbitMQ消息队列集群

7.启动管理服务

rabbitmq-plugins enable rabbitmq_management

RabbitMQ消息队列集群

8.分别启动rabbitmq服务

systemctl start rabbitmq-server

RabbitMQ消息队列集群 RabbitMQ消息队列集群 RabbitMQ消息队列集群

rabbitmq集群部署

1.先停止rabbitmq服务

systemctl stop rabbitmq-server

2.进入cookie文件目录

cd /var/lib/rabbitmq/

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

vim .erlang.cookie

RabbitMQ消息队列集群

RabbitMQ消息队列集群

RabbitMQ消息队列集群

4.再启动rabbitmq服务

systemctl start rabbitmq-server

5.停止rabbitmq应用

rabbitmqctl stop_app

RabbitMQ消息队列集群

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

rabbitmqctl join_cluster --ram rabbit@rabbitmq01

RabbitMQ消息队列集群

RabbitMQ消息队列集群

7.启动rabbitmq应用

rabbitmqctl start_app

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

rabbitmqctl cluster_status

RabbitMQ消息队列集群

RabbitMQ消息队列集群

RabbitMQ消息队列集群

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

RabbitMQ消息队列集群

RabbitMQ消息队列集群


以上所述就是小编给大家介绍的《RabbitMQ消息队列集群》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具