文章目录
- 一、 基础知识汲取
- 1.1. 镜像集群简述
- 1.2. 策略参数说明
- 1.3. 策略案例
- 二、HA mode 同步方式
- 2.1. 参数说明
- 2.2. 案例
- 2.3. 命令终端形式
- 2.4. MQ管控台设置
- 2.5. 队列同步
- 2.5. 优缺点
- 三、Ha async mode 同步方式(推荐使用)
- 3.1. 参数说明
- 3.2. 案例
- 3.3. 命令终端形式
- 3.4. MQ管控台设置
- 四、ha-mode:nodes镜像到到集群中指定节点
- 4.1. 参数说明
- 4.2. 案例
- 4.3. 命令终端形式
- 4.4. MQ管控台设置
- 五、策略区配正则
- 5.1. 以LFY_开头的队列应用此策略
- 5.2. 以_LOG结尾的队列应用此策略
- 5.3. 第3种,以QUEUE_开头的队列应用此策略。但是指定同步的节点,是第2种 的演化形式
一、 基础知识汲取
1.1. 镜像集群简述
镜像集群模式是在RabbitMQ Cluster默认集群的基础上添加策略搭建完成的
RabbitMQ默认集群模式,并不包管队列的高可用性,尽管队列信息,交换机、绑定这些可以复制到集群里的任何一个节点,然则队列内容不会复制,固然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能守候重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,须要创建镜像队列。
跟普通集群模式不一样的是,在镜像集群模式下,你创建的 queue,无论元数据还是 queue 里的消息都会存在于多个实例上,就是说,每个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的全部数据的意思。然后每次你写消息到 queue 的时候,都会自动把消息同步到多个实例的 queue 上。
1.2. 策略参数说明
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]-p Vhost: 可选参数,针对指定vhost下的queue进行设置Name: policy的名称Pattern: queue的匹配模式(正则表达式)Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-modeha-mode:指明镜像队列的模式,有效值为 all/exactly/nodesall:表示在集群中所有的节点上进行镜像exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定ha-params:ha-mode模式需要用到的参数ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manualpriority:可选参数,policy的优先级请注意一个事实,镜像配置的pattern 采用的是正则表达式匹配,也就是说会匹配一组。
1.3. 策略案例
常见的3中设置:
#格式:rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
#第1种
rabbitmqctl set_policy policy3l "^" '{"ha-mode":"all"}'
#第2种
rabbitmqctl set_policy policy2 "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#第3种
rabbitmqctl set_policy -p "/" policy3 "^QUEUE" '{"ha-mode":"nodes","ha-params":["rabbit@mq-002","rabbit@mq-003"],"ha-sync-mode":"automatic"}'
二、HA mode 同步方式
2.1. 参数说明
One of all (mirror to all nodes in the cluster), exactly (mirror to a set number of nodes) or nodes (mirror to an explicit list of nodes). If you choose one of the latter two, you must also set ha-params.
HA mode的值共有三个
.all:镜像同步到集群队列的所有节点
.exactly:按个数同步到集群中的一个或多个节点
. nodes:具体的节点名称
如果选择后面两个选项的的值,还需要设置ha-params参数。
2.2. 案例
所有队列设置为镜像队列,即队列会被复制到集群各个节点,
各个集群节点交换机、队列、队列内容都保持一致。
2.3. 命令终端形式
rabbitmqctl set_policy policy3l "^" '{"ha-mode":"all"}'
2.4. MQ管控台设置
2.5. 队列同步
集群节点宕机或停电重启后,queue-1
队列需要手动同步
rabbitmqctl sync_queue queue-1
2.5. 优缺点
自动同步交换机队列,但是集群某节点宕机或者停电,都需要手动同步,有点麻烦,万一忘了怎么办呢?对吧
三、Ha async mode 同步方式(推荐使用)
3.1. 参数说明
这个需要详细说明的,默认的情况下。当节点断线后那么这个节点就已经是落后的版本,当我们再去启动节点的时候数据我们需要去手动的同步,这自然是不好的,做到自动化是最完美的,所以设置成automatic是最佳选择
新建策略ha-all,ha-mode: all 镜像到集群中所有的节点
Pattern: ^
Apply to :Exchanges and queues
ha-mode: all //应用于所有节点
ha-sync-mode:automatic
Priority 0
3.2. 案例
所有队列设置为镜像队列,即队列会被复制到集群各个节点,
各个集群节点交换机、队列、队列内容都保持一致。
3.3. 命令终端形式
rabbitmqctl set_policy policy2 "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
3.4. MQ管控台设置
ha-all应用效果
queue-1节点后的+2表示镜像到2个节点,因为ha-mode:all,共有集群共有三个节点,+2表示将队列镜像到另外两个节点
四、ha-mode:nodes镜像到到集群中指定节点
4.1. 参数说明
新建策略policy3,
Pattern: ^QUEUE_
Apply to :queues
Definition
ha-mode: nodes
ha-params: rabbit@mq-002
rabbit@mq-003
ha-sync-mode: automatic
Priority 0
4.2. 案例
所有队列设置为镜像队列,即队列会被复制到集群指定节点,
各个集群节点交换机、队列、队列内容都保持一致。
4.3. 命令终端形式
rabbitmqctl set_policy -p "/" policy3 "^QUEUE" '{"ha-mode":"nodes","ha-params":["rabbit@mq-002","rabbit@mq-003"],"ha-sync-mode":"automatic"}'