即使节点处于禁用状态,Fabric 集群中节点上的 RemoveNodeStateAsync() 也会失败。
Posted
技术标签:
【中文标题】即使节点处于禁用状态,Fabric 集群中节点上的 RemoveNodeStateAsync() 也会失败。【英文标题】:RemoveNodeStateAsync() on a node in fabric cluster fails even when the node is in disabled state. 【发布时间】:2018-01-27 09:02:54 【问题描述】:我为集群中的节点缩放设置了自定义自动缩放。放大效果很好。我有缩小规模的问题。问题是当我想缩小规模时,我确定了我想删除的节点——然后我调用 DeactivateNodeAsync() 方法来删除节点。我等到停用完成后,检查节点的状态以确认它已禁用。一旦它被禁用,我调用方法 RemoveNodeStateAsync() 以便集群可以注册该节点正在被删除。
但我的问题是 - 当我调用 RemoveNodeStateAsync() 时,我收到以下异常 - 这表示节点已启动。这是完全的例外。
缩放容器:缩放节点失败。例外 : System.AggregateException:发生一个或多个错误。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Fabric.FabricException:节点已启动。 ---> System.Runtime.InteropServices.COMException:来自 HRESULT 的异常: 0x80071BC4 在 System.Fabric.Interop.NativeClient.IFabricClusterManagementClient9.EndNodeStateRemoved(IFabricAsyncOperationContext 上下文)在 System.Fabric.Interop.Utility.c__DisplayClass20_0.b__0(IFabricAsyncOperationContext 上下文)在 System.Fabric.Interop.AsyncCallOutAdapter2`1.Finish(IFabricAsyncOperationContext context, Boolean expectedCompletedSynchronously) --- 内部结束 异常堆栈跟踪 --- --- 内部异常堆栈跟踪结束 --- 在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时, CancellationToken cancelToken)
我错过了什么?为什么即使在明确检查表示节点已禁用的状态后仍说节点已启动?如何注册到删除某个节点的集群。感谢您对此的任何帮助。
【问题讨论】:
【参考方案1】:我在这篇蔚蓝的文章中找到了答案:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-programmatic-scaling
RemoveNodeState 需要在从 ScaleSet 中删除节点之后而不是之前完成。
【讨论】:
以上是关于即使节点处于禁用状态,Fabric 集群中节点上的 RemoveNodeStateAsync() 也会失败。的主要内容,如果未能解决你的问题,请参考以下文章
具有 5 个节点的 Service Fabric 本地开发集群运行的实例和分区少于预期
Azure 上托管的高可用性 Service Fabric WebApi