Как Docker Swarm обрабатывает репликацию базы данных (PostgreSQL)?

Я изучаю режим Docker Swarm, и мне удалось создать Рой локально с помощью веб-приложения и базы данных PostgreSQL. Я могу масштабировать их и вижу, как Рой создает копии.

думаю, я понимаю, как Докер рой может баланс нагрузки обычных веб-серверов, но как это происходит из коробки с контейнерами баз данных?

вне контекста Роя обычно базы данных имеют своему для работы с репликацией, в виде плагины или расширенные продукты, такие как MySQL cluster. Другие базы данных, такие как Cassandra, имеют репликацию, встроенную непосредственно в их продукт. В контексте Роя нам все еще нужно полагаться на эти плагины и функции базы данных?

каков ожидаемый шаблон для обработки согласованности данных между репликами контейнера базы данных?

Я знаю, что это очень открытый вопрос, но документация Докера тоже очень открытая, и я ничего не могу найти конкретно к этому.

2 ответов


как он работает из коробки с контейнерами баз данных?

это не так.

есть довольно хорошее описание услуги здесь: как работают службы (выделено мной)

при развертывании службы в рое диспетчер Роя принимает определение службы как желаемое состояние для службы. затем он планирует службу на узлах в рое как одну или несколько реплик задачи.

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

каков ожидаемый шаблон для обработки согласованности данных между репликами базы данных контейнер?

настройка репликации данных на вас. Это, вероятно, такое же хорошее место, чтобы начать, как и любой


Docker swarm в настоящее время хорошо масштабируется для приложений без состояния. Для репликации базы данных необходимо полагаться на собственный механизм репликации каждой базы данных. Рой не мог управлять репликацией datatbase. Репликация на уровне тома или файловой системы может обеспечить защиту для одной базы данных экземпляра, но не знает о репликации/кластере базы данных.

для баз данных, таких как PostgreSQL, требуются дополнительные работы. Есть несколько опции:

  1. используйте локальный каталог хоста. вам нужно будет создать одну службу для каждой реплики и использовать constraint чтобы запланировать контейнер на один конкретный хост. Вам также понадобится пользовательский образ PostgreSQL docker для настройки репликации postgresql среди реплик. В то время как, когда один узел идет вниз, одна реплика PostgreSQL будет идти вниз. Вам нужно будет работать, чтобы поднять еще одну копию. см. crunchydata пример.

  2. используйте плагин громкости, например flocker, Рекс-Рэй. вам все равно нужно будет создать одну службу для каждой реплики и привязать один том к одной службе. Вам нужно создать все службы в одной и той же сети наложения и настроить реплики PostgreSQL для взаимодействия друг с другом через dns-имя (имя службы docker реплики). Вам все равно нужно будет настроить репликацию postgresql среди точных копий.