RabbitMQ消息队列集群

RabbitMQ

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

集群原理

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

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

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

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

系统架构

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

rabbitmq02app

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.将rabbitmq0二、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消息队列集群

相关文章
相关标签/搜索