С введением нового режима «swarm» с Docker 1.12 мы пытаемся перенести наше приложение на контейнеры и использовать группы оркестровки роя &.Docker 1.12: Несколько реплик, одна база данных
Для нашего приложения требуется запуск некоторых исходных сценариев базы данных. Мы не упаковываем базу данных внутри нашего докционированного приложения, чтобы она могла следовать безгражданной микросервисной архитектуре, и несколько контейнеров в конечном итоге будут разговаривать с одним экземпляром базы данных (на данный момент).
При создании сервиса мы не можем использовать --replicas
с командой create service
, поскольку несколько экземпляров будут пытаться создавать таблицы в одной базе данных и терпеть неудачу. Хотя наши скрипты будут проверять, была ли база данных настроена и пропустить создание, но поскольку все контейнеры запускаются одновременно, их нельзя использовать.
Не удалось найти wait-for вид механизма, который мы могли бы использовать с докерами для этой проблемы. Было бы хорошо, если бы мы могли только запустить второй контейнер, когда первый создал базу данных (и разоблачил порты ), но как мы можем настроить межконтейнерную связь для этого?
В качестве альтернативы, могут ли такие инструменты, как flywaydb помочь?
Как это следует использовать в производстве?
Не могли бы вы изменить настройку db, чтобы создать блокировку записи или стиль «блокировки» блокировки записи, который ожидает установка? Тогда только первый контейнер выполняет настройку, а остальные ждут. В качестве альтернативы вы можете отделить настройку db от запуска. – Matt
Если я вас хорошо понимаю, вы хотели бы иметь реплики службы базы данных, подключенные к одному хранилищу данных? Если это так, это действительно нецелесообразно, особенно если все реплики могут записываться в общую память. Базы данных, такие как Postgres, имеют различные параметры для установки на основе master/slave (https://www.postgresql.org/docs/9.2/static/high-availability.html).Если вас больше интересует защита от сбоя узла, вы можете указать только задачу 1 db с использованием тома на каждом узле, который монтирует одно и то же хранилище внешних данных). Если db/node умирает, рой воссоздает его в другом месте. – Alkaline