你当前正在访问 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

这种配置经常会进入仲裁丢失状态(每当计划内和计划外故障转移同时发生时)。 若要从仲裁丢失状态中恢复,仅恢复一个副本是不够的,还需要副本集的确切副本恢复。

此图显示当 TargetReplicaSetSize = 3 且 MinReplicaSetSize = 2 时,在以下序列的每个故障转移阶段的群集中的节点

  1. 分区有三个副本:A、B、C
  2. 副本 A 关闭,Service Fabric 将副本数降为 2 (B, C)
  3. 发生计划外故障转移,副本 B 也关闭,分区现在处于仲裁丢失状态
  4. 如果副本 A 恢复,分区将保持仲裁丢失状态,因为 A 不是当前副本集 (B, C) 的一部分。 只有当副本 B 恢复时,才能修复仲裁丢失状态。

TargetReplicaSetSize = 3;MinReplicaSetSize = 3

这种配置经常会进入仲裁丢失状态(每当计划内和计划外故障转移同时发生时)。 但是,只要这些副本中的任何一个恢复,分区就会从仲裁丢失中恢复。

警告

这种配置仍不是最佳配置,它只是比 TagetReplicaSetSize =3、MinReplicaSetSize = 2 稍微好一些。

此图显示当 TargetReplicaSetSize = 3 且 MinReplicaSetSize = 3 时,在以下序列的每个故障转移阶段的群集中的节点

  1. 分区有三个副本:A、B、C
  2. 副本 A 关闭,副本集还是一样 (A, B, C)
  3. 发生计划外故障转移,副本 B 也关闭,分区现在处于仲裁丢失状态
  4. 只要副本 A 或 B 中的任何一个恢复,分区就会还原仲裁,因为 A 和 B 都是当前副本集的一部分

后续步骤