2017-01-25 7 views
0

У меня есть приложение на основе Java (сообщество Jboss версии 6.1) с интенсивным трафиком на нем. Теперь я хочу перенести развертывание этого приложения, используя докеры и докер-рой для кластеризации.Как масштабировать приложение с несколькими открытыми портами и несколькими томами, смонтированными с помощью докеры?

Сценарий

Мое приложение нуждается в двух портов подвергаются из Докер контейнера один является веб-порт (ie9080) и еще один порт подключения баз данных (ie1521) и есть несколько вещей, как каталог журналов для каждого контейнера установлен на хост-системе.

Простой пример Docker

docker run -it -d --name web1 -h "My Hostname" -p 9080:9080 -p 1521:1521 -v /home/web1/log:/opt/web1/jboss/server/log/ -v /home/web1/license:/opt/web1/jboss/server/license/ MYIMAGE 

Docker с примером Swarm

docker service create --name jboss_service --mount type=bind,source=/home/web1/license,destination=/opt/web1/jboss/server/license/ --mount type=bind,source=/home/web1/log,destination=/opt/web1/jboss/server/log/ MYIMAGE 

Теперь, если я масштабировать/реплицировать выше обслуживание 2 или 3, что хост-порт будет связывать и который mount будет привязываться для вновь созданных контейнеров?

Может ли кто-нибудь помочь мне узнать, как служба масштабирования и репликации будет работать в этом типе сценария?

Я также прошел через --publish и --name global, но ничего не помогло мне в моем случае.

Спасибо!

ответ

1

Поддерживающие контейнеры с сохранением состояния все еще незрелые в вселенной Докера. Я не уверен, что это возможно с Docker Swarm (если это я хотел бы узнать), и это не простая проблема для решения.

Я хотел бы предложить вам рассмотреть возможность Statefulset, которая поставляется в последней версии Kubernetes:

Он поддерживает создание уникального объема для каждого контейнера событие масштабирования. Что касается обработки портов, которая является частью функции Kubernetes nornal Service, которая реализует балансировку нагрузки на контейнер.

1

Я бы предложил создать ваш стек в файл v3, содержащий файл docker, который можно запустить на кластере swarn. Вместо публикации этих портов вы должны разоблачить их. Это означает, что порты НЕ доступны непосредственно на хост-системе, а в докер-сети. По умолчанию каждый Composefile получил свою собственную сеть, например: 172.18.0.0/24. Каждый контейнер имеет собственный ip и делает его доступным другим указанным портом. При масштабировании до 3-х контейнеров вы получили: 172.18.0.1:9080,1521 172.18.0.2:9080,1521 172.18.0.3:9080,1521

Вы нуждались бы Loadbalancer получить доступ к этой услуге. Я использую Jwilder/Nginx, если вы предпочитаете контейнерный подход. Я также могу рекомендовать Rancher, который поставляется с внутренним Loadbalancer.

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

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

Для постоянного хранения данных, вы должны взглянуть на Flocker! Однако базы данных могут не поддерживать эти реализации хранилища. EG: MYsql не поддерживает их, mongodb действительно работает с объемом flocker.

Похоже, вы должны прочитать много .. :) https://docs.docker.com/

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