Большинство документов Docker могут похвастаться тем, что вы можете запускать сотни, даже тысячи контейнеров на одном физическом сервере. Мне интересно, как это выглядит с точки зрения балансировки нагрузки/кластеризации.Кластеризация Докерные контейнеры позади балансировщика нагрузки для HA
Скажем, у меня есть веб-служба RESTful, fizz-service.war
. Как правило, с «обычными» виртуальными машинами я могу развернуть эту службу на 50 виртуальных машинах (скажем, fizzsvc01.example.com
через fizzsvc50.example.com
), а затем балансировать/балансировать эти виртуальные машины за URL-адресом службы, например http://fizz-service.example.com
. Когда приходит запрос, балансировщик нагрузки выбирает узел для пересылки запроса на, скажем, fizzsvc34:8080/fizz-service
.
Мне интересно, как это работает с контейнерами Docker. Если у меня есть те же 50 контейнеров, проходящих через, скажем, 5 узлов:
- Могут ли эти узлы быть либо виртуальными машинами, либо физическими серверами?
- Для контейнеров, работающих на одних и тех же узлах, каждый из них работает на своем собственном порту? В противном случае, как у вас может быть 50 экземпляров службы, работающих на одном и том же порту?
- Принимая во внимание, что в «обычных виртуальных машинах» балансировщик нагрузки настроен на все виртуальные машины, составляющие пул, а затем я просто развертываю свою службу для каждой виртуальной машины в пуле, как это изменяется с контейнерами Docker? Как мой балансировщик (вероятно, отдельный фрагмент инфраструктуры, такой как F5 или nginx) «знает» обо всех контейнерах, доступных для распределения нагрузки?
Или мой подход к HA/балансировке нагрузки должен измениться, когда я вхожу в Docker-land?
Спасибо @Mark O'Connor (+1 и зеленый чек) - могу ли я предположить, что контейнеры являются идеальными кандидатами для таких инструментов поиска сервисов, как ZooKeeper/Consul/Eureka? – smeeb
@smeeb Абсолютно и проверять отличный инструмент, называемый регистратором, который может помочь с консулом: http://jlordiales.me/2015/02/03/registrator/ –