Сбой кластера Rabbitmq при создании очередей - PullRequest
0 голосов
/ 05 мая 2020

Здравствуйте, у меня есть вопрос, который после того, как я осмотрелся около двух дней, я не смог решить, поэтому я напишу его здесь как можно яснее, чтобы он мог помочь и другим.

Сценарий такой :

  1. У нас есть приложение, которое будет обрабатывать около 200 тыс. Устройств по протоколу amqp с использованием кластера Rabbitmq.
  2. Мы думали о наличии 1 Exchange с 200 тыс. Очередей и примерно 6 «ключами маршрутизации» каждая для устройств.
  3. Эти очереди должны быть устойчивыми и ленивыми, так как мы не хотим терять сообщения.
  4. Мы используем зеркальные узлы, поскольку нам нужна высокая доступность.

Тест:

  1. Я создал кластер из 5 узлов и репликации 2
    "definition": {
            "ha-mode": "exactly",
            "ha-params": 2,
            "ha-sync-mode": "automatic",
            "ha-sync-batch-size": 1
          }
Я также создал 50k длительных, ленивых очередей с ключами маршрутизации.
def create_one_queue(queue_name, threadName, channel):
    channel.queue_declare(queue=queue_name, durable=True, arguments={'x-queue-mode': 'lazy'})
    for bind in BINDINGS:
        channel.queue_bind(exchange=EXCHANGE, queue=queue_name, routing_key=bind.format(queue_name))
    print("[{}]Created Queue {}".format(threadName, queue_name))

def create_queues(threadName, base):
    channel = get_channel()
    for i in range(0, 1000):
        try:
            queue_name = str(i + base)
            create_one_queue(queue_name, threadName, channel)
        except Exception as e:
            print(e)

enter image description here 3. When I tried to keep growing and arrive to 200k nodes start to crash without running out of resources.

Links

I already took a lok to the followings posts:

https://www.rabbitmq.com/ha.html#ways -to-configure

https://www.cloudamqp.com/blog/2018-01-09-part3-rabbitmq-best-practice-for-high-availability.html

RabbitMQ - сколько очередей RabbitMQ может обрабатывать на одном сервере?

https://serverfault.com/questions/378165/rabbitmq-reasonable-performance-scale-expectations

http://rabbitmq.1065348.n5.nabble.com/How-many-queues-can-one-broker-support-td21539.html

https://www.quora.com/RabbitMQ/Can-rabbitMQ-or-zeroMQ-handle-1mil-queues

но я вижу противоречия (cloudamqp предлагает использовать несколько очередей, но в в других местах указано, что вы можете прибыть в 1 миллион очередей)

Вопросы

  1. Как возможно, что кластер начнет трещать sh, если у меня не заканчиваются ресурсы?
  2. Мой подход неверен?
  3. Есть какие-нибудь советы по улучшению конфигурации моего кластера?

Большое спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Хорошо, я отвечу на свой вопрос результатами своих исследований:

1) Поскольку я использовал Kubernetes и Helm для развертывания кластера, я создавал большую нагрузку на память в модулях, оставляя нет свободного места для сборщика мусора. https://www.rabbitmq.com/memory-use.html#queue -memory-usage-g c

Водяной знак с высокой памятью блокирует издателей и предотвращает постановку новых сообщений в очередь. Поскольку сборка мусора может удвоить объем памяти, используемый очередью, небезопасно устанавливать водяной знак верхней памяти выше 0,5. По умолчанию водяной знак верхней памяти установлен на 0,4, поскольку это безопаснее, поскольку не вся память используется очередями. Это полностью зависит от рабочей нагрузки c, которая различается в разных развертываниях RabbitMQ.

2) Кажется, нормально.

3) Чтобы создать 200 тыс. Устойчивых и ленивых очередей, мне пришлось используйте кластер из 10 узлов, каждый с 8 виртуальными ЦП и 30 ГБ ОЗУ.

примечание: я буду обновлять этот ответ по мере настройки своего кластера.

...