ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Longhorn 强制激活恢复中/灾备(DR)卷:让降级卷在健康副本存在时可用的完整实现指南

Longhorn 强制激活恢复中/灾备(DR)卷:让降级卷在健康副本存在时可用的完整实现指南 云原生存储高可用容器编排【免费下载链接】longhornCloud-Native distributed storage built on and for Kubernetes项目地址https://gitcode.com/gh_mirrors/lo/longhorn点击查看免费下载导读本文基于 Longhorn 开源仓库中的增强设计文档enhancements/20230601-forcibly-activate-a-restoring-dr-volume.md展开。它解决的是一个真实痛点当用户尝试激活一个正在恢复中restoring或灾备DRDisaster Recovery卷时如果该卷存在部分副本replica因故失败卷会卡在 attaching挂载中状态用户除了删除卷之外别无选择——尽管只要还有一块健康副本卷完全有机会重新构建回正常状态。本文梳理该功能的动机、前置条件、两种激活路径kubectl 与 Longhorn UI、底层设计流程与官方测试方案并结合仓库中的全局设置、CRD 与 Helm Chart 配置给出可落地的操作指引。1. 背景与动机为什么需要强制激活能力1.1 问题场景DR 卷灾备卷是 Longhorn 基于备份目标backup target创建的卷它持续从远端备份存储同步增量数据平时处于standby待命状态、不对外提供服务。当用户决定正式启用该卷例如主集群故障、切换流量到备集群需要将volume.spec.Standby从true改为false完成激活。问题在于如果卷在同步/恢复过程中已有部分副本失败例如节点宕机、磁盘异常卷可能只剩部分健康副本。此时用户触发激活卷会卡在 attaching 状态既无法继续使用也无法轻易恢复最终只能删除卷重建数据服务被迫中断。1.2 目标设计文档明确了本功能的核心目标Allow users to activate a restoring/DR volume as long as there is a healthy replica and the volume works well.即只要卷存在至少一块健康副本、并且卷本身可以正常工作就允许用户激活正在恢复中的 DR 卷即使该卷处于降级degraded状态。该功能在 Longhorn 1.5.0 版本中正式落地对应功能 issue #1512由 mantissahz 与 weizhe0422 实现。配套修复还包括DR 卷在存在一个或多个失败副本时激活后仍停留在 standby 模式issue #3069确保激活行为在降级场景下也完整生效。2. 提案由全局设置开关控制的强制激活功能的实现方式非常克制默认行为不变只有用户显式开启全局设置allow-volume-creation-with-degraded-availability后强制激活才被允许。Forcibly activate a restoring/DR volume if there is a healthy replica and users enable the global setting allow-volume-creation-with-degraded-availability.这样既解决了降级 DR 卷的可用性问题又不会破坏原有的数据安全语义——用户需要对创建降级可用性卷这一行为主动授权。2.1 相关全局设置allow-volume-creation-with-degraded-availability该设置允许用户在创建卷时不必等所有副本都完成调度即可创建并挂载卷即容忍降级可用性。它的定义可以在 Helm Chart 中找到chart/templates/default-setting.yaml将用户配置值写入 Longhorn 默认设置allow-volume-creation-with-degraded-availability: {{ .Values.defaultSettings.allowVolumeCreationWithDegradedAvailability }}chart/values.yaml对应 Helm 参数allowVolumeCreationWithDegradedAvailability注释明确说明其语义——允许在创建卷时不必等待所有副本调度完成即可创建并挂载deploy/longhorn.yaml 与 deploy/longhorn-okd.yaml通过 Longhorn Manager Deployment 的 env 注入该设置的默认值供 longhorn-manager 读取。值得注意的是该设置原本是针对创建卷的降级容忍本功能将其语义延伸到了激活恢复中/DR 卷这一操作上——两者本质上都是允许卷以降级副本数投入运行。2.2 API 变化设计文档明确指出 API 层面没有任何变化None。激活动作依然走既有的 VolumeactivateAPI只是激活时的前置校验逻辑发生了改变不再强制要求卷拥有全部健康副本而是允许在设置开启 至少一块健康副本的条件下放行。3. 用户故事与操作路径3.1 前置条件搭建双集群 DR 环境按设计文档给出的完整流程准备测试/使用环境准备两个 Kubernetes 集群下文称集群 A 与集群 B在两个集群上都安装 Longhorn在两个集群上配置相同的备份目标backup target保证 A 的备份在 B 上可见在集群 A 中确保原始卷 X 已创建过备份或已配置了定期备份recurring backups任务在集群 B 的 Backup备份页面中选中备份卷 X创建灾备卷 Y。此时卷 Y 处于 standby 状态持续从备份目标拉取并同步最新增量数据但不对工作负载提供服务。3.2 激活方式一kubectl用户通过编辑卷 CR 将volume.spec.Standby设置为false即可触发激活kubectl -n longhorn-system edit volume dr-volume-name把 manifest 中的字段改为apiVersion: longhorn.io/v1beta2 kind: Volume metadata: name: dr-volume-name namespace: longhorn-system spec: standby: false # 由 true 改为 false触发激活也可以直接修改创建卷时使用的 YAML 清单后再 apply。需要注意的是若卷存在失败副本且全局设置allow-volume-creation-with-degraded-availability未开启或没有健康副本激活流程仍会按原逻辑处理无法完成激活这正是本功能要改变的行为。3.3 激活方式二Longhorn UI在 Longhorn UI 的Volume或Volume Details页面中用户点击Activate Disaster Recovery Volume激活灾备卷按钮即可完成激活效果与 kubectl 修改standby字段一致。UI 的按钮操作最终也会落到对 Volume CR 的activate调用上。4. 设计实现概览与判断逻辑设计文档给出的实现概览非常简洁共三步1. Check if volume.Spec.Standby is set to false 2. Get the global setting allow-volume-creation-with-degraded-availability 3. Activate the DR volume if allow-volume-creation-with-degraded-availability is set to true and there are one or more ready replicas.对应到激活流程的判定逻辑可形式化为条件含义满足后动作volume.Spec.Standby false用户发起激活意图进入激活校验流程全局设置allow-volume-creation-with-degraded-availability true用户允许降级可用性卷允许降级激活存在 ≥1 个 ready健康/就绪副本卷有可用的数据基础放行激活三者都满足时longhorn-manager 允许该 DR 卷以降级副本数完成激活卷随后进入可用状态剩余副本可以继续重建rebuild将卷恢复为完整副本数。若设置未开启则维持原有严格行为要求副本齐全才允许激活。4.1 从源码结构看激活的实现落点从当前仓库的源码结构可以推断该逻辑实现在 longhorn-manager 的卷控制器volume controller中激活动作经由 Volume CR 的activate操作触发控制器在 reconcile 流程中读取volume.Spec.Standby与全局设置allow-volume-creation-with-degraded-availability并检查副本的 ready 状态通过 replica CR 的spec.HealthyAt/运行状态等字段判断来决定是否放行。由于本仓库以发行版 manifests 与文档为主具体 Go 实现细节以实际安装的 longhorn-manager 版本为准行为语义与上述三步判断一致。4.2 激活后的副本重建激活成功后卷会进入正常运行状态并可以被挂载到节点。由于激活时可能只存在部分健康副本longhorn-manager 会通过副本重建流程把卷补全到期望副本数。重建期间卷以降级degraded状态对外提供读写这不影响数据一致性——降级卷的所有读写都会经过引擎engine代理到健康副本。5. 测试方案如何验证强制激活设计文档附带的官方测试计划可作为功能验证含自动化 e2e 测试的完整步骤Test Forcibly Activating A Restoring/DR Volume 1. Create a DR volume 2. Set the global setting concurrent-replica-rebuild-per-node-limit to be 0 3. Fail some replicas 4. Check if there is at least one healthy replica 5. Call the API activate 6. The volume could be activated 7. Attach the volume to a node and check if data is correct逐条解读测试设计意图创建 DR 卷从备份目标创建 DR 卷使其处于 standby 恢复状态设置concurrent-replica-rebuild-per-node-limit为 0通过将该设置每节点并发副本重建数上限设为 0暂时禁止副本重建从而冻结副本状态、避免失败副本被自动重建掩盖问题这是精确复现降级卷激活场景的关键手段。该设置定义见 chart/values.yamlconcurrentReplicaRebuildPerNodeLimit使部分副本失败模拟真实故障如驱逐副本所在节点/磁盘制造降级场景确认至少存在一块健康副本这是强制激活成功的前提条件调用 activate API等价于 UI 按钮或 kubectl 将standby置为false卷能够成功激活验证在设置开启的前提下降级卷不再卡在 attaching 状态挂载卷并校验数据将激活后的卷挂载到节点比对数据验证强制激活后卷的数据完整性不受影响。该测试覆盖了降级副本 激活 数据正确性三个关键维度与功能目标healthy replica 存在时卷可用一一对应。6. 升级策略与后续演进设计文档明确本功能不涉及升级策略变更Upgrade strategy: None也没有额外的注意事项Note: None即对已部署的 Longhorn 集群无需特殊迁移步骤。不过后续版本演进中社区仍在持续加固 DR 卷激活相关行为从 CHANGELOG 目录可以看到一系列相关修复与增强例如v1.4.x修复激活 DR 卷时与备份目标同步的问题、修复存在失败副本时激活后仍停留 standby的问题v1.5.x修复激活后的 DR 卷未包含最新数据、最新备份被删除后无法激活等问题v1.10/v1.11/v1.12持续修复 v2 数据引擎SPDKDR 卷在节点重启、引擎镜像删除、增量恢复期间重建触发等场景下的卡死与 faulted 问题。这些变更说明DR 卷激活是一条仍在持续打磨的关键链路使用时应关注当前版本对应的 CHANGELOG。7. 实操建议与注意事项默认不开按需开启allow-volume-creation-with-degraded-availability默认不启用。只有当你的灾备切换场景可以接受卷以降级副本数先行可用、副本后续重建时才开启该设置。可通过 Longhorn UI 的 Settings 页面或 Helm 安装时设置defaultSettings.allowVolumeCreationWithDegradedAvailability: true开启参考 chart/values.yaml。健康副本是硬前提强制激活只在至少存在一块 ready 副本时生效若所有副本均失败卷无法被激活仍需走删除重建路径。激活后立即验证数据参考官方测试步骤激活后务必挂载卷并执行数据一致性检查如文件系统 fsck、应用层校验。重建限额可作测试开关concurrent-replica-rebuild-per-node-limit设为 0 可用于临时冻结副本重建复现/调试降级场景排查完毕记得恢复。关注版本差异不同 Longhorn 版本对 DR 卷激活的边界行为如备份同步时机、增量恢复中断处理存在差异生产环境请结合你所使用版本的 CHANGELOG 与 support-versions.txt 确认行为。小结Longhorn 通过全局设置开关 健康副本存在性检查两个条件把降级 DR 卷的强制激活变成一种安全、可控、可回退的能力默认行为严格用户显式授权后才允许降级激活激活后的卷保持数据可用并通过副本重建逐步恢复完整度。对于依赖跨集群备份进行灾备切换的团队这一能力显著提升了故障切换场景下的可用性避免删卷重建这一最后手段成为唯一选项。赞分享云原生存储高可用容器编排【免费下载链接】longhornCloud-Native distributed storage built on and for Kubernetes项目地址https://gitcode.com/gh_mirrors/lo/longhorn点击查看免费下载相关推荐Longhorn 自动离线副本重建Offline Replica RebuildingV2 Data Engine 降级卷的自动恢复机制Longhorn 自动离线副本重建Offline Replica RebuildingV2 Data Engine 降级卷的自动恢复机制 导读 本文围绕云原生存储高可用容器编排Longhorn健康检查终极指南如何全方位监控节点、卷与副本状态Longhorn健康检查终极指南如何全方位监控节点、卷与副本状态 Longhorn作为Kubernetes的云原生分布式存储系统其健康检查机制是确保数据可靠云原生存储高可用容器编排揭秘texture-vs-shape项目为什么ImageNet训练的CNN更偏爱纹理而非形状揭秘texture vs shape项目为什么ImageNet训练的CNN更偏爱纹理而非形状 texture vs shape项目是一个开源研究项目提供了上一篇网盘直链获取实战指南一个脚本打通八大网盘把下载交给专业工具下一篇如何在CTF流量分析中快速找到隐藏flag一次深夜参赛实录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表