有状态服务的副本是在群集的某个节点上运行的服务逻辑的副本。 本文介绍了Service Fabric的一项新增强功能——有状态副本的软删除。 副本软删除(RSD)为有状态工作负荷提供了额外的数据保护和操作安全层,有助于确保数据完整性和可靠性。 当对有状态持久服务使用“删除副本破坏性操作”时,此功能可防范意外或非故意的数据丢失。 Service Fabric 现在在删除数据时会保留副本的快照,直到分区重新赢得仲裁,而不是立即永久删除数据。 RSD 在后台为每个被删除的副本运行。
RSD 还包含智能删除逻辑,该逻辑会自动识别并永久删除在分区正常的情况下过期的软删除副本。 这可确保跨 Service Fabric 群集进行高效的资源管理。
副本软删除的主要优点包括:
- 操作安全和控制:防止因人为错误导致的意外数据丢失,提供还原选项和审核日志可见性。
- 数据复原能力与最少的存储和计算开销:在消除冗余副本并防止不必要的数据积累的同时保护数据。
软删除副本的生命周期
通过管理 PowerShell API(Remove-ServiceFabricReplica)或直接通过 Fabric 客户端 API 删除有状态服务副本时,Service Fabric 现在会将副本转换为 ToBeRemoved 状态。 在此新状态下,副本将关闭,释放计算资源。 但是,SF 继续跟踪这些副本,并确保在分区发生仲裁丧失时,不会清理磁盘上的副本数据。
如果删除副本会导致分区进入仲裁丢失状态,Service Fabric 将等待手动干预,通过恢复已软删除的副本来使分区脱离仲裁丢失。
使用新的还原副本 API(Restore-ServiceFabricReplica),能够使这些被软删除的副本被恢复,从而在不丢失数据的情况下重新获得仲裁。
如果分区状态良好,软删除的副本将在保留期到期后将被清理。
软删除的副本不会阻止服务或群集上的修复、升级或其他管理操作。 使用数据删除意图进行修复也会清理副本数据。
下图显示了副本软删除流:
选择加入过程
从 SF 11.3 开始,副本软删除在 Service Fabric 11.x 版本中作为可选功能提供。 从 SF 运行时版本 12.0 开始,默认为所有客户启用它。
从 SF 11.3 开始,可以通过将群集清单中的 ReconfigurationAgent 部分下的配置设置为 IsDelayedReplicaCleanupEnabled “true”来启用此行为。 例如,下面显示了使用 ARM 模板的配置更新:
{
"name": "ReconfigurationAgent",
"parameters": [
{
"name": "IsDelayedReplicaCleanupEnabled",
"value": "true"
}
]
}
用户体验更改
删除有状态服务副本(无论是通过管理 PowerShell API(Remove-ServiceFabricReplica)还是通过 Fabric 客户端 API),Service Fabric 都会将受影响的副本转换为 ToBeRemoved 状态。
ToBeRemoved 可以使用现有副本查询 API 查询副本。 若要恢复这些副本,引入了新的还原副本 API(Restore-ServiceFabricReplica)。 此 API 可与最新的 SF SDK 版本一起使用,也可以直接使用 PowerShell 或 FabricClient API。 有关这些部分中 API 行为的更多详细信息。
即使没有新的 SDK,在启用该功能后,副本仍会软删除,从而防止数据丢失。
通常,此行为更改不会影响使用删除副本 API 的现有工作流,因为如果分区正常,SF 会在删除副本后的 10 分钟内自动处理清理。 但是,在此简短窗口中,你可能会注意到一些暂时的副作用。 具体而言,具有软删除副本的节点上将无法放置同一分区的新副本。 此外,当标记为软删除的副本进行清理时,副本进程会暂时重启,以便优雅地清理磁盘资源。
注释
无论是否启用 备份和还原服务(BRS), RSD 都有效。
新引入的 API
Restore-ServiceFabricReplica:
- 语法类似于 Restart-ServiceFabricReplica。 通过重新打开 Replica 对象来恢复
ToBeRemoved副本。 如果分区处于仲裁丢失状态,客户应使用此 API 还原所有软删除的副本。 Service Fabric 会自动确定要保留哪些副本以恢复法定人数。
- 语法类似于 Restart-ServiceFabricReplica。 通过重新打开 Replica 对象来恢复
对现有 API 行为的更改
-
不带 -ForceRemove 参数:
- Remove-ServiceFabricReplica 现在将软删除响应的副本,而不是永久删除副本。
使用 -ForceRemove 参数:
- 与不使用参数相同,但我们只是不等待副本正常关闭。
-
- 输出将指示分区中哪些副本是
ToBeRemoved。
- 输出将指示分区中哪些副本是
Service Fabric Explorer (SFX) 更改
SFX 现在显示 ToBeRemoved 副本,以及它们将在何时被永久清理的时间。