如果您在集群中运行RabbitMQ,则集群不太可能会被分区 (集群的一部分失去与其余部分的连接)。 上面的链接页面介绍了显示状态和配置行为的基本命令。 当发生分区时,您首先希望得到通知,然后再解决它。
RabbitMQ实际上使用cluster_partition_handling
配置自动处理第二个。 它具有三个值:ignore,pause_minority和autoheal。 上面链接的分区指南也对此进行了说明(“我应该选择哪种模式?”)。 请注意,无论您选择什么,都遇到问题,必须恢复连接。 例如,在前一讲的多可用区设置中,最好使用pause_minority然后手动重新连接。
幸运的是,检测分区非常简单。 如果没有分区,那么status命令将有一个空的“ partitions”元素,并且有一个非空的partitions元素,或者如果有分区,则根本没有这样的元素。 因此,此行进行检测:
clusterOK=$(sudo rabbitmqctl cluster_status | grep "{partitions,\[\]}" | wc -l)
例如,您可能希望将该脚本安排为每分钟运行一次。 处理结果取决于您使用的工具(Nagios,CloudWatch等)。 对于Nagios ,实际上有一个现成的插件 。 如果是AWS CloudWatch,则可以执行以下操作:
if [ "$clusterOK" -eq "0" ]; thenecho "RabbitMQ cluster is partitioned"aws cloudwatch put-metric-data --metric-name $METRIC_NAME --namespace $NAMESPACE --value 1 --dimensions Stack=$STACKNAME --region $REGION
elseaws cloudwatch put-metric-data --metric-name $METRIC_NAME --namespace $NAMESPACE --value 0 --dimensions Stack=$STACKNAME --region $REGION
fi
发生分区时,重要的事情会得到通知。 此后,它取决于特定的应用程序,问题,队列的配置(耐用,镜像等)。
翻译自: https://www.javacodegeeks.com/2015/04/getting-notified-about-rabbitmq-cluster-partitioning.html