我已将应用程序部署到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),没有结果。
如何在不重新创建群集的情况下强制删除应用程序,因为这不是生产环境的选项。
答案 0 :(得分:6)
是的,如果您不允许代码退出RunAsync或打开/关闭ICommunicationListener,就会发生这种情况。
一些背景知识:
您的服务的生命周期由Service Fabric驱动。服务中的一个小组件 - 你知道它是FabricRuntime - 驱动它。对于无状态服务实例,它是一个简单的打开/关闭生命周期。对于有状态服务,它有点复杂。有状态服务副本打开和关闭,但也会更改主要,辅助和无之间的角色。生命周期更改由Service Fabric启动,并在代码中显示为方法调用或取消令牌触发器。例如,当副本切换到主副本时,我们会调用RunAsync方法。当它从主要设备切换到其他设备或需要关闭时,会触发取消令牌。无论哪种方式,系统都会等待您完成工作。
当您删除服务时,我们会告知您的服务更改角色并关闭。如果您的代码没有响应,那么它将陷入该状态。
要退出该状态,您可以运行Remove-ServiceFabricReplica -ForceRemove
。这基本上会从系统中删除副本 - 就Service Fabric而言,副本已经消失。但是你的过程仍在运行。所以你必须进入并杀死这个过程。
答案 1 :(得分:0)
脚本中的错误与“-ApplicationName”有关,应为“ -ApplicationName”。
在更正参数之后,此DID删除了软管,让我回来,以便能够将应用程序更正并重新部署到群集中。