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

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 会移除已损坏的部分并让我回来,以便能够更正并将应用程序重新部署到集群。

【讨论】:

以上是关于删除服务结构应用程序失败的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint 无法删除搜索服务应用程序

执行 KillAllProcesses 时删除服务器的所有活动数据库连接失败

连接本地数据库失败怎么办

IBM Worklight - 可以从连接失败框中删除“详细信息”按钮吗?

Chrome应用上传失败

通过 ARM 模板删除 Service Fabric 服务