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

时间:2018-01-28 13:59:57

标签: rabbitmq kubernetes rabbitmqctl

我是RabbitMQ的新手,处理RabbitMQ集群时遇到了麻烦。

拓扑结构如下:

enter image description here

起初,一切都好。 RabbitMQ node1和RabbitMQ node2位于一个集群中。 它们通过名为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}
   ]}
]

就我而言,启用了x-ha-policy。

1 个答案:

答案 0 :(得分:1)

您将cluster_partition_handling设置为pause_minority。两个节点中的一个不是大多数节点,因此群集按配置停止。您必须添加其他节点或将cluster_partition_handling设置为ignore

来自docs

  

在pause-minority模式下,RabbitMQ将自动暂停群集节点   它决定自己是少数(即更少或相等)   看到其他节点发生故障后,节点总数的一半以上。   因此,它选择了可用性的分区容差   CAP定理。这确保了在网络分区的情况下,在   大多数单个分区中的节点将继续运行。该   一旦分区启动,少数节点就会暂停,并且会   分区结束时再次启动。