2016-11-04 5 views
3

Я делаю первые шаги с Docker Swarm и задаюсь вопросом, как обращаться с сервисами, использующими постоянные данные, такие как redis, elasticsearch или базу данных.Docker Swarm с данными: общий объем и кластеризация против одного экземпляра

Я нашел много учебников о том, как настроить кластер redis/elasticsearch/database с док-роумом - но не проще ли использовать общий накопитель? Например, я работаю с Azure, поэтому simpy может использовать одно хранилище файлов Azure в качестве тома redis/elasticsearch/database и позволить всем моим узлам монтировать это хранилище файлов. Является ли это приемлемым подходом или есть некоторые существенные недостатки (например, когда два или более экземпляра базы данных пытаются писать одновременно на этом хранилище)?

Рекомендуется ли вообще использовать такие «данные» -услуги в каждые узел? Или я должен использовать Docker Swarm только для служб frontend и иметь один сервис redis/elasticsearch/database?

ответ

1

Если вы хотите использовать общую папку, доступную из более чем одного экземпляра приложения, то необходимо, чтобы приложение было спроектировано таким образом, чтобы избежать повреждения данных (данный файл не записывается одновременно из более чем приложения. так называемые блокировки мьютексов)

Все базы данных, о которых я знаю, не разработаны таким образом, поэтому вы не можете использовать их совместно используемым хранилищем.

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

+0

Спасибо за ваши мысли! Сейчас я планирую создать сложный кластер рой с различными сервисами, которые не могут быть апатридами. Мои выводы такие же, как у вас: 1. Избегайте использования разделяемых томов. 2. Используйте функциональность кластера, если служба предоставляет ее. 3. Из-за соображений устойчивости избегайте использования отдельных экземпляров службы (в производстве). Еще одна вещь, с которой я столкнулся, это вопрос: (например). Если одна из моих кластерных баз данных умирает, как должен обрабатывать мой узел с того же компьютера? Мой ответ: Отметьте всю машину как «больную», поэтому она должна быть полной недостижимой и/или перезапущена. – Munchkin

+0

, если вы разворачиваете контейнер db как услугу, вы можете использовать healthchecks, поэтому, если контейнер действительно мертв, чем докер-рой, он убьет его и разворачивает новый, что означает, что время простоя всего несколько секунд Если вы используете mysql, я в настоящее время работаю на очень простом решении кластеризации, чтобы вы могли развернуть множество экземпляров, и все они будут синхронизироваться вместе, используя кластер gallera, поэтому потерять его не проблема он еще не готов, но может быть, через несколько недель. https://github.com/vipconsult/percona-docker/tree/master/pxc-57 –

 Смежные вопросы

  • Нет связанных вопросов^_^