你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
有状态服务副本集大小配置
有状态服务的副本集大小是使用两个参数配置的。
- TargetReplicaSetSize - 系统为服务的每个副本集创建和维护的副本数
- MinReplicaSetSize - 服务的每个副本集允许的最小副本数
这两个参数背后的基本理念是允许这样一种配置:允许至少发生两个并发故障,而分区不会进入仲裁丢失状态。 当有一个计划内故障转移(升级使节点/副本关闭)和一个计划外故障转移(节点崩溃)时,会发生这种情况。
例如,如果 TargetReplicaSetSize =5,MinReplicaSetSize =3,那么正常情况下(没有故障),副本集的 Service Fabrics 视图中有五个副本。 如果发生故障,副本集的 Service Fabrics 视图中的副本将减少,直到达到 MinReplicaSetSize。
Service Fabric 使用此视图中维护的副本数的多数仲裁,因此 MinReplicaSetSize 的多数仲裁是任意操作的最低可靠性级别。 如果副本总数低于 MinReplicaSetSize 的多数仲裁,则不允许进一步写入。 必须注意的是,当服务处于仲裁丢失状态时,它可能要求副本按特定顺序返回,以便从仲裁丢失状态中恢复。
重要
在 TargetReplicaSetSize = 5、MinReplicaSetSize = 3 的示例中,MinReplicaSetSize 的多数仲裁为 2。 这意味着,即使有三个并发故障,导致只有两个剩余副本在运行,Service Fabric 在其副本集视图中仍将有 3 个副本(两个运行,一个关闭),其余两个正在运行的副本足以满足多数仲裁。
次优配置的示例
TargetReplicaSetSize = 3;MinReplicaSetSize = 2
这种配置经常会进入仲裁丢失状态(每当计划内和计划外故障转移同时发生时)。 若要从仲裁丢失状态中恢复,仅恢复一个副本是不够的,还需要副本集的确切副本恢复。
- 分区有三个副本:A、B、C
- 副本 A 关闭,Service Fabric 将副本数降为 2 (B, C)
- 发生计划外故障转移,副本 B 也关闭,分区现在处于仲裁丢失状态
- 如果副本 A 恢复,分区将保持仲裁丢失状态,因为 A 不是当前副本集 (B, C) 的一部分。 只有当副本 B 恢复时,才能修复仲裁丢失状态。
TargetReplicaSetSize = 3;MinReplicaSetSize = 3
这种配置经常会进入仲裁丢失状态(每当计划内和计划外故障转移同时发生时)。 但是,只要这些副本中的任何一个恢复,分区就会从仲裁丢失中恢复。
警告
这种配置仍不是最佳配置,它只是比 TagetReplicaSetSize =3、MinReplicaSetSize = 2 稍微好一些。
- 分区有三个副本:A、B、C
- 副本 A 关闭,副本集还是一样 (A, B, C)
- 发生计划外故障转移,副本 B 也关闭,分区现在处于仲裁丢失状态
- 只要副本 A 或 B 中的任何一个恢复,分区就会还原仲裁,因为 A 和 B 都是当前副本集的一部分
后续步骤
- 了解仲裁丢失和 Azure Service Fabric 的灾难恢复
- 了解 Service Fabric 支持选项。