RabbitMQ配置镜像
队列通过策略来使能镜像。策略能在任何时刻改变;它有效创建一个非镜像队列,然后使它镜像到后面的节点(反之亦然)。非镜像队列和镜像队列之间是有区别的,前者缺乏额外的镜像基础设施,没有任何slave,因此会运行得更快。
为了使队列称为镜像,你将会创建一个策略来匹配队列,设置策略key ha-mode和 ha-params(可选)。下面表格说明这些key的选项:
ha-mode | Ha-params | 结果 |
all | (absent) | 队列镜像到集群内所有节点。当新节点加入集群时,队列将被镜像到那个节点。 |
exactly | count | 队列镜像到集群内指定数量的节点。如果集群内节点数少于此数,则队列镜像到集群内所有节点。如果集群内节点数多于此数,而且一个包含镜像的节点停止,则新的镜像将不会在另外一个节点上创建。(这阻止队列在集群内发生迁移。) |
nodes | node names | 队列镜像到指定节点。如果任何指定节点不在集群中,都不会产生错误。当队列声明时,如果没有任何指定节点在线,则队列会被创建在发起声明的客户端所连接的节点上。 |
无论什么时候,队列的HA策略发生改变,它将尽力保持其已经存在的镜像直到其符合新的策略
1、“nodes”策略和迁移master
需要注意的是设置和修改一个“nodes”策略将不会引起已经存在的master离开,尽管你让其离开。比如:如果一个队列在{A},并且你给它一个节点策略告知它在{B C},它将会在{A B C}。如果节点A那时失败或者停机了,那个节点上的镜像将不回来且队列将继续保持在{B C}。
2、一些例子
队列名称以“ha.”开头的队列,其策略镜像到集群内所有节点:
rabbitmqctl | rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' |
rabbitmqctl (Windows) | rabbitmqctl set_policy ha-all "^ha\." "{""ha-mode"":""all""}" |
HTTP API | PUT /api/policies/%2f/ha-all {"pattern":"^ha\.", "definition":{"ha-mode":"all"}} |
Web UI | · Navigate to Admin > Policies > Add / update a policy. · Enter "ha-all" next to Name, "^ha\." next to Pattern, and "ha-mode" = "all" in the first line next to Policy. · Click Add policy. |
队列名称以“two.”开头的队列,其策略镜像到集群内任何两个节点:
rabbitmqctl | rabbitmqctl set_policy ha-two "^two\." \ '{"ha-mode":"exactly","ha-params":2}' |
rabbitmqctl (Windows) | rabbitmqctl set_policy ha-two "^two\." ^ "{""ha-mode"":""exactly"",""ha-params"":2}" |
HTTP API | PUT /api/policies/%2f/ha-two {"pattern":"^two\.", "definition":{"ha-mode":"exactly", "ha-params":2}} |
Web UI | · Navigate to Admin > Policies > Add / update a policy. · Enter "ha-two" next to Name and "^two\." next to Pattern. · Enter "ha-mode" = "exactly" in the first line next to Policy, then "ha-params" = 2 in the second line, and set the type on the second line to "Number". · Click Add policy. |