一,高可用、集群模式
1. 主备模式(Warren)
这种方式实现起来非常简单,如果并发和数据量不高的情况下,这种模式是非常适合的。
这种模式并非是多个服务实例提供服务,只有主节点服务提供服务,从节点不对外提示服务支持,当主节点挂掉时会将从节点升级为主节点对外提供服务。搭建这种模式需要Haproxy组件的支持,来检测和完成主备切换的工作。
2.远程模式(Shovel)
这种模式可以实现多活的一种模式,所谓Shove就是我们可以把消息进行不同数据中心的复制,我们可以跨地域的让两个mq集群互联。这种模式是Rabittmq 早期的一个模式。目前用的不是很多。
3.镜像模式(Mirror)
这是一种经典的集群模式,可以保证100%数据不丢失,在实际工作中也是用的最多的。实现起来也是非常简单。这般这种模式需要3个节点来完成。主要就是将队列中的消息进行水平复制。
如图:
4.多活模式
这种模式也是实现异地数据复制的主流模式,因为Shovel 模式配置比较复杂,所以一般实现异地集群都是使用这种双活或者多活模型来实现。这种模型需要依赖Rabbitmq的Federation 插件,可以实现持续的可选的AMQP数据通信,使部分的队列消息复制共享,配置和应用也非常简单。多套集群之前利用AMQP实现数据复制的机制。
Fedration是RabbitMq异步消息通信的插件,一般情况下我们都只配置两个集群中两个单点队列之间的复制,每个集群内部自己会完成多节点的同步(镜像队列来完成)。他是cluster 或 Brokers之前传输消息的高性能插件。
使用Federation要安装:
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
注: 当你在一个cluster中使用federation插件时,所有在集群中的nodes都需要安装federation。
二、Rabbit mq关键配置参数
tpc_listerners 设置rabbitmq 的监听端口。默认5672.
disk_free_limit 磁盘低水位线,若磁盘空间低于指定值则会自己停止接收数据,默认为{mem_relation,1.0},即与内存相关联1:1
vm_memory_high_watermark 设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
集群节点模式:Disk为磁盘模式存储 / Ram为内存模式存储。
hipe_compile 将部分rabbitmq代码用High Performance Erlang compiler 编译,可提升性能,该参数是实验性,若出现 erlang vm segfaults ,应关掉。
force_fine_statistics 该参数以属于rabbitmq_management,若为true则进行精细的统计,会影响性能。
配置文件位于:/etc/rabbitmq 目录下(自己创建)
环境变量配置文件 : rabbitmq-env.con
配置信息配置文件:rabbitmq.config (也可以不创建和配置,修改)
rabbitmq-env.conf关键参数配置:
RABBITMQ_NODE_IP_ADDRESS=本机IP地址
RABBITMQ_NODE_PORT=5672
RABBITMQ_LOG_BASE=/var/lib/rabbitmq/log
RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq/mnesia 数据存储位置
详细配置参见:http://www.rabbitmq.com/configure.html