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

时间:2016-10-06 09:33:41

标签: azure-service-fabric

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

应用程序的运行状况为“错误”,状态为“正在删除” 该应用程序有9项服务。 6个服务显示健康状态“未知”,带有问号和状态“未知”。 3个服务显示健康状态“确定”,但状态为“正在删除”。

我还尝试使用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
    }
}

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

同时我们开始删除应用程序中的一个系统服务也改变了状态。 结构:/ 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),没有结果。

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

2 个答案:

答案 0 :(得分:6)

是的,如果您不允许代码退出RunAsync或打开/关闭ICommunicationListener,就会发生这种情况。

一些背景知识:

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

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

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

答案 1 :(得分:0)

脚本中的错误与“-ApplicationName”有关,应为“ -ApplicationName”。

在更正参数之后,此DID删除了软管,让我回来,以便能够将应用程序更正并重新部署到群集中。