RabbitMQ集群部署
简介
- 消息中间件RabbitMQ,一般以集群方式部署, 主要提供消息的接受和发送,实现各微服务之间的消息异步。 以下将介绍RabbitMQ+HA方式进行部署。
原理介绍
- cookie
- 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消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
环境要求
-
1、所有节点需要再同一个局域网内;
-
2、所有节点需要有相同的 erlang cookie,否则不能正常通信,为了实现cookie内容一致,采用scp的方式进行。
-
3、准备三台虚拟机,配置相同
- 192.168.145.11 设置主机名 rabbitmq1
- 192.168.145.12 设置主机名 rabbitmq2
- 192.168.145.13 设置主机名 rabbitmq3
- 操作系统:centos7.2以上
-
4、集群中所有节点都需要hosts文件解析
-
[root@rabbitmq1 ~]# cat /etc/hosts 192.168.229.11 rabbitmq1 192.168.229.12 rabbitmq2 192.168.229.13 rabbitmq3
-
部署过程(每个节点都配置)
-
1、所有节点配置 vim /etc/hosts
- 192.168.145.11 rabbitmq1
- 192.168.145.12 rabbitmq2
- 192.168.145.13 rabbitmq3
-
2、所有节点安装erLang和rabbitmq
- 见linux系统中单机部署rabbitmq
yum -y install erlang
yum install -y rabbitmq-server
cp /usr/share/doc/rabbitmq-server-3.3.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
53行解注释
{
loopback_users, [