Подключение к локальному кластеру Service Service Fabric
Я следовал инструкциям Microsoft по созданию кластера Multi-Node On-Premises Service Fabric. Я развернул приложение без сохранения состояния в кластере, и оно, кажется, работает нормально. Когда я подключался к кластеру, я использовал IP-адрес одного из узлов. Делая это, я могу подключиться через Powershell, используя Connect-ServiceFabricCluster nodename:19000
и я могу подключиться к веб-сайту Service Fabric Explorer ( http://nodename:19080/explorer/index.html).
Приведенные в Интернете примеры показывают, что, если я размещаюсь в Azure, я могу подключиться к http://mycluster.eastus.cloudapp.azure.com:19000/ и это разрешает проблему, однако я не могу понять, какой эквивалент находится на моем локальном компьютере. Я попытался подключиться к моему образцу кластера: Connect-ServiceFabricCluster sampleCluster.domain.local:19000
но это возвращает:
ВНИМАНИЕ: Не удалось связаться со службой именования. Попытка связаться со службой Failover Manager... ПРЕДУПРЕЖДЕНИЕ: Не удалось связаться со службой Failover Manager, попытка связаться с FMM... False ПРЕДУПРЕЖДЕНИЕ: такой хост не известен
Connect-ServiceFabricCluster: конечная точка кластера недоступна, проверьте, есть ли проблема с подключением / брандмауэром /DNS.
Я что-то упустил в моей настройке? Должна ли быть где-то центральная запись DNS, которая позволяет мне подключаться к кластеру? Или я пытаюсь сделать что-то, что не поддерживается на месте?
1 ответ
Да, вам не хватает балансировщика нагрузки.
Это лучший ресурс, который я могу найти, чтобы помочь, я вставлю соответствующее содержимое на случай, если оно станет недоступным.
Обратный прокси-сервер - при подготовке кластера Service Fabric у вас есть возможность установить обратный прокси-сервер на каждом из узлов кластера. Он выполняет разрешение службы от имени клиента и перенаправляет запрос на правильный узел, который содержит приложение. В большинстве случаев службы, работающие в Service Fabric, работают только на подмножестве узлов. Поскольку подсистема балансировки нагрузки не будет знать, какие узлы содержат запрошенную службу, клиентским библиотекам нужно будет обернуть запросы в повторный цикл, чтобы разрешить конечные точки службы. Использование обратного прокси-сервера решит проблему, так как он работает на каждом узле и точно знает, на каких узлах работает служба. Клиенты за пределами кластера могут обращаться к службам, работающим внутри кластера, через обратный прокси-сервер без дополнительной настройки.
Источник: Azure Service Fabric потрясающая
У меня запущен ресурс Azure Service Fabric, но применяются те же правила. Как говорится в статье, вам понадобится обратный прокси-сервер / балансировщик нагрузки, чтобы решить не только те узлы, на которых запущен API, но и сбалансировать нагрузку между узлами, на которых работает этот API. Таким образом, зонды работоспособности также необходимы, чтобы балансировщик нагрузки знал, какие узлы являются жизнеспособными вариантами для отправки трафика.
Например, Azure создает 2 правила: 1. LBHttpRule на TCP/19080 с проверкой TCP на порту 19080 каждые 5 секунд с порогом ошибки 2 подсчета. 2. LBRule на TCP/19000 с пробой TCP на порту 19000 каждые 5 секунд с порогом ошибки 2 счета.
Чтобы сделать эту переадресацию, вам нужно добавить правило, при котором вы перенаправляете порт 80 на http-порт службы. Тогда зондом состояния может быть http-зонд, который находит путь для проверки возврата 200.
Войдя в кластер, вы сможете разрешить службы в обычном режиме, а SF позаботится о доступности.
В Azure-land это опять абстрагируется от использования чего-то вроде API Management для дальнейшей обратной передачи его через SSL. Какой беспорядок, но это работает.
Как только ваш балансировщик нагрузки настроен, у вас будет один IP-адрес для управления, публикации и регулярного трафика.