【问题标题】:Why isn't it possible to change placement constraints in an upgrade?为什么不能在升级中更改放置约束?
【发布时间】:2016-06-15 20:35:30
【问题描述】:

我的 Azure Service Fabric 集群中运行着一个无状态的 ASP.NET Core (RC1) 服务。它有以下清单:

<ServiceManifest Name="MyServicePkg" Version="1.0.2" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType" />
   </ServiceTypes>
   ...
</ServiceManifest>

我的集群配置了放置属性。我有 5 台“nodeType=Backend”的服务器和 3 台“nodeType=Frontend”的服务器。

我想升级我的服务并指定它只能放置在“后端”节点上。这是我更新的清单:

<ServiceManifest Name="MyServicePkg" Version="1.0.3" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType">
          <PlacementConstraints>(nodeType==Backend)</PlacementConstraints>
      </StatelessServiceType>
   </ServiceTypes>
   ...
</ServiceManifest>

但是,如果我现在执行升级,我会收到以下错误:

Start-ServiceFabricApplicationUpgrade :默认服务描述 不得在升级过程中进行修改。修改默认服务: 面料:/MyApp/MyService

为什么不能通过升级来更改约束?

我是否必须删除并重新创建服务?这对我来说似乎非常有问题,因为它会导致有状态服务的停机和数据丢失。

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    所以这里的问题实际上与 ApplicationManifest 的 DefaultService 部分有关。当服务作为 DefaultService 的一部分创建时,之后您将无法更改某些内容。您或许可以通过 ServiceFabric 资源管理器对其进行更改,但我不确定。

    建议将 ApplicationManifest 中的 DefaultServices 保留为空,而是手动创建服务。手动我的意思是通过 powershell、代码或 ServiceFabric Explorer。 这使您在之后更改服务的部分时具有更大的灵活性。当它以这种方式完成时,你我知道你有可能在服务运行后更改诸如放置约束之类的东西。

    要使用 PowerShell 创建服务,您可以使用 New-ServiceFabricService 命令。 要从代码创建它,您可以使用FabricClient 来完成它。可以在这里找到一个示例:Azure Service Fabric Multi-Tenancy

    【讨论】:

    • 感谢您的回答。这似乎是一个巨大的缺点,因为这是 Visual Studio 中的默认设置,每个人都会像这样使用它。您是否有一些关于如何手动创建服务的链接/更多信息?
    【解决方案2】:

    实际上有一种相当简单的方法可以做到这一点,而无需编写大量代码来手动定义结构集群上的应用程序。

    虽然您可以在服务清单中声明放置约束,但您也可以在应用清单中声明它们。应用程序清单中声明的​​任何内容都将覆盖服务清单中的内容。通过应用程序清单中的设置,您可以使用参数根据您想要特定部署的参数文件更改值。

    我刚刚写了a blog post that discusses this approach in greater detail。希望对你有帮助。 :)

    【讨论】:

    • 这太棒了,让我非常高兴!谢谢分享这个!!!这绝对应该记录在官方文档中。
    猜你喜欢
    • 2018-05-29
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多