2016-03-02 19 views
6

AzureサービスファブリッククラスタでステートレスなASP.NET Core(RC1)サービスを実行しています。アップグレードで配置制約を変更できないのはなぜですか?

<ServiceManifest Name="MyServicePkg" Version="1.0.2" ...> 
    <ServiceTypes> 
     <StatelessServiceType ServiceTypeName="MyServiceType" /> 
    </ServiceTypes> 
    ... 
</ServiceManifest> 

クラスタには配置プロパティが設定されています。私は "nodeType =バックエンド"を持つ5つのサーバーと "nodeType = Frontend"を持つ3つのサーバーを持っています。

サービスをアップグレードし、「バックエンド」ノードにのみ配置できるようにしたいと考えています。これは私の更新されたマニフェストです:私は今、アップグレードを実行した場合

<ServiceManifest Name="MyServicePkg" Version="1.0.3" ...> 
    <ServiceTypes> 
     <StatelessServiceType ServiceTypeName="MyServiceType"> 
      <PlacementConstraints>(nodeType==Backend)</PlacementConstraints> 
     </StatelessServiceType> 
    </ServiceTypes> 
    ... 
</ServiceManifest> 

しかし、私は次のエラーを取得する:

Start-ServiceFabricApplicationUpgrade : Default service descriptions must not be modified as part of upgrade. Modified default service: fabric:/MyApp/MyService

は、なぜそれがアップグレードで制約を変更することはできませんか?

サービスを削除して再作成する必要がありますか?これは、ステートフルなサービスのダウンタイムとデータ損失を招くため、私にとっては非常に問題があるようです。

答えて

5

実際に、ファブリッククラスタでアプリケーションを手動で定義するためのコードを書くことなく、これを行うのは簡単な方法です。

サービスマニフェストで配置制約を宣言できますが、アプリケーションマニフェストで宣言することもできます。アプリケーションマニフェストで宣言されたものは、サービスマニフェストの内容を上書きします。また、アプリケーションマニフェストの設定を使用して、パラメータを使用して、特定のデプロイメントに必要なパラメータファイルに基づいて値を変更できます。

私はちょうどa blog post that discusses this approach in greater detailを書きました。私はそれが役に立つと思う。 :)

+1

これは素晴らしいですし、私は信じられないほど幸せになります!これを共有してくれてありがとう!!!これは間違いなく公式文書に文書化されるべきです。 –

6

ここでの問題は、実際にはApplicationManifestのDefaultService部分にあります。 DefaultServiceの一部としてサービスが作成されると、それ以降は変更できないことがあります。 ServiceFabricエクスプローラで変更できるかもしれませんが、わかりません。

ApplicationManifestにDefaultServicesを空のままにしておき、手動でサービスを作成することをお勧めします。マニュアルでは、PowerShell、コード、またはServiceFabric Explorerのいずれかを意味します。 これにより、後でサービスの一部を変更する際の柔軟性が向上します。このようにすると、サービスの実行後に配置制約のようなものを変更する可能性があることがわかります。

PowerShellでサービスを作成するには、New-ServiceFabricServiceコマンドを使用できます。 コードから作成するには、FabricClientを使用します。そのサンプルは次の場所にあります:Azure Service Fabric Multi-Tenancy

+1

ありがとうございました。これは、Visual Studioのデフォルト設定であり、誰もがこのように使用するため、大きな欠点と思われます。手動でサービスを作成する方法についてのいくつかのリンク/詳細情報がありますか? –

関連する問題