Nginx с сервером приложений балансировки нагрузки докера (php)

Я не нашел решения до сих пор, поэтому я спрашиваю здесь:

В этой ситуации я блокирую решение для:

Мы планируем архитектуру, которая содержит следующие компоненты

  1. Docker Container (автоматическая балансировка нагрузки, когда этого требует нагрузка) Сервер приложений, который обрабатывает входящие данные (импорт, внутреннее хранилище, веб-API)
  2. Сервер очереди
  3. Docker Container (автоматическая балансировка нагрузки, когда этого требует нагрузка) Приложение, которое обрабатывает каждый элемент в очереди и сохраняет его на сервере эластичного поиска и в базе данных MySQL (ES используется для запросов и вывода данных клиентам)
  4. Docker Container (автоматическая балансировка нагрузки, когда этого требует нагрузка) Приложение, которое обрабатывает сбор исходящих данных

У меня почти все полностью настроено. Единственное, для чего у меня нет решения, - это балансировка нагрузки на внешний интерфейс (Frontend Nginx Server). Это требуется только для сообщений до 1 и от 4. Их количество может варьироваться, поэтому Nginx должен знать, сколько существует контейнеров. Обработка сеанса работает (Redis Backend) (протестировано с балансировкой нагрузки на 8 серверах приложений и инструментом стресс-теста). Но я не имею ни малейшего представления о том, как обрабатывать связь между различными серверами приложений и Nginx. Если кто-нибудь может дать мне подсказку, как это настроить. Любой ключ к решению этой проблемы приветствуется.

Крис

1 ответ

opensvc предоставляет решение для этого https://docs.opensvc.com/latest/agent.configure.gobtw.html

на домашней странице есть демонстрация такого кластера

Почему я предлагаю это решение:

  • opensvc Для кластера можно настроить решение для управления частным DNS в рамках всего кластера. На основе PowerDNS кластер поддерживает записи DNS всех opensvc сервисы, развернутые в кластере. Как только появляется новый докер-контейнер, новый SRV запись появится в карте DNS.

  • в такой настройке, вы также должны развернуть cni+weave иметь частный растянутый сетевой ipam, работающий в кластере, для предоставления частного ip-адреса новым контейнерам.

  • opensvc завершите картину с развертыванием входного шлюза. С одной стороны он содержит общедоступный IP-адрес, к которому подключаются конечные пользователи приложения, а с другой стороны, он поддерживает список всех докер-контейнеров, фактически обслуживающих приложение.

  • Все эти вещи сделаны динамическими, добавив opensvc janitoring docker container, который прослушивает события кластера (например, "новый контейнер порожден") и автоматически настраивает входной шлюз, чтобы добавить еще один docker контейнер в бэкэнд.

Другие вопросы по тегам