将服务结构应用程序部署到公共服务结构集群后出现“分区低于目标副本或实例计数”错误

Posted

技术标签:

【中文标题】将服务结构应用程序部署到公共服务结构集群后出现“分区低于目标副本或实例计数”错误【英文标题】:"Partition is below target replica or instance count" error after deploying service fabric application to public service fabric cluster 【发布时间】:2016-04-25 20:17:54 【问题描述】:

我创建了一个服务结构无状态可靠服务,在其中我使用 OWIN 来托管一个 Web API。当我将应用程序部署到本地集群时,它运行良好,我可以调用 API。

当我将应用程序部署到公共集群时,部署成功完成,但是当我使用 Service Fabric Explorer 检查集群时,

副本似乎处于“构建中”状态一段时间, 然后它移动到“警告”状态,最后结构浏览器中的整个树变红了,分区下不再存在副本。 并显示健康状态为错误。 显示错误“分区低于目标副本或实例计数”。

我还使用了允许的端口来创建 OWIN Web 服务器。

当我在本地集群中部署应用程序时不会发生这种情况。 Service Fabric Explorer Screenshot for public cluster , Service Fabric Explorer Screenshot for Local Cluster

【问题讨论】:

【参考方案1】:

大多数情况下,此错误实际上只是意味着“我们无法启动您的服务”。如果您的服务中存在未处理的异常导致其无法启动,您可以在 Service Fabric Explorer 中深入了解您的服务实例或副本,以在多次尝试后无法启动时查看堆栈跟踪。

顺便说一句,我建议使用更新的基于 Web 的 Service Fabric Explorer。只需将 Web 浏览器指向集群上的 19080 端口:例如,http://mycluster.eastus.cloudapp.azure.com:19080/Explorer/index.htm。

【讨论】:

当我从 Visual Studio 调试解决方案时,我在输出窗口中看到了一个聚合异常。但仍然在本地集群中工作。所以我将所有代码移到了一个新的解决方案中,然后它在公共集群中工作。 问题是,我更新了 Servcie 结构的 nuget 包,公共集群不支持新版本,我改回了 nuget 版本,它工作正常。【参考方案2】:

只是我的一点评论..在解决此错误数小时后,问题出在我的C:\ 驱动器上的磁盘空间不足。将可用空间从大约 3GB 增加到 8GB 后,错误消失了。

如此处所述:https://github.com/Azure/service-fabric-issues/issues/15

今天的默认安装需要大约 10Gb 的磁盘空间

【讨论】:

我猜微软将 8GB 称为“今天大约 10Gb 的磁盘空间”;-) 我有同样的问题,我找不到任何迹象表明是什么导致了问题,释放磁盘空间后它运行良好【参考方案3】:

我遇到了这个问题,这是一个配置错误。

19080端口的Service Fabric explorer报错:

Error event: SourceId='System.FM', Property='State'.

分区低于目标副本或实例计数。 结构:/MyApp/MyService 3 2 [partitionid] N/P RD _Node_0 Up [长数字] (显示 1 个副本中的 1 个。可用副本总数:1。)

在我的 ApplicationManifest.xml 我有:

  <Service Name="MyService">
  <StatefulService ServiceTypeName="MyServiceType" TargetReplicaSetSize=**"3"** MinReplicaSetSize=**"2"**>
    <SingletonPartition />
  </StatefulService>
</Service>

将 MinReplicaSetSize 减少到 1 并将 TargetReplicaSetSize 减少到 1 并重新发布解决了我的问题。

Classic Eye-Dee-Ten-Tee (ID10T) 配置问题:-D

【讨论】:

【参考方案4】:

我正在使用 Azure Service Fabric 部署我的应用程序并收到此错误。

经过调查,发现是因为“TargetReplicaSetSize”和“MinReplicaSetSize”超过了我的节点数。

为解决问题,将ApplicationParameters/cloud.xml中的“PartitionCount”、“TargetReplicaSetSize”、“MinReplicaSetSize”改为1,然后重新部署应用:

    <?xml version="1.0" encoding="utf-8"?>
    <Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/Voting" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="xxx_PartitionCount" Value="1" />
        <Parameter Name="xxx_MinReplicaSetSize" Value="1" />
    </Parameters>
    </Application>

【讨论】:

【参考方案5】:

另一个原因是,如果您创建了无状态服务(检查 ApplicationPackageRoot/ApplicationManifest.xml),但该服务实现了有状态服务。

【讨论】:

【参考方案6】:

我刚刚收到相同的错误消息。原来我的容器还没有建成。过了几分钟,然后状态变为 OK。

【讨论】:

【参考方案7】:

我今天遇到了同样的问题,除了其他答案提到的可能原因之外,另一个可能的原因是您使用的是旧版本的 SF runtime/SDK/library。

请确保您的项目中的 SF 运行时、SDK 和引用的 DLL 是最新的!

【讨论】:

以上是关于将服务结构应用程序部署到公共服务结构集群后出现“分区低于目标副本或实例计数”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure 服务结构中迁移 Windows 服务

单机,分布式和集群的区别

集群与分布式

单机集群和分布式(微服务结构)

单机集群和分布式(微服务结构)的区别

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