默认的,集群中的队列以及队列内的消息仅存在于单个节点上,它并不像交换器和路由键那样存在于集群中的所有节点上。因此,集群中某个节点宕机,将导致该节点上的队列不可用,可以通过引入镜像队列机制来保证服务可用性。
镜像队列包含一个主节点(master)和若干从节点(slave)。所有对镜像队列的操作首先作用于主节点,包括发布消息、消费消息、确认消息等等,然后由主节点将结果传递给从节点。如果主节点由于某种原因失效,最老的slave将晋升为master,最老的指最先加入的slave。因此,引入镜像队列可以提高服务的可用性。
一、配置镜像队列
镜像队列主要通过添加Policy来配置。
rabbitmqctl [-p vhost] [–priority priority] [–apply-to apply-to] {name} {pattern} {definition}
对于配置镜像队列来说,definition包含三部分,ha-mode、ha-params和ha-sync-mode。
- ha-mode与ha-params搭配使用。ha-mode设置镜像队列的模式,取值为exactly、all、nodes。ha-params根据ha-mode的取值来设置。
(1)当ha-mode设置为exactly时,表示在指定个数的节点上进行镜像,具体个数有ha-params来指定。ha-params为1时,表示只有一个master;ha-params大于1时,表示有一个master和(ha-params - 1)个slave;ha-params大于集群中节点数量时,在全部节点上进行镜像;