Балансировка нагрузки в режиме Docker Swarm

Я настроил кластер режима роя докеров с двумя менеджерами и одним рабочим. Это на Centos 7. Они на машинах дкр1, дкр2, дкр3. дкр3 рабочий.

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

Рой находится в «глобальном» режиме. То есть по одной реплике на машину. Мой метод обновления заключался в том, чтобы слить узел, остановить демон, обновить yum, запустить демон. (Обратите внимание, что это уничтожило мои настройки конфигурации демона для ExecStart=...! Будьте осторожны при обновлении.)

Наш клиент/ESB подключается к dkr2, который делает свою магию балансировки нагрузки над роем. dkr2, который является лидером. dkr1 доступен

Я сбил дкр3. Без вопросов. Обновленный докер. Поднял обратно. Нет времени простоя из-за падения рабочего.

Сбил дкр1. Сначала никаких проблем. Все еще работает, когда я его снес. Обновленный докер. Поднял обратно. Но во время запуска он 404'ed. Когда встал, все было в порядке.

Сбил дкр2. Я не записал, что тогда произошло, извините.

В любом случае, когда мое приложение запускалось на dkr1, оно выдавало ошибку 404, так как сервер еще не запускался.

Любая идея, что я могу делать неправильно? Я бы предположил, что мне нужна какая-то проверка работоспособности, потому что контейнер явно в порядке, но сервер еще не отвечает. Так вот когда я получаю время простоя.


person djb    schedule 13.02.2017    source источник


Ответы (1)


Вы правы — вам нужно указать проверку работоспособности для запуска вашего приложения внутри контейнера, чтобы убедиться, что оно готово. Ваш контейнер не будет получать трафик, пока эта проверка не пройдет.

Достаточно простого скручивания до конечной точки. Используйте флаг Healthcheck в файле Docker, чтобы указать, какую проверку необходимо выполнить.

Примером строки проверки работоспособности в Dockerfile для проверки того, вернула ли конечная точка 200 OK, может быть: HEALTHCHECK CMD curl -f 'http://localhost:8443/somepath' || exit 1

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

Если это также невозможно и вам нужно обновить работающую службу, вы можете выполнить service update и используйте комбинацию флагов health для проверки работоспособности.

person Hendrikvh    schedule 12.09.2017