В настоящее время я создаю кластер 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 на самом деле солидный. Только не в этом случае.