删除服务结构应用程序失败

Rob*_*nis 8 azure-service-fabric

我已将应用程序部署到5节点独立群集.部署成功.但是应用程序没有启动,因为应用程序中存在一些错误.我尝试使用Service Fabric Explorer从群集中删除应用程序,但这失败了.

应用程序的运行状况为"错误",状态为"正在删除"应用程序有9个服务.6个服务显示健康状态"未知",带有问号和状态"未知".3个服务显示健康状态"Ok"但状态为"Deleting".

我也尝试使用powershell删除它:

Remove-ServiceFabricApplication -ApplicationName fabric:/appname -Force -ForceRemove
Run Code Online (Sandbox Code Playgroud)

结果是操作超时.

我也试过下面的帖子,我在其他帖子中找到了.

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
    }
}
Run Code Online (Sandbox Code Playgroud)

也没有结果,脚本没有找到任何要删除的副本.

同时我们开始删除应用程序中的一个系统服务也改变了状态.结构:/ System/NamingService服务显示"警告"健康状态.这是在分区00000000-0000-0000-0000-000000001002上.主副本显示:
不健康事件:SourceId ='System.NamingService',Property ='Duration_PrimaryRecovery',HealthState ='Warning',ConsideWarningAsError = false.PrimaryRecovery开始于2016-10-06 07:55:21.252的时间超过30:00.000.

我还重新启动了每个节点(当时为1),没有结果.

如何强制删除应用程序而不重新创建群集,因为这不是生产环境的选项.

Vac*_*cek 6

是的,如果您不允许代码退出ICAsmunicationListener的RunAsync或Open/Close,就会发生这种情况.

一些背景:

您的服务具有由Service Fabric驱动的生命周期.服务中的一个小组件 - 你知道它是FabricRuntime - 驱动它.对于无状态服务实例,它是一个简单的打开/关闭生命周期.对于有状态服务,它有点复杂.有状态服务副本打开和关闭,但也会更改主要,辅助和无之间的角色.生命周期更改由Service Fabric启动,并在代码中显示为方法调用或取消令牌触发器.例如,当副本切换到主副本时,我们会调用RunAsync方法.当它从主要设备切换到其他设备或需要关闭时,会触发取消令牌.无论哪种方式,系统都会等待您完成工作.

当您删除服务时,我们会告知您的服务更改角色并关闭.如果您的代码没有响应,那么它将陷入该状态.

要摆脱这种状态,你可以跑Remove-ServiceFabricReplica -ForceRemove.这基本上会从系统中删除副本 - 就Service Fabric而言,副本已经消失.但是你的过程仍在运行.所以你必须进入并杀死这个过程.