web-dev-qa-db-ja.com

他のアプリケーションによってすでに保持されているMicrosoftServiceFabricアプリケーションポート

オンプレミスのサービスファブリッククラスター(5.4.145.9494)を実行していますが、いくつかの面白い癖があります。基本的に、アプリケーションを実行するときはいつでも(特に、レプリカが含まれているときは)、ほとんどの場合、サービスを開始できないことに気付きます。 SF内では、エラーメッセージはそれほど説明的ではありません(パーティションが正常ではありません...)が、イベントログでは、選択したポートが別のアプリケーションですでに使用されているため(svchostプロセスからwinitまで)、サービスを開始できないことが明らかになります。基本的にすべてのアプリケーション)。

この場合、開発者は自分でポートを割り当てないので、基本的にSFはこれを理解する必要があります。セットアップでは、 https://docs.Microsoft.com/en-us/Azure/service-fabric/service-fabric-cluster-manifest に従って、エフェメラルポートとアプリケーションポートの両方を割り当ててみました。両方のオプションは、アプリケーションポートがエフェメラルポートのサブセットであることに関してドキュメントが静かに混乱しているためですが、例ではそうではないことが示されています。もう1つの面白い点は、エフェメラルポートの構成は基本的にウィンドウ自体の動的ポート範囲を変更するため、ここで変更すると、ウィンドウ内で実行されている他のアプリケーションのポート範囲も変更されることです。

次に、ポートがすでに使用されていることに気付いたSFは、別のポートを使用しようとしていないようです。そのため、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の値を変更しましたが、その値は再起動によってリセットされました。それを見て、SFクラスターのApplicationEndpointsとEphemeralEndpointsの値を調整しましたが、SFランタイムはもう文句を言いません。

1
Vincent