集群中的另一个节点关闭时,RabbitMQ应用程序停止

集群中的另一个节点关闭时,RabbitMQ应用程序停止,rabbitmq,kubernetes,rabbitmqctl,Rabbitmq,Kubernetes,Rabbitmqctl,我是RabbitMQ新手,在处理RabbitMQ集群时遇到问题 拓扑结构如下所示: 一开始,每个人都很好。RabbitMQ节点1和RabbitMQ节点2位于集群中。 它们由一个名为autocluster的RabbitMQ插件互连 然后我通过kubectl delete-pod-rabbitmq-1删除pod-rabbitmq-1。我发现node1中的RabbitMQ应用程序已停止。我不明白为什么RabbittoMQ在检测到另一个节点故障时会停止应用程序。这没有道理。这种行为是由RabbitMQ

我是RabbitMQ新手,在处理RabbitMQ集群时遇到问题

拓扑结构如下所示:

一开始,每个人都很好。RabbitMQ节点1和RabbitMQ节点2位于集群中。 它们由一个名为autocluster的RabbitMQ插件互连

然后我通过
kubectl delete-pod-rabbitmq-1
删除pod-rabbitmq-1。我发现node1中的RabbitMQ应用程序已停止。我不明白为什么RabbittoMQ在检测到另一个节点故障时会停止应用程序。这没有道理。这种行为是由RabbitMQ还是autocluster设计的?你能启发我吗

我的配置如下:

[
  {rabbit, [
    {tcp_listen_options, [
                          {backlog,       128},
                          {nodelay,       true},
                          {linger,        {true,0}},
                          {exit_on_close, false},
                          {sndbuf,        12000},
                          {recbuf,        12000}
                         ]},
    {loopback_users, [<<"guest">>]},
    {log_levels,[{autocluster, debug}, {connection, debug}]},
    {cluster_partition_handling, pause_minority},
    {vm_memory_high_watermark, {absolute, "3276MiB"}}
  ]},

  {rabbitmq_management, [
    {load_definitions, "/etc/rabbitmq/rabbitmq-definitions.json"}
  ]},

  {autocluster, [
    {dummy_param_without_comma, true},
    {autocluster_log_level, debug},
    {backend, etcd},
    {autocluster_failure, ignore},
    {cleanup_interval, 30},
    {cluster_cleanup, false},
    {cleanup_warn_only, false},
    {etcd_ttl, 30},
    {etcd_scheme, http},
    {etcd_host, "etcd.kube-system.svc.cluster.local"},
    {etcd_port, 2379}
   ]}
]
[
{兔子[
{tcp_侦听_选项[
{backlog,128},
{nodelay,对},
{linger,{true,0}},
{exit_on_close,false},
{sndbuf,12000},
{recbuf,12000}
]},
{环回_用户,[]},
{log_levels,[{autocluster,debug},{connection,debug}]},
{集群\分区\处理,暂停\少数},
{vm\内存\高\U水印,{absolute,“3276MiB”}
]},
{拉比特大学管理层[
{load_definitions,“/etc/rabbitmq/rabbitmq definitions.json”}
]},
{自动群集[
{dummy_param_,不带逗号,true},
{autocluster_log_level,debug},
{后端,etcd},
{自动群集_失败,忽略},
{u区间,30},
{cluster_cleanup,false},
{cleanup\u warn\u only,false},
{etcd_ttl,30},
{etcd_方案,http},
{etcd_host,“etcd.kube system.svc.cluster.local”},
{etcd_港,2379}
]}
]

在我的例子中,x-ha-policy已启用。

您将
集群分区处理设置为
暂停
。每两个节点中就有一个不是大多数节点,因此集群会按配置停止。您必须添加一个额外的节点,或者将
集群分区处理设置为
忽略

从:

在暂停少数模式下,RabbitMQ将自动暂停群集节点 决定自己属于少数群体(即更少或相等 超过总节点数的一半)后,看到其他节点下降。 因此,它从 CAP定理。这可确保在网络分区的情况下 单个分区中的大多数节点将继续运行。这个 少数节点将在分区启动后立即暂停,并将 当分区结束时重新开始


如果您有能力升级,我发现在kubernetes上构建集群时,使用rabbitmq 3.7+而不是autocluster要容易得多。@lang2谢谢您的建议,我会尝试一下