upgrade - Service Fabric 升级卡在 PreUpgradeSafetyCheck 上
问题描述
我收到了一条警告说有新版本的 Service Fabric 可用,但是当我尝试升级它时,该过程卡在节点 Rep_247 上的 PreUpgradeSafetyCheck。我试过 -Force 和 -ForceRestart 但没有帮助。
解决方案
这个问题很可能会发生,因为服务结构无法以安全的方式关闭服务来升级节点或应用程序。
每当升级节点时,节点中激活的服务必须先移动到另一个节点,这样才能在不影响您的应用程序\服务可用性的情况下重新启动节点。
在这种情况下,当服务不能被放置到另一个节点时,这样做可能会导致仲裁丢失,可能是因为没有其他节点可用,或者因为服务中的放置限制,或者只有一个服务实例.
由于 SF 无法保证服务的可靠性,它将暂停升级过程,直到可以应用解决方案来解决问题并继续该过程。
从您的集群地图和消息可能知道问题,您的集群只有一个类型为“ Rep_247 ReportServerType ”的节点,我假设您的服务具有放置约束,只能部署在此节点类型上,删除节点将使这些服务不可用,因为放置约束将阻止它们移动到另一种节点类型。
如果服务不受该节点类型的限制,问题可能是:
- 它无法在其他节点上激活,例如,节点中缺少依赖项,这将无法拥有最小副本。
- 该服务只有一个可用的实例,关闭将使该服务不可用。
PS:同样适用于节点MR_236 MRType
PreUpgradeSafetyCheck 的 UpgradePhase 意味着在执行升级域之前准备升级域存在问题。在这种情况下,最常见的问题是关闭或从主代码路径降级时的服务错误。
这种情况的可能解决方案是:
- 添加更多服务的副本\实例,以满足最小仲裁。
- 移除服务的 Placement 约束,让它们移动到其他节点。
- 添加一个相同节点类型的额外节点,以便服务可以安全移出。
- 更新节点时关闭服务并重新创建(如果没有状态,则为最后一个选项,否则将丢失数据)
您可能有兴趣查看相关问题:
推荐阅读
- c++ - 将函数返回用于另一个模板函数 C++
- xml - 应用模板顺序如何影响父节点上的属性?
- python - 如何运行子进程命令以在后台 Python 中启动 nodejs 服务器
- python - PyPDF2 在水印中不起作用你能帮我解决这个问题吗?
- git - 无法从 Jenkins 环境变量中读取 GIT commitId、Branch 和 URL
- javascript - Bootstrap Datatables Javascript - Lengthmenu 和导出按钮彼此过于平滑 - 想要在两者之间创建换行符
- php - 从州代码中获取运输州的名称,或者如果用户在 WooCommerce 中键入它
- javascript - Ionic React routerLink 将数据传递到另一个页面
- asp.net-core - 消息未保存到数据库
- prestashop - Prestashop 如何在 BO 中的客户信息中显示另一个字段