Azure service fabric 服务结构-如何修复出现故障的有状态应用程序

Azure service fabric 服务结构-如何修复出现故障的有状态应用程序,azure-service-fabric,service-fabric-stateful,Azure Service Fabric,Service Fabric Stateful,我有一个有状态服务,它使用Azure存储帐户为RunAsync上的主副本配置状态备份 前几天,有人无意中删除了用于备份的存储帐户。在我们的下一次部署中,由于404错误响应,服务在初始化时开始抛出错误 我注意到,在部署过程中,fabric显然会围绕旧版本的服务进行调整,并根据需要旋转新的主节点,以释放它正在升级的vm。如果旧版本的代码未能通过引发异常来实例化,则升级过程将失败,从而导致回滚 我的问题是,一旦我创建了一个新的存储帐户,我似乎仍然无法将现有服务恢复到正常状态。我的现有服务正在使用存储帐

我有一个有状态服务,它使用Azure存储帐户为RunAsync上的主副本配置状态备份

前几天,有人无意中删除了用于备份的存储帐户。在我们的下一次部署中,由于404错误响应,服务在初始化时开始抛出错误

我注意到,在部署过程中,fabric显然会围绕旧版本的服务进行调整,并根据需要旋转新的主节点,以释放它正在升级的vm。如果旧版本的代码未能通过引发异常来实例化,则升级过程将失败,从而导致回滚

我的问题是,一旦我创建了一个新的存储帐户,我似乎仍然无法将现有服务恢复到正常状态。我的现有服务正在使用存储帐户URL和azure中不再存在的帐户密钥。升级尝试失败,因为由于现在的配置不正确,旧服务实例无法实例化


有什么方法可以处理这种情况吗?

最简单的方法是使用升级强制完成将服务指向新存储帐户的更改

但是,这会给您带来大量的管理开销,尤其是在有许多其他服务的情况下,因为您需要小心地手动执行所有安全和功能检查,以免出现任何倒退

推荐的解决方案是使用所述的ServiceTypeHealthPolicyMap来“掩盖”不健康的服务(因为您预期它在升级过程中不健康)。您可能还需要根据具体情况调整一些其他升级参数


第三个建议,或者将来可能需要改进的地方,是将更改帐户信息的升级设置为仅配置升级。这将确保SF在不重新启动服务(默认情况下)的情况下尝试就地更改配置,这将防止现有服务在升级过程中发生故障并遇到问题。这在中得到了演示。

如果我在已经处于故障循环的服务上尝试仅配置升级,会发生什么?他们会得到新的配置吗?是的,但是整体升级与任何其他升级一样,都是通过健康和安全检查进行的。因此,您需要以任何方式修改健康策略映射。我提到它是因为你说错误是在故障转移时引入的,这是一种避免(将来)故障转移的方法。好的,谢谢,健康策略图看起来很有希望,我只是不能决定多久使用一次。一方面,最好将其作为CI管道结构升级脚本的一部分,通常这将确保升级成功。但我担心在实际存在问题时掩盖错误,所以可能会保留该选项,仅用于手动干预。