Общие тома Docker Swarm

В настоящее время я создаю кластер Docker Swarm. В его состав входят 3 менеджера и 3 рабочих. Приложение, которое я буду развертывать в этой настройке, состоит из бэкэнда laravel, которому для масштабируемости требуется его код в нескольких контейнерах. Я уже пробовал тома GlusterFS и rex-ray с бэкэндом Ceph в качестве общего хранилища для моих томов. GlusterFS ненадежен, а Ceph в моем случае немного избыточен и чертовски сложен :)

Текущая настройка выглядит примерно так. У меня есть кластер Percona вне докера, я запускаю GlusterFS на этих серверах и просто монтирую их в Docker Workers.

                                                Docker Managers
+-------------------------------------------------------------+
|                                                             |
|   +---------+   +---------+   +---------+    +---------+    |
|   |         |   |         |   |         |    |         |    |
|   | HAproxy +---+ HAproxy +---+ HAproxy +----+   SSL   |    |
|   |         |   |         |   |         |    | Manager |    |
|   +----+----+   +----+----+   +----+----+    +---------+    |
|        |             |             |                        |
+-------------------------------------------------------------+
         |             |             |
         |             |             |           Docker Workers
+-------------------------------------------------------------+
|        |             |             |                        |
|   +----+-------------+-------------+--------------------+   |
|   |                                                     |   |
|   |                      Applicaties                    |   |
|   |                                                     |   |
|   +---+--------------+---------------+--------------+---+   |
|       |              |               |              |       |
|       |              |               |              |       |
|   +---+----+     +---+----+     +----+---+     +----+---+   |
|   | Mysql  |     | Mysql  |     | Mysql  |     | Mysql  |   |
|   |   LB   +-----+   LB   +-----+   LB   +-----+   LB   |   |
|   +---+----+     +----+---+     +----+---+     +----+---+   |
|       |               |              |              |       |
|       +---------------+-------+------+--------------+       |
|       |                       |                     |       |
+-------------------------------------------------------------+
        |                       |                     |
        |                       |                     |
        |                       |                     |
+-------+--------+     +--------+-------+    +--------+-------+
|                |     |                |    |                |
|    MySQL01     |     |    MySQL02     |    |    MySQL03     |
|    Gluster01   +-----+    Gluster02   +----+    Gluster03   |
|                |     |                |    |                |
+----------------+     +----------------+    +----------------+

Затем я монтирую их в контейнеры php следующим образом:

--mount type=bind,source=/mnt/client-data,target=/var/www/html/

Это работает, но очень медленно. Время загрузки страницы составляет около 10 секунд, когда файлы не смонтированы (они существуют в контейнере), время загрузки страницы составляет около 2-3 секунд.

Я познакомился с Flocker, и это кажется очень интересным, но я думаю, что том Flocker можно смонтировать только на одном контейнере. Это правда?

Другое решение, которое я пробую прямо сейчас, заключается в том, что код извлекается из git каждый раз, когда создается новый контейнер. На самом деле это хорошее решение, но для извлечения кода и запуска композитора требуется около 5 минут, а когда я отправляю обновления, мне нужно перезапустить все контейнеры.

Каким будет лучшее решение для совместного использования моего кода в разных контейнерах на нескольких хостах? (или даже центры обработки данных). В настоящее время у меня есть доступ ко многим различным бэкэндам хранилища (Ceph, NFS, gluster), и создание нового не проблема.

РЕДАКТИРОВАТЬ: Почему в этом случае блеск ненадежен? Я мог бы сказать это неправильно выше ... Gluster ненадежен при использовании томов докеров на Gluster с подключаемым модулем драйвера тома. В большинстве случаев при создании службы тома монтируются правильно, но в случае изменения расписания в рое тома редко монтируются снова. Я рассмотрю это позже, чтобы определить, что пошло не так, но на данный момент у меня мало свободного времени. Gluster на самом деле солидный. Только не в этом случае.


person Odyssee    schedule 26.02.2017    source источник
comment
Читателям было бы интересно понять, насколько ненадежна GlusterFS.   -  person user239558    schedule 01.03.2017
comment
Позже я объясню, почему это ненадежно в этой ситуации, сначала я должен выполнить свою работу :) Но это как-то связано с созданием томов докеров в Gluster, это дает сбой примерно в 50% случаев.   -  person Odyssee    schedule 02.03.2017


Ответы (2)


В конечном итоге я решил использовать CephFS и смонтировать его на хостах докеров. Скорость записи нормальная, может быть, даже отличная по сравнению с glusterfs. Чтение происходит очень быстро на CephFS, так же было и с GlusterFS.

Эта настройка соответствует моим потребностям, но я не могу использовать общие тома докеров на разных хостах. Мне нужно привязать смонтированную файловую систему к контейнерам докеров. Хотя это еще не конец света, я все еще ищу удобный и быстрый способ разместить свои тома на всех хостах в рое.

В настоящее время я пытаюсь создать подключаемый модуль тома Docker для CephFS, чтобы удовлетворить мои требования. Я буду обновлять это на случай, если кому-то это будет интересно.

person Odyssee    schedule 21.03.2017

Обратите внимание, что я не пробовал следующее.

Поскольку ваш код в основном предназначен только для чтения, мне кажется, что вам «просто» нужен кеш файловой системы. CacheFS, например, работает поверх NFS.

Поскольку GlusterFS можно смонтировать как NFS, вы сможете их комбинировать.

person user239558    schedule 01.03.2017