2016-10-06 7 views
5

5ノードのスタンドアロンクラスタにアプリケーションをデプロイしました。展開は成功しました。しかし、アプリケーションのいくつかのバグのためにアプリケーションが起動しませんでした。 サービスファブリックエクスプローラを使用してクラスタからアプリケーションを削除しようとしましたが、これは失敗します。サービスファブリックアプリケーションの削除に失敗する

アプリケーションの正常性状態は「エラー」でステータスは「削除中」 アプリケーションには9つのサービスがあります。 6のサービスには、健康状態「不明」と疑問符とステータス「不明」が表示されます。 3つのサービスは正常状態 "OK"を示しますが、ステータスは "削除中"です。

私はまた、PowerShellを使用してそれを削除しようとしています:

Remove-ServiceFabricApplication -ApplicationName fabric:/appname -Force -ForceRemove 

結果は、操作がタイムアウトしました。

他の投稿でも見つかったスクリプトを試しました。

Connect-ServiceFabricCluster -ConnectionEndpoint localhost:19000 

$nodes = Get-ServiceFabricNode 

foreach($node in $nodes) 
{ 
    $replicas = Get-ServiceFabricDeployedReplica -NodeName $node.NodeName - ApplicationName "fabric:/MyApp" 

    foreach ($replica in $replicas) 
    { 
     Remove-ServiceFabricReplica -ForceRemove -NodeName $node.NodeName -PartitionId $replica.Partitionid -ReplicaOrInstanceId $replica.ReplicaOrInstanceId 
    } 
} 

また、スクリプトは削除するレプリカを見つけられませんでした。

同時にアプリケーションの削除を開始したときに、システムサービスの1つでも状態が変更されました。 ファブリック:/ System/NamingServiceサービスは、「警告」状態を示します。 これはパーティション00000000-0000-0000-0000-000000001002にあります。 プライマリレプリカの表示内容:
不健全なイベント:SourceId = 'System.NamingService'、プロパティ= 'Duration_PrimaryRecovery'、HealthState = 'Warning'、ConsiderWarningAsError = false。 2016-10-06 07:55:21.252で開始されたPrimaryRecoveryが30:00.000より長くかかります。

また、すべてのノード(その時点で1)が再起動され、結果は表示されません。

クラスタを再作成せずにアプリケーションを削除する方法は、運用環境ではオプションではないためです。

答えて

4

これは、あなたのコードがあなたのICommunicationListenerのRunAsyncまたはOpen/Closeを終了できない場合に起こります。

いくつかの背景:

あなたのサービスは、サービスファブリックによって駆動され、ライフサイクルを持っています。 FabricRuntimeとして知られているあなたのサービスの小さなコンポーネントは、これを推進しています。ステートレスサービスインスタンスの場合、オープン/クローズライフサイクルは単純です。ステートフルなサービスの場合、もう少し複雑です。ステートフルなサービスレプリカは開閉しますが、プライマリ、セカンダリ、およびnoneの間のロールも変更します。ライフサイクルの変更はService Fabricによって開始され、コード内でメソッド呼び出しまたはキャンセルトークントリガーとして表示されます。たとえば、レプリカがプライマリに切り替わると、RunAsyncメソッドが呼び出されます。プライマリから別のものに切り替えるとき、またはシャットダウンする必要があるときは、キャンセルトークンがトリガされます。いずれにしても、システムは作業を完了するのを待ちます

サービスを削除すると、サービスが役割を変更して終了するよう指示されます。コードが応答しない場合、その状態で止まってしまいます。

この状態を解除するには、Remove-ServiceFabricReplica -ForceRemoveを実行します。これにより、基本的にシステムからレプリカが削除されます。サービスファブリックに関する限り、レプリカはなくなります。しかし、プロセスはまだ実行中です。だからあなたは行かなければならず、そのプロセスも殺さなければなりません。

+0

再生していただきありがとうございます。私はそれを解決しました。私はすでに私の質問の中でスクリプトサンプルでRemove-ServiceFabricReplicaを使ってみました。しかし、私が使っていたスクリプトのバグは、うまくいきませんでした。スクリプトを修正して問題を解決しました。このアプリケーションのどのノードでも実行中のプロセスはありませんでした。 アプリケーションが削除された後、NamingServiceに関する警告も消えました。 –

関連する問題