我们正在运行一个内部服务架构集群(5.4.145.9494),但是我们有一些有趣的怪癖。 基本上每当我们运行一个应用程序(特别是当它包含副本的时候),我们注意到这些服务不能在大多数情况下启动。 在SF内部,错误消息不是描述性的(不健康的分区…),但是在事件日志中显然服务无法启动,因为它select的端口已经被另一个应用程序使用(从svchost进程到winit基本上任何应用)。
在这种情况下,开发人员不要自己分配一个端口,所以基本上SF必须解决这个问题。 在我们的设置中,我们根据https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-manifest分配了临时端口和应用程序端口,并且我们尝试了两个选项,因为文档很安静令人困惑的是应用程序端口是临时端口的一个子集,而示例显示它不是。 另一个有趣的事情是,由于短暂的端口configuration基本上改变了窗口本身的dynamic端口范围,所以我们在这里改变的任何东西都会改变窗口内运行的任何其他应用程序的端口范围。
在这个旁边,看起来SF一旦注意到端口已经被使用,就不会尝试使用另一个端口,所以它也不会自行修复。 简单的事件日志片段:
transport 35d3ce77c0 failed to bind on 0.0.0.0:49160, error = 0x80072740, port 49160 already held by process 204
在这种情况下,进程204是spoolsv.exe,但它也可以是任何进程。
此时节点的configuration设置为:
<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放在它自己的范围内,这不会解决它;-)。
任何帮助将非常欢迎;-)
我们在内部部署的QA环境中遇到了同样的问题。 我们通过确保为[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ MaxUserPort]指定的值( https://technet.microsoft.com/en-us/library/aa995661(v=exchg.80) ).aspx )。 低于服务结构集群清单(和)中指定的最低端口。
我们首先根据上面的规则修改了MaxUserPort的值,但是通过重新启动重置了它的值。 看到这一点,我们已经调整了SF集群ApplicationEndpoints和EphemeralEndpoints的值,SF运行时不再抱怨。