RabbitMQ可以通过三种方法部署分布式集群策略:Cluster集群、联盟(federation)和shovel。
一 Cluster集群
- 通过连接多个队列服务器节点组成的队列服务器集群。
- 服务器节点之间通信要借助于Erlang的消息传输,要求集群中所有节点必须有相同的Erlang Cookie
- 服务器节点之间网络必须是可靠的,且运行相同版本的RabbitMQ和Erlang。
- 服务器节点之间共享虚拟主机、交换机、用户信息和权限信息。队列可能位于单个节点或镜像到多个节点。连接到任意节点的客户端能够看到集群中所有队列,即使该队列不位于连接节点上。
- 不支持跨网段,用于同一个网段内的局域网
通常可以使用Cluster集群来提高队列可靠性和吞吐量
Cluster集群常用配置方式
至少包含一个磁盘服务器节点节点,N个内存节点
集群中有两种节点:
1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)
2 磁盘节点:保存状态到内存和磁盘。
内存节点队列服务器数据保存在内存,宕机会丢失未读取的的数据。内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。
磁盘节点队列服务器数据保存在硬盘,宕机不会丢失未读取的消息
二 联盟(federation)集群
联盟模式允许单台服务器上的交换机或队列接收到另一台服务器上交换机或队列的消息,可以是单独机器或集群。
- 服务器节点之间通过AMQP协议通信,节点不必有相同的Erlang Cookie。
- 服务器节点之间可运行不同版本RabbitMQ和Erlang
- 可以应用于广域网。
通常使用*联盟模式连接internet上的中间服务器,用作订阅分发消息或工作队列。
三 Shovel
shovel连接方式与联盟(federation)的连接方式类似,但它工作在更低层次。shovel接受队列上的消息,转发到另一台服务器上的交换机。
shovel和联盟类似,但它比联盟提供更多控制。
参考:
Distributed RabbitMQ brokers