RabbitMq镜像策略模式

镜像策略

ha-mode       ha-        params   说明
exactly count 集群中队列副本的数量(主队列加上镜像)。count值为1表示一个副本:只有主节点。如果主节点不可用,则其行为取决于队列是否持久化。count值为2表示两个副本:一个队列主队列和一个队列镜像。换句话说:“镜像数=节点数-1”。如果运行队列主服务器的节点变得不可用,队列镜像将根据配置的镜像提升策略自动提升到主服务器。如果集群中的可用节点数少于count,则将队列镜像到所有节点。如果集群中有多个计数节点,并且一个包含镜像的节点宕机,那么将在另一个节点上创建一个新镜像。使用’ exactly ‘模式和’ ha-promot-on-shutdown ': ’ always '可能是危险的,因为队列可以跨集群迁移,并在停机时变得不同步。
all 不设置 表示在集群中所有的节点上进行镜像。这个设置非常保守。建议设置的副本值为大多数节点N / 2 + 1。镜像到所有节点会给所有集群节点带来额外的负担,包括网络I/O、磁盘I/O和磁盘空间的使用。
nodes 节点名称 队列被镜像到节点名中列出的节点。节点名是在rabbitmqctl cluster_status中出现的Erlang节点名;它们的形式通常是“rabbit@hostname”。如果这些节点名中有任何一个不是集群的一部分,则不构成错误。如果在声明队列时列表中的节点都不在线,则将在声明客户机连接的节点上创建队列。

 命令行设置镜像参数示例

rabbitmqctl set_policy Name [-p Vhost]  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
priority:可选参数,policy的优先级

 示例

//对集群中的所有节点进行镜像集群
rabbitmqctl -p ylhost set_policy ha-all "^" '{"ha-mode":"all"}'

//指定个数的节点进行镜像
rabbitmqctl -p ylhost set_policy ha-nodes '^' '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

//指定节点名称进行镜像,这里ha-params 是一个数组
rabbitmqctl -p ylhost set_policy ha-nodes '^mirror.' '{"ha-mode":"nodes","ha-params":["rabbit@VM-8-12-centos","rabbit2@VM-8-12-centos"],"ha-sync-mode":"automatic"}'

 

新镜像同步策略     

ha-sync-mode

说明

 

            manual

这是默认模式。新队列镜像将不接收现有消息,它只接收新消息。一旦使用者耗尽了仅存在于主服务器上的消息,新的队列镜像将随着时间的推移成为主服务器的精确副本。如果主队列在所有未同步的消息耗尽之前失败,则这些消息将丢失。您可以手动完全同步队列,详情请参阅未同步的镜像部分。
automatic

当新镜像加入时,队列将自动同步。值得重申的是,队列同步是一个阻塞操作。如果队列很小,或者您在RabbitMQ节点和ha-sync-batch-size之间有一个快速的网络,那么这是一个很好的选择。

 

从节点晋升策略

场景:镜像队列主节点出现故障时,最老的从节点会被提升为新的主节点。如果新提升为主节点的这个副本与原有的主节点并未完成数据的同步,那么就会出现数据的丢失,而实际应用中,出现数据丢失可能会导致出现严重后果。

rabbitmq 提供了 ha-promote-on-shutdownha-promote-on-failure 两个参数让用户决策是保证队列的可用性,还是保证队列的一致性;两个参数分别控制正常关闭、异常故障情况下从节点是否提升为主节点,其可设置的值为 when-synced 和 always

ha-promote-on-shutdown

/ha-promote-on-failure

说明
when-synced 从节点与主节点完成数据同步,才会被提升为主节点
always 无论什么情况下从节点都将被提升为主节点

 

主队列选择策略

RabbitMQ中的每个队列都有一个主队列。该节点称为队列主服务器。所有队列操作首先经过主队列,然后复制到镜像。这对于保证消息的FIFO(先进先出)排序是必要的。

通过在策略中设置 queue-master-locator 键的方法可以定义主队列选择策略,这是常用的方法。

queue-master-locator 说明
min-masters 选择承载最小绑定主机数量的节点
client-local 选择客户机声明队列连接到的节点
posted @ 2023-06-01 18:28  风里密码1900  阅读(147)  评论(0编辑  收藏  举报