Вопрос или проблема
Текущая настройка заключается в том, что несколько сервисов размещены на сервере с 4 совместимыми ЦП и 8 ГБ оперативной памяти. Все сервисы являются контейнерами Docker и не требуют большого количества ресурсов ЦП, но, по крайней мере, этого достаточно. Traefik настроен на том же сервере и используется в качестве обратного прокси, а также обрабатывает SSL-сертификат. Также на той же машине работает сервер RabbitMQ.
Для базы данных (MySql) настроен второй сервер, на котором не работают другие сервисы. Балансировщика нагрузки нет, и на данный момент нет резервного копирования для базы данных.
Я хочу обновить систему, чтобы обеспечить некоторую избыточность, и мне немного неясно, какой будет хороший поток. В настоящее время, я думаю, это хорошие варианты:
Балансировщик нагрузки (обрабатывает SSL) => 2 идентичных серверов vCPU с контейнеризованными сервисами => Балансировщик нагрузки => 2 сервера для MySql, настроенные в качестве основного <-> основного
Или что-то подобное, но, например, на Digital Ocean с управляемым сервером MySql с резервным копированием, так что нет необходимости во втором балансировщике нагрузки.
Другой вариант – использовать Docker Swarm вместо балансировщика нагрузки спереди. То есть настроить два сервера, один инициализирует кластер, другой присоединяется. Развертывание сервиса как на управляющем, так и на рабочем узле. И затем снова два сервера для резервной базы данных и, возможно, балансировщик нагрузки перед базой данных.
Или, может быть, иметь небольшие инстансы для сервисов вместо одного большого, чтобы размещать несколько сервисов. Но это выглядит сложнее в обслуживании.
Все машины настроены в одной частной сети, чтобы они могли взаимодействовать друг с другом.
У меня нет времени, чтобы изучать и углубляться в Kubernetes, и количество сервисов можно поддерживать вручную. Однако из-за множества возможностей для размещения такой экосистемы я не уверен, что будет лучшим или очень хорошим вариантом.
На данный момент я думаю, что размещение на Digital Ocean (или подобном, например, Linode) с 4 серверами и управляемой базой данных в целом (1 маленький для Traefik, 2 немного больше для всех сервисов, 1 для RabbitMQ) с балансировщиком нагрузки выглядит как хороший выбор. Таким образом, балансировщик нагрузки провайдера обрабатывает сертификат, и Traefik можно настроить на обеих системах без SSL и без необходимости делить пространство для сертификатов.
Нагрузка на сервисы не очень высокая. Некоторые получают REST-запросы, другие подписаны на RabbitMQ, выполняют некоторые вычисления или обрабатывают изображения (создание миниатюр) и читают/пишут в базу данных. В пиковые часы предполагается, что будет получено не более 50 вызовов в секунду.
Слишком много вариантов, и, вероятно, есть еще много, о которых я никогда не слышал.
Буду признателен за любые советы по этому поводу или, возможно, за руководство, если я на правильном или неправильном пути.
Ответ или решение
Установка сервера и развертывание приложений с базой данных: Пошаговое руководство
Введение
Создание надежной и масштабируемой архитектуры для развертывания приложений и баз данных может быть сложной задачей, особенно когда на кону стоит необходимость в отказоустойчивости и высокой доступности. Вы уже имеете базовую настройку, успешно работающую с Docker, и теперь стоит рассмотреть возможности для улучшения.
Общий обзор текущей архитектуры
На текущий момент у вас имеется один сервер с 4 виртуальными процессорами и 8 ГБ оперативной памяти, на котором хостятся несколько Docker-контейнеров, включая Traefik как обратный прокси и RabbitMQ. База данных MySQL развернута на отдельном сервере. Это уже хороший старт, но чтобы обеспечить более высокую надежность и масштабируемость, следует рассмотреть несколько важных аспектов.
Предложения по улучшению архитектуры
-
Внедрение балансировщика нагрузки
-
Использование балансировщика нагрузки на уровне приложения или сети — это подход, который стоит рассмотреть в первую очередь. Вы можете установить балансировщик нагрузки, который будет обрабатывать SSL-сертификаты и обеспечивать распределение трафика между двумя идентичными серверами с Docker-контейнерами. Таким образом, нагрузка будет более равномерно распределена, а система станет более устойчивой к сбоям.
-
Схема архитектуры:
Балансировщик нагрузки (обработка SSL) ⇨ 2 сервера с Docker-контейнерами (идентичные) ⇨ Балансировщик нагрузки (для приложений) ⇨ 2 сервера MySQL (настроенные в режиме мастер-майстер)
-
-
Отказоустойчивое хранилище данных
-
Разработка системы с двумя серверами для MySQL, которые могут работать в режиме репликации, добавит уровень отказоустойчивости. Настройка репликации "мастер-майстер" позволяет обеим базам данных обрабатывать записи, обеспечивая при этом синхронизацию данных.
-
Рассмотрите возможность использования управляемых баз данных, таких как Digital Ocean Managed Databases, которые предоставляют автоматическое создание резервных копий и восстановление, а также упрощают управление.
-
-
Docker Swarm как альтернатива
-
Если вы рассматриваете использование Docker Swarm, это тоже разумный выбор. Вы можете развернуть два сервера (один в качестве управляющего узла и один как рабочий), которые позволят вам управлять кластерами контейнеров более удобно, обеспечивая при этом автоматическое масштабирование и управление состоянием контейнеров.
-
Также вы можете использовать встроенные механизмы обслуживания и обновления без простоя в приложении.
-
-
Использование небольших инстансов для приложений
- Хотя это может показаться сложнее в обслуживании, раздельное развертывание сервисов на меньших инстансах можно рассмотреть. Это улучшает изоляцию и позволяет лучше контролировать ресурсы, однако требует более тщательного управления.
Целенаправленная рекомендация
Учитывая вашу структуру и требования, следующим оптимальным шагом будет переход на платформу вроде Digital Ocean или Linode с четырьмя серверами. Рекомендуется следующее распределение ресурсов:
- Один сервер для Traefik.
- Два сервера для Docker-контейнеров с вашими приложениями.
- Один сервер для RabbitMQ.
- Используйте управляемую базу данных с автоматическим увеличением ресурсов и механизмами отказоустойчивости.
Заключение
Вы на правильном пути к созданию более надежной и масштабируемой архитектуры. Применение балансировщика нагрузки и отказоустойчивых механизмов для базы данных создаст необходимый уровень надежности и обеспечения. Однако все они требуют тщательной настройки и анализа текущих потребностей и ожиданий от системы. Выбор платформы и правильной архитектуры позволит вам избежать многих проблем в будущем и упростит обслуживание систем.