【问题标题】:Service Fabric Restart ApplicationService Fabric 重新启动应用程序
【发布时间】:2019-10-16 00:49:35
【问题描述】:

我有一个在启动时从 KeyVault 读取的服务结构应用程序。当我们更改 KeyVault 值时,我们必须重新启动节点才能读取新值。这会导致同一节点上的其他应用程序宕机。

我正在尝试编写一个 PowerShell 脚本来重新启动 Service Fabric 应用程序我有以下脚本在 1 节点集群上工作,但它在多节点集群上不起作用。

Restart-ServiceFabricDeployedCodePackage -ApplicationName $appName -CommandCompletionMode Verify -ServiceName $ServiceName -TimeoutSec 8000

当我有一个多节点集群时,这不起作用。我不知道为什么它不起作用。

我做错了吗?

【问题讨论】:

  • 请注意,这不是处理密钥轮换的推荐方式。我会在你打开的关于相同的 github 问题中讨论这个问题。

标签: azure-service-fabric azure-powershell


【解决方案1】:

我使这个 powershell 命令起作用的最少参数是:

-ApplicationName -NodeName -ServiceManifestName -CodePackageName -ServicePackageActivationId

像这样: Restart-ServiceFabricDeployedCodePackage -ApplicationName fabric:/App -NodeName "Node01" -ServiceManifestName "ServicePkg" -CodePackageName "Code" -ServicePackageActivationId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

使用这个命令我有时会得到奇怪的错误Did not find deployed code package for fabric:/App:Code on node Node01,但至少每次服务重新启动时。我玩过其他参数组合,但没有运气。看来上面的参数是必须的。

编写在所有节点上重新启动特定服务(并且仅此服务)的通用 powershell 脚本,我首先将所有节点名称运行Get-ServiceFabricNode,然后迭代这些名称运行Get-ServiceFabricDeployedCodePackage -NodeName Node01 -ApplicationName fabric:/App -ServiceManifestName ServicePkg,以便采用@987654330 @ 这是唯一动态的参数。最后使用ServicePackageActivationId 运行Restart-ServiceFabricDeployedCodePackage

【讨论】:

  • 那为什么重启服务会报错呢?
  • 错误“在节点 Node01 上找不到 fabric:/App:Code 的部署代码包”是暂时的竞争条件。该命令正在尝试验证包是否返回,但在它进行内部检查时实际服务尚未重新启动。这是良性的/预期的。
猜你喜欢
  • 2019-02-02
  • 2017-09-30
  • 2016-03-22
  • 2016-05-25
  • 2017-05-13
  • 2020-01-29
  • 2016-11-23
  • 2016-07-26
  • 2016-09-29
相关资源
最近更新 更多