本文介绍了一种高级容错能力:通过利用第三个可用区(AZ),为部署在两个可用区中的全功能应用程序提供支持。
Important
此功能需要三个区域群集布局:
- 用于常规服务负载的两个大型区域。
- 用于支持种子节点仲裁的一个小区域。
按需创建的辅助副本可在双区域应用部署中帮助保障计划内维护期间的写入可用性,方法是暂时维持更安全的副本分布状态。
概述
在 2-AZ 部署中,计划内操作(例如应用程序升级、群集升级和节点停用)可能会暂时从分区中删除一个副本。
如果在该时间窗口内发生区域中断,分区的写入副本数可能会低于写入仲裁所需的法定数量,并进入仲裁丢失状态。
可用性区域环功能通过在计划内维护期间创建临时辅助副本并在原始副本返回后将其删除来降低此风险。
什么是辅助副本?
辅助副本是专门用于超出 Primary、IdleSecondary 和 ActiveSecondary 正常角色范围的高级复制器级场景的特殊副本。
关键行为:
- 未向辅助副本授予读取或写入访问权限。
- 服务Fabric在均衡或故障转移期间不将辅助副本视为初选目标。
- 他们可以观察用于审计、监控或临时复制端处理等场景的复制情况。
此功能适用于高级工作负荷,并且可能需要相应的应用程序复制器更改。
为何使用辅助副本?
如果没有此功能,计划内的副本下线事件再加上区域故障,可能会导致分区陷入仲裁丢失状态。
启用此功能后,Service Fabric 会在计划停止运行的副本所在的同一可用性区域中,在该副本停止运行事件发生之前创建一个临时辅助副本。 此辅助副本可以在同一故障时段内维持仲裁。
优点:
- 在 2-AZ 应用程序部署中,可在计划内维护期间提升可用性。
- 有助于保持更安全的跨可用区写入仲裁分布。
- 为不希望在所有可用区都部署完整工作负载容量的客户,提供一种更注重容量优化的三可用区拓扑。
- 由于辅助副本是临时副本,因此不会增加稳定状态副本开销。
示例失败方案
场景:当可用区 2 中计划中的副本下线事件正在进行时,可用区 1 变为不可用。
无按需辅助副本:
- 一个常规副本已因维护而离线。
- 区域中断会删除其他副本。
- 分区可以进入失去仲裁状态。
采用按需辅助副本时:
- Service Fabric 会在计划内副本下线事件发生之前创建一个辅助副本。
- 如果可用区中断在同一时间窗口内发生,仍会有一个额外的副本可用。
- 该分区更有可能保留写入仲裁并自动恢复。
Important
仅当副本在中断窗口前状态正常时,保护才适用。 如果某个副本在可用区发生故障之前就已意外宕机,仍可能出现仲裁丢失。
先决条件
应用程序代码 必须 支持辅助副本(自定义
IReplicator方案)。Service Fabric 11.5 或更高版本。
跨三个可用区的 Service Fabric 经典型(SFRP)群集拓扑:
- 两个大型区域(例如区域 1 和区域 2)托管常规服务副本和种子节点。
- 一个小区域(例如区域 3)仅托管种子节点。
配置按需辅助副本
步骤 1:启用群集级构造设置
将这些设置添加到群集结构配置:
| Section | 参数 | 价值 |
|---|---|---|
Common |
EnableAuxiliaryReplicas |
true |
PlacementAndLoadBalancing |
OnDemandReplicaConstraintPriority |
0 |
示例代码段:
"fabricSettings": [
{
"name": "Common",
"parameters": [
{
"name": "EnableAuxiliaryReplicas",
"value": "true"
}
]
},
{
"name": "PlacementAndLoadBalancing",
"parameters": [
{
"name": "OnDemandReplicaConstraintPriority",
"value": "0"
}
]
}
]
步骤 2:配置各个目标有状态服务
使用以下服务设置:
| 设置 | 价值 |
|---|---|
| 目标副本集大小 | 最小值 4 |
| 最小副本集大小 | 3 |
| 启用按需辅助副本 | true |
| 具有持久化状态 | true |
若要使用户服务远离仅种子区域,请使用放置约束,例如 NodeTypeName != ntSeed。
步骤 3:验证运行时行为
部署后:
- 启动滚动升级或节点停用。
- 观察分区副本集更改。
- 确认辅助副本在计划的副本下线事件之前出现。
- 确认维护完成后辅助副本已被删除。