Chr*_*iss 6 azure-service-fabric
我在Azure Service Fabric集群中运行了无状态ASP.NET Core(RC1)服务.它有以下表现:
<ServiceManifest Name="MyServicePkg" Version="1.0.2" ...>
<ServiceTypes>
<StatelessServiceType ServiceTypeName="MyServiceType" />
</ServiceTypes>
...
</ServiceManifest>
Run Code Online (Sandbox Code Playgroud)
我的群集配置了展示位置属性.我有5台带有"nodeType = Backend"的服务器和3台带有"nodeType = Frontend"的服务器.
我想升级我的服务并指定它只能放在"后端"节点上.这是我更新的清单:
<ServiceManifest Name="MyServicePkg" Version="1.0.3" ...>
<ServiceTypes>
<StatelessServiceType ServiceTypeName="MyServiceType">
<PlacementConstraints>(nodeType==Backend)</PlacementConstraints>
</StatelessServiceType>
</ServiceTypes>
...
</ServiceManifest>
Run Code Online (Sandbox Code Playgroud)
但是,如果我现在执行升级,则会收到以下错误:
Start-ServiceFabricApplicationUpgrade:作为升级的一部分,不得修改默认服务描述.修改后的默认服务:fabric:/ MyApp/MyService
为什么不能通过升级来改变约束?
我是否必须删除并重新创建服务?这对我来说似乎非常有问题,因为它会导致有状态服务的停机和数据丢失.
所以这里的问题实际上是ApplicationManifest的DefaultService部分.当服务作为DefaultService的一部分创建时,之后您无法对其进行更改.您可以通过ServiceFabric资源管理器进行更改,但我不确定.
一个建议是在ApplicationManifest中保持DefaultServices为空,而是手动创建服务.手册我的意思是通过powershell,代码或ServiceFabric Explorer.这为您提供了更大的灵活性,可以在以后更改部分服务.当它以这种方式完成时,我知道您可以在服务运行后更改位置约束等内容.
要使用PowerShell创建服务,您可以使用该New-ServiceFabricService命令.要从代码创建它,您可以使用FabricClient它.可以在此处找到一个示例:Azure Service Fabric Multi-Tenancy
实际上,这是一种相当简单的方法,无需编写大量代码来在结构集群上手动定义应用程序.
虽然您可以在服务清单中声明放置约束,但您也可以在应用程序清单中声明它们.应用程序清单中声明的任何内容都将覆盖服务清单中的内容.通过应用程序清单中的设置,您可以使用参数根据您希望特定部署的参数文件来更改值.
我刚刚写了一篇博文,更详细地讨论了这种方法.希望对你有帮助.:)
| 归档时间: |
|
| 查看次数: |
3510 次 |
| 最近记录: |