Вопрос или проблема
Какое решение FOSS обеспечивает высокую доступность для состоящих приложений Docker между географически распределенными дата-центрами?
- ОС: CentOS 7
- FOSS: без контракта на поддержку
- Специфические требования: HA/резервирование состоящих контейнеров Docker (mongodb/postgres) между дата-центрами.
Для баз данных это зависит от базы данных/случая использования:
Postgres: Postgres BDR с HAProxy
MongoDB: Резервные наборы и измените URI API на mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test
Хотя MongoDB можно использовать с HAProxy, внутреннюю систему резервирования MongoDB нужно отключить, и, вероятно, будет проще просто изменить URI, как указано выше.
Нативную функциональность репликации/резервирования необходимо использовать для базы данных и иногда проксировать для нее.
Для других постоянных томов Docker, вероятно, будет достаточно DRBD.
Ответ или решение
Для обеспечения высокой доступности (HA) состояний приложений на базе Docker между географически удаленными дата-центрами можно использовать ряд свободно распространяемых программных решений (FOSS), специально адаптированных для работы с различными базами данных, такими как PostgreSQL и MongoDB. Ниже приведены рекомендации по каждому из сценариев.
PostgreSQL
- Postgres BDR (Bi-Directional Replication):
- BDR — это решение для репликации, позволяющее организовать высокую доступность и синхронизацию данных между несколькими экземплярами PostgreSQL в разных дата-центрах. Оно поддерживает двустороннюю репликацию, что позволяет записывать данные на любом из конечных узлов и синхронизировать изменения.
- Установите HAProxy перед BDR для распределения нагрузки и предоставления балансировки между экземплярами баз данных. HAProxy будет управлять запросами и перенаправлять их на доступные узлы в случае сбоя одного из них.
MongoDB
- Replica Sets:
- MongoDB обеспечивает встроенные механизмы репликации и высокой доступности через Replica Sets. Вам необходимо создать Replica Set, состоящий из нескольких членов (узлов), распределенных по разным дата-центрам. Один из узлов будет являться основным, остальные — вторичными.
- Для обеспечения работы с репликацией через несколько узлов используйте модифицированный URI для подключения, например:
mongodb://db1.example.net:27017,db2.example.net:27017/?replicaSet=myReplicaSet
- Обратите внимание, что если вы решите использовать HAProxy с MongoDB, то нужно будет отключить внутреннюю систему аварийного переключения MongoDB, что может внести дополнительные сложности в конфигурацию.
Обработка постоянных Docker-объемов
- DRBD (Distributed Replicated Block Device):
- Для других постоянных Docker-объемов может быть использован DRBD. Это решение создает зеркала уровень блоков и поддерживает репликацию данных между узлами. Настройка DRBD обеспечит автоматическое переключение на резервное копирование в случае сбоя основного узла.
- Рассмотрите использование DRBD как часть уровня хранения для обеспечения надежности и доступности дисковых ресурсов, используемых вашими приложениями.
Заключение
При проектировании решения для высокой доступности между удалёнными дата-центрами важно учитывать характеристики конкретного приложения и его требования к устойчивости. Настройка BDR для PostgreSQL и Replica Sets для MongoDB в сочетании с использованием HAProxy и DRBD создаст надежный и устойчивый кластер для поддержки ваших stateful Docker-приложений. Не забывайте также о регулярном мониторинге и тестировании механизма переключения, чтобы гарантировать безотказную работу вашей инфраструктуры.