一、使用限制
·TDMQ RabbitMQ 开源托管版只允许拥有3个或以上数量节点的集群开启“镜像队列”,主要是为了确保集群的高可用性和容错能力。
·在一个拥有3个或更多节点的集群中,镜像队列可以在多个节点上复制消息,既可以分担每个节点的负载,提高性能,又可以在某个节点发生故障时保证服务的正常运行。同时,这也提供了更多的灵活性,允许我们根据实际需求灵活配置镜像队列的参数。因此,这个限制是为了提供更稳定、更可靠的服务。
·TDMQ RabbitMQ Serverless 版暂不支持开启镜像队列。
二、默认镜像策略参数说明
开启镜像队列后,会在策略页签下生成一条默认镜像策略,你可以根据实际的业务场景和需求,进一步调整这些参数,也可以修改或者自定义新的镜像策略覆盖该条默认策略。
以下是消息队列 RabbitMQ 为用户提供的“默认镜像队列”策略参数详细说明:
| 参数名 | 配置参数 | 参数说明 |
| Name | pay-mirror-policy | 策略名称,用于标识和引用该策略。 |
| Pattern | .* | 策略的匹配模式,采用正则表达式语法。.表示匹配任意字符,*表示匹配前面的字符零次或多次,所以 .* 表示匹配任意名称的队列。 |
| Apply to | Queues | 策略的应用对象,设置为 Queues 表示策略应用于队列。 |
| Priority | 0 | 策略的优先级。如果一个队列匹配多个策略,那么优先级高的策略将会被优先应用,0 表示最低优先级。 |
| ha-mode | exactly | 镜像队列的复制模式。exactly:表示队列的消息会被复制到指定数量的节点。all:表示队列的消息会被复制到所有节点。nodes: 表示在指定的节点上进行镜像,节点名称通过镜像参数指定。选择 exactly 可以在保证可用性的同时,减少网络和存储的开销,提高性能。 |
| ha-params | 3 | 镜像队列的复制参数。当 ha-mode 设置为 exactly 时,这里需要设置复制的节点数量。默认设置为3(三副本),即使集群将来扩展到5个或7个节点,性能仍然可以保持在一个较好的水平,不建议再增加副本数。 |
| ha-promote-on-failure | always | 节点故障时的镜像队列提升策略。always 表示无论节点故障的原因如何,都会将镜像队列提升为主队列。when-synced 表示只有当节点故障后重新同步时,才会将镜像队列提升为主队列。默认设置为 always,以确保在任何故障情况下都能保持服务的可用性。 |
| ha-promote-on-shutdown | when-synced | 节点正常关闭时的镜像队列提升策略。always:表示无论节点关闭的原因如何,都会将镜像队列提升为主队列。when-synced:表示只有当节点关闭后重新同步时,才会将镜像队列提升为主队列。默认设置为 when-synced,以避免不必要的提升操作。 |
| ha-sync-mode | manual | 镜像队列的同步模式。automatic:表示在节点启动或重新连接到集群时,自动将镜像队列与主队列同步。manual:表示需要手动触发同步操作,将镜像队列与主队列同步。默认设置为 manual,以避免堆积消息时自动同步影响集群性能。 |
三、新建集群时开启镜像队列
新建集群时开启镜像队列:集群购买页 > 其他配置 > 开启镜像队列。开启后,会在名为 / 的默认 Vhost 的 基本信息 > 策略页面生成一条默认策略,该策略只对默认 Vhost 生效。
四、新建 Vhost 时开启镜像队列
新建 Vhost 时开启镜像队列:TDMQ RabbitMQ 版控制台 > 集群管理> Vhost > 新建 > 开启镜像队列。开启后,会在对应 Vhost 的 基本信息 > 策略页面生成一条默认策略,该策略只对相应的 Vhost 生效。
五、为已存在的 Vhost 开启镜像队列
如果已创建的 Vhost 没有开启镜像队列,可以通过为 Vhost 创建镜像策略来开启。
另外,在新建集群时,若开启了镜像队列,在控制台策略页签下默认会有一条策略,你可以删除,也可以通过新建新的镜像策略覆盖该条默认策略:
1. 登录 TDMQ RabbitMQ 版控制台。
2. 在左侧导航栏选择 集群管理 > Vhost,选择好地域后,单击目标 Vhost 的 ID,进入基本信息页面。
3. 单击策略 > 新建策略,填写策略基本信息。
基本设置:
| 参数 | 说明 |
| 当前 Vhost | 表示正在给哪个 Vhost 创建镜像策略 |
| 策略名称 | 填写策略名称,需符合命名规则:1-64个字符,只能包含数字、字母、“.”、“-”和“_”。 |
| 匹配模式 | 一个正则表达式,用来匹配相关的 Queue 或者 Exchange。常用匹配模式的正则表达式可参考:.*:将匹配该 Vhost 下的所有 Queue 或者 Exchange。^test.*:将匹配该 Vhost 下名称以“test”开头的所有 Queue 或者 Exchange。.*test.*:将匹配该 Vhost 下名称包含“test”的所有 Queue 或者 Exchange。.*test$:将匹配该 Vhost 下名称以“test”结尾的所有 Queue 或者 Exchange。 |
| 策略类型 | 选择 镜像策略。 |
| 应用范围 | 用来指定当前 Policy 生效的范围。镜像策略仅支持在 Classic Queues 中生效。 |
| 优先级 | 定义策略的优先级。可选范围:[0,255],如果有多个策略作用于同一个 Queue,那么优先级数字最大的那个 Policy 才会生效。 |
策略定义:
| 参数 | 说明 |
| 镜像模式 | 镜像队列的模式,有效值为 all/exactly/nodes。all:表示在集群中所有的节点上进行镜像。exactly: 表示在指定个数的节点上进行镜像,节点的个数由镜像参数指定。nodes: 表示在指定的节点上进行镜像,节点名称通过镜像参数指定。 |
| 镜像参数 | 镜像参数:表示消息将被同步到的节点。当镜像模式选择 all 时,该项不用填。如果将队列镜像到集群所有节点上,可能会导致集群承受不必要的网络及磁盘I/O流量。当镜像模式选择 exactly 时,镜像参数推荐选择 3,最多可以等于当前集群节点数,至少可以选择 1。可以在保证可用性的同时,减少网络和存储的开销,提高性能。当镜像模式选择 nodes 时,镜像参数可按照节点名称,选到具体哪些节点,推荐选择 3 个节点。 |
| 消息同步方式 | 镜像队列中消息的同步方式,可选 automatic 或者 manual。automatic:表示在节点启动或重新连接到集群时,自动将镜像队列与主队列同步。manual:表示需要手动触发同步操作,将镜像队列与主队列同步。默认设置为 manual,以避免堆积消息时自动同步影响集群性能。 |
| 主节点退出处理 | 当主节点优雅退出时,是否允许选举未同步的镜像为 master。 |
| 主节点故障处理 | 当主节点故障/失败时,是否允许选举未同步的镜像为 master。为保证可用性,建议保持为“允许选择所有镜像”。 |
4. 单击完成,完成策略创建,可以在策略列表看见已创建好的策略。