【问题标题】:Partition is in quorum loss分区处于仲裁丢失状态
【发布时间】:2017-01-28 11:14:25
【问题描述】:

我有一个 Service Fabric 应用程序,它有一个无状态 Web api 和一个有两个分区的有状态服务。无状态 web api 定义了一个 web api 控制器并使用ServiceProxy.Create 来获取有状态服务的远程代理。远程调用将消息放入可靠队列。

有状态服务每 X 分钟将消息从队列中出列。

我正在查看 Service Fabric 资源管理器,我的应用程序在过去几天一直处于错误状态。当我深入了解详细信息时,有状态服务出现以下错误:

错误事件:SourceId='System.FM',Property='State'。分区在 法定人数损失。

查看资源管理器,我发现我的主副本已启动并正在运行,它看起来像是一个 ActiveSecondary,但其他两个副本显示 IdleSecondary 并且它们继续进入 Standby / In Build 状态。我不知道为什么会这样。

我的其他辅助节点一直无法进入 ActiveSecondary 状态/导致此仲裁损失的一些原因是什么?

【问题讨论】:

  • 能否添加 powershell 命令“Get-ServiceFabricClusterHealth”的输出?
  • 它报告我的服务和分区不健康,但没有提供任何细节。
  • 配置中有多少个节点和副本?
  • 5 节点集群,Min Replica = 2,Target = 3。2x 分区(虽然它们都处于这种失败状态)
  • 集群中有多少个应用?您是否在该问题开始出现之前更新了应用程序?

标签: azure-service-fabric service-fabric-stateful


【解决方案1】:

您是否检查了节点上的 Windows 事件日志以获取其他错误消息?

我遇到了类似的问题,但我使用的是 ReliableDictionary。您是否正确实施了IEquatable<T>IComparable<T>?我遇到了类似的问题,因为我的T 有一个字典字段,我直接在字典上调用Equals,而不是比较键和值。 GetHashCode 也一样。

事件日志中的线索是这条消息:Assert=Cannot update an item that does not exist (null). - 它只发生在我编辑一个键 ReliableDictionary 时。

【讨论】:

  • 好久没出现了,下次试试。
【解决方案2】:

尝试重置集群。 我面临着同样的问题,我的服务有 1 个分区。 错误已通过重置集群修复

【讨论】:

  • 上次对我有用——但它似乎经常回来。 -- 令我惊讶的是,一个具有单个节点的集群可以以某种方式位于InQuorumLoss 中。 ——比如,它到底是怎么发生的——它是否失去了与自己的争论??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2017-10-29
  • 2022-01-01
  • 2021-10-07
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多