Порт приложения Microsoft Service Fabric, уже занятый другим приложением
Мы работаем с локальным кластером сервисных структур (5.4.145.9494), но у нас есть несколько забавных нюансов. По сути, всякий раз, когда мы запускаем приложение (и особенно когда оно содержит реплики), мы замечаем, что службы не могут запускаться большую часть времени. Внутри SF сообщение об ошибке не является описательным (нездоровый раздел...), однако из журналов событий становится очевидным, что служба не может запуститься, потому что выбранный порт уже используется другим приложением (от процесса svchost до winit в основном любое приложение).
В этом случае разработчики НЕ назначают порт самостоятельно, поэтому в основном SF должен это выяснить. В нашей настройке мы назначили как временные порты, так и порты приложения в соответствии с https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-manifest и мы опробовали оба варианта, так как документация тихая сбивает с толку то, что порты приложений являются подмножеством временных портов, а примеры показывают, что это не так. Еще одна забавная вещь: поскольку временная конфигурация портов в основном меняет динамический диапазон портов самих окон, все, что мы здесь изменяем, также меняет диапазоны портов ЛЮБОГО другого приложения, работающего внутри окон.
Наряду с этим кажется, что SF не пытается использовать другой порт, как только он замечает, что порт уже используется, поэтому он также не будет исправлен. Простой фрагмент журнала событий:
transport 35d3ce77c0 failed to bind on 0.0.0.0:49160, error = 0x80072740, port 49160 already held by process 204
в этом случае процесс 204 является spoolsv.exe, но опять же это может быть любой процесс.
На данный момент конфигурация для узла установлена на:
<NodeType Name="NodeType0">
<Endpoints>
<ClientConnectionEndpoint Port="19000" />
<LeaseDriverEndpoint Port="19002" />
<ClusterConnectionEndpoint Port="19001" />
<HttpGatewayEndpoint Port="19080" Protocol="http" />
<HttpApplicationGatewayEndpoint Port="19081" Protocol="http" />
<ServiceConnectionEndpoint Port="19003" />
<ApplicationEndpoints StartPort="49152" EndPort="50000" />
<EphemeralEndpoints StartPort="49152" EndPort="65534" />
</Endpoints>
Но, как было сказано ранее, мы уже пытались поместить ApplicationEndpoints в собственный диапазон, что не исправит это;-).
Любая помощь будет приветствоваться;-)
1 ответ
Мы столкнулись с той же проблемой в нашей среде QA. Мы решили проблему, убедившись, что значение, указанное для [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ MaxUserPort] ( https://technet.microsoft.com/en-us/library/aa995661(v=exchg.80).aspx). ниже самого низкого порта, указанного в манифесте кластера Service Fabric (и).
Сначала мы изменили значение MaxUserPort в соответствии с приведенным выше правилом, но его значение было сброшено при перезагрузке. Видя это, мы адаптировали значения SFE-кластера ApplicationEndpoints и EphemeralEndpoints, и среда выполнения SF больше не жалуется.