Nginx с сервером приложений балансировки нагрузки докера (php)
Я не нашел решения до сих пор, поэтому я спрашиваю здесь:
В этой ситуации я блокирую решение для:
Мы планируем архитектуру, которая содержит следующие компоненты
- Docker Container (автоматическая балансировка нагрузки, когда этого требует нагрузка) Сервер приложений, который обрабатывает входящие данные (импорт, внутреннее хранилище, веб-API)
- Сервер очереди
- Docker Container (автоматическая балансировка нагрузки, когда этого требует нагрузка) Приложение, которое обрабатывает каждый элемент в очереди и сохраняет его на сервере эластичного поиска и в базе данных MySQL (ES используется для запросов и вывода данных клиентам)
- 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 контейнер в бэкэнд.