Приложение RabbitMQ останавливается, когда другой узел в кластере выключается

Я новичок в RabbitMQ, и у меня возникают проблемы при работе с кластером RabbitMQ.

Топология такая:

введите здесь описание изображения

Сначала все в порядке. RabbitMQ node1 и RabbitMQ node2 находятся в кластере. Они связаны между собой подключаемым модулем RabbitMQ, называемым автокластером.

Затем я удаляю pod rabbitmq-1 с помощью kubectl delete pod rabbitmq-1. И я обнаружил, что приложение RabbitMQ в node1 остановлено. Я не понимаю, почему RabbittoMQ остановит приложение, если обнаружит отказ другого узла. Это не имеет смысла. Это поведение разработано RabbitMQ или автокластером? Можете ли вы просветить меня?

Мой конфиг такой:

[
  {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 включена.


person ruanhao    schedule 28.01.2018    source источник
comment
Если вы можете позволить себе обновление, я обнаружил, что использовать rabbitmq 3.7+ вместо автокластера намного проще при создании кластера на kubernetes.   -  person lang2    schedule 29.01.2018
comment
@lang2 спасибо за совет, попробую   -  person ruanhao    schedule 29.01.2018


Ответы (1)


Вы установили cluster_partition_handling в pause_minority. Один из двух узлов не является большинством, поэтому кластер останавливается в соответствии с настройками. Вам нужно либо добавить дополнительный узел, либо установить cluster_partition_handling на ignore.

Из документов:

В режиме паузы меньшинства RabbitMQ будет автоматически приостанавливать узлы кластера, которые определяют, что они находятся в меньшинстве (т.е. меньше или равно половине общего числа узлов), после того, как другие узлы выйдут из строя. Поэтому он выбирает устойчивость к разделению, а не доступность, исходя из теоремы CAP. Это гарантирует, что в случае сетевого раздела не более чем узлы в одном разделе будут продолжать работать. Узлы меньшинства приостановятся, как только начнется раздел, и снова запустятся, когда раздел закончится.

person svenwltr    schedule 28.01.2018