滚动升级后 RabbitMQ 保留了太多的队列镜像
RabbitMQ keeps too many queue mirrors after rolling upgrade
我们最近通过滚动升级将我们的 RabbitMQ 集群升级到最新版本(一个接一个地删除节点,升级它,然后将它添加回具有较新版本的集群)。
大致来说,我们是这样进行的:
# Put host into maintenance mode
rabbitmq-upgrade drain
# Install new rabbitmq version
# Re-join cluster
rabbitmqctl join_cluster rabbit@rabbit01
关于滚动升级,我们故意没有在这里包含所有细节,因为这个过程不是问题所在。问题如下:我们想确保队列领导者副本之后再次均匀分布。所以我们做了:
# Rebalance queues
rabbitmq-queues rebalance "all" --vhost-pattern ".*" --queue-pattern ".*"
但是现在我们遇到了一些队列的镜像太多的情况!我们正在使用具有以下策略的经典队列镜像:
但是下图显示有些队列有+2个镜像。通常这应该只说明 +1.
当然你可以说这没什么不好。但是由于我们使用自动检查来确保每个队列都存在正确数量的镜像,因此这些测试现在失败了。我们正在寻找一种方法让RabbitMQ再次清理这种情况,以便只创建并继续配置数量的镜像。
可以将新策略应用于队列,其值与旧策略相同,但具有更高的优先级和不同的名称。当政策发生变化时,RabbitMQ 将应用正确的值,并且太多的镜像将消失。在您的示例中,带有 rabbitmqctl 的命令如下所示:
rabbitmqctl set_policy --vhost customers --priority 1 new-tmp-policy "^ha.sample_queue_" '{"ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic", "queue-master-locator": "min-masters", "queue-mode": "lazy"}'
这会将 sample_queues 的策略更改为“new-tmp-policy”,镜像将消失。现在只需删除“new-tmp-policy”,旧策略将再次应用于 sample_queues.
我们最近通过滚动升级将我们的 RabbitMQ 集群升级到最新版本(一个接一个地删除节点,升级它,然后将它添加回具有较新版本的集群)。
大致来说,我们是这样进行的:
# Put host into maintenance mode
rabbitmq-upgrade drain
# Install new rabbitmq version
# Re-join cluster
rabbitmqctl join_cluster rabbit@rabbit01
关于滚动升级,我们故意没有在这里包含所有细节,因为这个过程不是问题所在。问题如下:我们想确保队列领导者副本之后再次均匀分布。所以我们做了:
# Rebalance queues
rabbitmq-queues rebalance "all" --vhost-pattern ".*" --queue-pattern ".*"
但是现在我们遇到了一些队列的镜像太多的情况!我们正在使用具有以下策略的经典队列镜像:
但是下图显示有些队列有+2个镜像。通常这应该只说明 +1.
当然你可以说这没什么不好。但是由于我们使用自动检查来确保每个队列都存在正确数量的镜像,因此这些测试现在失败了。我们正在寻找一种方法让RabbitMQ再次清理这种情况,以便只创建并继续配置数量的镜像。
可以将新策略应用于队列,其值与旧策略相同,但具有更高的优先级和不同的名称。当政策发生变化时,RabbitMQ 将应用正确的值,并且太多的镜像将消失。在您的示例中,带有 rabbitmqctl 的命令如下所示:
rabbitmqctl set_policy --vhost customers --priority 1 new-tmp-policy "^ha.sample_queue_" '{"ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic", "queue-master-locator": "min-masters", "queue-mode": "lazy"}'
这会将 sample_queues 的策略更改为“new-tmp-policy”,镜像将消失。现在只需删除“new-tmp-policy”,旧策略将再次应用于 sample_queues.