删除服务结构应用程序失败
Posted
技术标签:
【中文标题】删除服务结构应用程序失败【英文标题】:Removing service fabric application fails 【发布时间】:2017-02-14 23:46:04 【问题描述】:我已将应用程序部署到 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
同样没有结果,脚本没有找到任何要删除的副本。
同时我们开始移除应用程序之一的系统服务也改变了状态。 fabric:/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 个),但没有任何结果。
如何在不重新创建集群的情况下强制删除应用程序,因为这不是生产环境的选项。
【问题讨论】:
【参考方案1】:是的,如果您不允许代码退出 RunAsync 或打开/关闭您的 ICommunicationListener,就会发生这种情况。
一些背景:
您的服务具有由 Service Fabric 驱动的生命周期。你服务中的一个小组件——你知道它是 FabricRuntime——驱动它。对于无状态服务实例,这是一个简单的打开/关闭生命周期。对于有状态的服务,它有点复杂。有状态服务副本打开和关闭,但也会在主要、次要和无之间更改角色。生命周期更改由 Service Fabric 启动,并在代码中显示为方法调用或取消令牌触发器。例如,当一个副本切换到主副本时,我们会调用您的 RunAsync 方法。当它从主设备切换到其他设备或需要关闭时,会触发取消令牌。无论哪种方式,系统都在等待您完成工作。
当您删除服务时,我们会告诉您的服务更改角色并关闭。如果您的代码没有响应,那么它将卡在该状态。
要摆脱这种状态,您可以运行Remove-ServiceFabricReplica -ForceRemove
。这实质上会从系统中删除副本 - 就 Service Fabric 而言,副本已消失。但是您的进程仍在运行。所以你也必须进去杀掉这个进程。
【讨论】:
感谢重播。我已经解决了。我已经尝试在我的问题中使用带有脚本示例的 Remove-ServiceFabricReplica。但是我使用的脚本中的一个错误 id 不起作用。我修复了我的脚本并解决了问题。并且该应用程序的任何节点上都没有运行任何进程。删除应用程序后,de NamingService 上的警告也消失了。 您是否更新了上面的脚本以修复您发现的错误?【参考方案2】:脚本中的错误与“-ApplicationName”有关,应该是“-ApplicationName”。
在更正参数后,此 DID 会移除已损坏的部分并让我回来,以便能够更正并将应用程序重新部署到集群。
【讨论】:
以上是关于删除服务结构应用程序失败的主要内容,如果未能解决你的问题,请参考以下文章
执行 KillAllProcesses 时删除服务器的所有活动数据库连接失败