首页 > 代码库 > Rabbit-3.6.5 集群部署
Rabbit-3.6.5 集群部署
1.集群概述
通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。
这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。
2.节点类型
RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和vhost的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node:将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启RabbitMQ的时候,丢失系统的配置信息。
3.RabbitMQ可以通过三种方法来部署分布式集群系统,cluster,federation,shovel
1. cluster:不支持跨网段,用于同一个网段内的局域网
可以随意的动态增加或者减少
节点之间需要运行相同版本的RabbitMQ和Erlang
2. federation:应用于广域网,允许单台服务器上的交换机或队列接收发布到另一台服务器上交换机或队列的消息,可以是单独机器或集群。federation队列类似于单向点对点连接,消息会在联盟队列之间转发任意次,直到被消费者接受。通常使用federation来连接 internet上的中间服务器,用作订阅分发消息或工作队列。
3. shovel:连接方式与federation的连接方式类似,但它工作在更低层次。可以应用于广域网。
4.Erlang Cookie
Erlang Cookie是保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的Erlang Cookie。具体的目录存放在/var/lib/rabbitmq/.erlang.cookie。
5.RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。
普通模式:默认的集群模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
镜像模式:将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
6.实现机制
镜像队列实现了RabbitMQ的高可用性(HA),具体的实现策略如下所示:
ha-mode ha-params 功能
all 空 镜像队列将会在整个集群中复制。当一个新的节点加入后,也会在这 个节点上复制一份。
exactly count 镜像队列将会在集群上复制count份。如果集群数量少于count时候,队列会复制到所有节点上。如果大于Count集群,有一个节点crash后,新进入节点也不会做新的镜像。
nodes node name 镜像队列会在node name中复制。如果这个名称不是集群中的一个,这不会触发错误。如果在这个node list中没有一个节点在线,那么这个queue会被声明在client连接的节点。
7.集群部署
RabbitMQ 集群安装在 3 个节点上:
rabbitmq-node01:172.16.1.45
rabbitmq-node02:172.16.1.46
rabbitmq-node03:172.16.1.47
HAProxy 安装在 192.168.1.4 上,用于对外提供 RabbitMQ 均衡
8.在每台主机上配置相同的hosts
[root@rabbitmq-node01 ~]# tail -3 /etc/hosts 172.16.1.45 rabbitmq-node01172.16.1.46 rabbitmq-node02172.16.1.47 rabbitmq-node03
9.在每台主机上yum安装rabbitmq-server软件,依赖与erlang,会自动下载erlang
yum install rabbitmq-server
10.查询安装包
[root@rabbitmq-node03 src]# rpm -qa rabbitmq-serverrabbitmq-server-3.1.5-1.el6.noarch[root@rabbitmq-node03 src]# rpm -qa erlangerlang-R14B-04.3.el6.x86_64
11.
Rabbit-3.6.5 集群部署