即使节点处于禁用状态,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() 也会失败。的主要内容,如果未能解决你的问题,请参考以下文章

K8S Node启动后 处于NotReady状态的问题

具有 5 个节点的 Service Fabric 本地开发集群运行的实例和分区少于预期

Azure 上托管的高可用性 Service Fabric WebApi

如何禁用节点自动修复

Hyperledger Fabric 1.0 从零开始——创建Fabric多节点集群

ES集群 分片UNASSIGNED