http://www.rabbitmq.com/ha.html
对于持久化队列,如果创建此队列的磁盘节点down机,则此队列无法使用;
新建的queue可以运行(因为新建的queue会持久化到存活的磁盘节点上)

rabbitmqctl set_policy <-p vhost> <name> <pattern> <definition> <priority>
-
-p vhost
: 可选参数,针对指定vhost下的queue进行设置 -
name
: policy的名称 -
pattern
: queue的匹配模式(正则表达式) -
definition
:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
ha-mode
:指明镜像队列的模式,有效值为all
、exactly
、nodes
all
:表示在集群中所有的节点上进行镜像exactly
:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes
:表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params
:ha-mode模式需要用到的参数
ha-sync-mode
:进行队列中消息的同步方式,有效值为automatic和manual
automatic
:创建队列时会自动从master queue同步已存在的消息manual
:创建队列时只会同步新消息,不会同步已存在的消息
-
priority
:可选参数,policy的优先级
集群测试记录
设置镜像策略前:

为/ft_host设置镜像策略:
sudo rabbitmqctl set_policy -p /ft_host ha-2 "^queue\.ha\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
-p /ft_host
为虚拟主机/ft_host
设置策略ha-2
策略名称"^"
代表所有的队列都适应此策略,这里是一个正则表达式"ha-mode":"exactly"
模式为exactly
"ha-params":2
在两个节点上进行镜像"ha-sync-mode":"automatic"
自动同步已经存储的消息
设置镜像策略后

不论持久化队列还是非持久化队列,设置策略后,都会自动创建镜像
机器 | 节点类型 |
---|---|
VM-16-6-ubuntu | disc节点 |
VM-16-5-ubuntu | ram节点 |
VM-16-9-ubuntu | ram节点 |
queue、exchange为非持久化时(即durable=false)
当queue所在的节点down掉后,queue内未消费的消息将丢失,但不影响继续使用。
非queue所在的节点down掉后,不会丢失信息,也不影响使用。
网友评论