Поведение аварийного переключения Docker Swarm кажется немного подавляющим
В настоящее время я пытаюсь использовать Docker Swarm для настройки нашего приложения (состоящего из служб без сохранения состояния и с состоянием) в режиме высокой доступности на кластере из трех узлов. Под "высокодоступным" я подразумеваю "может обеспечить выход из строя одного из трех узлов".
Мы выполняли такие установки (используя другие средства, а не Docker, не говоря уже о Docker Swarm) в течение достаточно долгого времени с хорошим успехом, включая приемлемое поведение восстановления после отказа, поэтому само наше приложение (соответственно, службы, которые его составляют) имеет / доказало что при такой настройке трех узлов его / их можно сделать высокодоступными.
С Swarm я успешно запускаю и запускаю приложение (со всеми тремя узлами) и позаботился о том, чтобы у меня была каждая конфигурация с резервированием, т. Е. Существует более одного экземпляра для каждого из них, они правильно настроены для HA и не все экземпляры службы расположены на одном и том же узле Swarm. Конечно, я также позаботился о том, чтобы все мои Swarm-узлы присоединились к Swarm в качестве управляющих узлов, чтобы любой из них мог стать лидером Swarm, если исходный узел-лидер выйдет из строя.
В этом "хорошем" состоянии я могу подключаться к сервисам на их открытых портах на любом из узлов благодаря входящей сети Swarm. Очень круто. В производственной среде мы могли бы теперь разместить высокодоступный балансировщик нагрузки перед нашими рабочими узлами Swarm, чтобы у клиентов был один IP-адрес для подключения, и они даже не заметили бы, если один из узлов вышел из строя.
Так что теперь пришло время протестировать поведение при сбое... Я ожидаю, что при уничтожении одного узла Swarm (то есть принудительное отключение виртуальной машины) мое приложение будет запущено, хотя, конечно, в "ухудшенном" режиме. Увы, после завершения работы я больше не могу подключиться к ЛЮБЫМ службам через их открытые (через Ingress) порты в течение значительного времени. Некоторые из них снова становятся достижимыми и действительно успешно восстанавливаются (например, к кластеру Elasticsearch из трех узлов можно снова получить доступ, разумеется, теперь ему не хватает одного узла, но он вернулся в "зеленое" состояние). Но другие (увы, включая наш внутренний LB...) остаются недоступными через опубликованные порты.
"Docker node ls" показывает один узел как недоступный
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER
STATUS
kma44tewzpya80a58boxn9k4s * manager1 Ready Active Reachable
uhz0y2xkd7fkztfuofq3uqufp manager2 Ready Active Leader
x4bggf8cu371qhi0fva5ucpxo manager3 Down Active Unreachable
как и ожидалось.
Что я мог сделать неправильно в отношении настроек Swarm, которые вызывают эти эффекты? Я просто жду здесь слишком многого?