RabbitMQ高可用-镜像模式部署使用
一、概述
RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。
RabbitMQ集群普通模式考虑到性能和存储空间,仅采用元数据同步的方式。即其他节点不会实际存储消息数据。
生产者和消费者连接在哪个节点上,则消息就存储在哪个节点上,其他节点仅会存储元数据,如果消费者获取的数据不在当前节点上,则内部会路由到实际存储消息的节点上。
我们在实际集群部署时,考虑到高可用性,一般都会使用镜像模式。
在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。内存节点,就是将元数据(metadata)都放在内存里,磁盘节点就是放在磁盘上。如果RabbitMQ是单节点运行,默认就是磁盘节点。在RabbitMQ集群里,至少有一个磁盘节点,它用来持久保存元数据。新的节点加入集群后,会从磁盘节点上拷贝数据。但是,集群里也不必要每个节点都是磁盘节点,这主要是性能问题。例如,压力大的RPC服务,每秒都要创建和销毁数百个队列,如果集群里都是磁盘节点,意味着队列定义在每个节点上,都要写入磁盘才算成功,这样就会非常慢。
如果集群里只有一个磁盘节点,这个节点挂了,会发生什么?此时消息路由机制仍可正常进行(可以正常投递和消费消息),但是不能做如下事:create queues,create exchanges,create bindings,add users,change permissions,add or remove cluster nodes
所以,考虑到高可用性,推荐在集群里保持2个磁盘节点,这样一个挂了,另一个还可正常工作。但上述最后一点,往集群里增加或删除节点,要求2个磁盘节点同时在线。
如果2个节点,则建议都设为磁盘节点,如果3个节点,则可2个磁盘节点+1个内存节点。
RabbitMQ安装可参考上一篇博文:https://www.cnblogs.com/huligong1234/p/13548573.html
部署方案:
CentOS7.8 x64
mq01:192.168.100
mq02:192.168.101
二、配置普通集群模式
把mq01的cookie值复制到mq02服务器
配置cookie
vi /var/lib/rabbitmq/.erlang.cookie
确保rabbitMQ服务处于停止状态:service rabbitmq-server stop
确保2个节点的coolie文件使用相同的值
cookie文件默认路径为/var/lib/rabbitmq/.erlang.cookie(RPM安装)
或者$home/.erlang.cookie(解压方式安装)
.erlang.cookie设置可写
chmod u+w /var/lib/rabbitmq/.erlang.cookie
加入集群(默认加入的为磁盘节点)
rabbitmqctl join_cluster rabbit@mq02
如果要使用内存节点,则可以使用
rabbitmqctl join_cluster --ram rabbit@mq0