DAOS 依靠大规模分布式单端口存储。因此,每个 Target 实际上都是一个单独的失败点。

DAOS 通过在不同的容错域中提供 Target 间的冗余来实现数据和元数据的可用性和持久性。DAOS 内部的 Pool 和 Container 的元数据通过强一致性算法进行复制。然后,通过在内部透明地利用 DAOS 分布式事务机制,DAOS 对象被安全地复制或纠删码编码。本节的目的是提供有关 DAOS 如何实现容错和保证对象弹性的详细信息。

分层容错域

容错域是一组共享同一故障点的服务器,因此很可能同时发生故障。DAOS 假设容错域是分层且不重叠的。实际的层次结构和容错域成员身份必须由 DAOS 用于生成 Pool 映射的外部数据库提供。

Pool 元数据从不同的高级容错域复制到多个节点上,以获得高可用性,而对象数据则根据选定的 Object 类在不同数量的容错域上进行复制或纠删码编码。

故障检测

DAOS 服务器通过基于 gossip 的协议 SWIM 在 DAOS 系统中进行监控,该协议提供了准确、高效和可扩展的服务故障检测。系统通过定期的本地健康评估监控附加到每个 DAOS Target 上的存储,每当本地存储 I/O 错误返回到 DAOS 服务器时,将自动调用内部运行状况检查程序。此程序将通过分析 IO 错误代码和设备智能/健康数据来进行总体健康评估。如果结果是否定的,Target 将被标记为有故障的,并且到该 Target 的进一步 I/O 将被拒绝并重新路由。

故障隔离

检测到故障后,必须从 Pool 映射中排除故障 Target 或服务器(实际上是一组 Target)。此过程自动触发或由管理员手动触发。

排除后,Pool 映射的新版本将急切地推送到所有存储 Target。此时,Pool 进入降级模式,可能需要额外的访问处理(例如,用纠删码重建数据)。此时 DAOS 客户端和存储节点无限期地重试 RPC,直到它们从新的 Pool 映射中找到替代的 Target。此时,与被排除的 Target 的所有未完成的通信都将中止,在 Target 重新显式集成之前(可能仅在维护操作之后),不应再向其发送任何消息。

Pool 服务会立即向所有存储 Target 通知 Pool 映射的更改。但客户端节点不是这样,它们每次与服务器通信时都会被延迟地通知 Pool 映射无效。为此,客户端将其当前 Pool 映射版本打包到每个 RPC 中,服务器将回复当前 Pool 映射版本。因此,当 DAOS 客户端遇到 RPC 超时时,它会定期与其他 DAOS Target 进行通信,以确保其 Pool 映射始终是最新的。最终,客户端将知晓 Target 被排除并进入降级模式。

这种机制保证了全局节点排除,并且所有节点最终共享相同的 Target 有效性视图。

故障恢复

从 Pool 映射中排除后,每个 Target 将自动启动重建过程以恢复数据冗余。首先,每个 Target 创建一个受被排除的 Target 影响的本地对象列表。该列表是通过扫描由底层存储层维护的本地对象表来完成的。然后,对于每个受影响的对象,将确定新对象分片的位置,并恢复历史对象的冗余(即快照)。重建所有受影响的对象后,Pool 映射将再次更新,以将 Target 报告为失败。这标志着集体重建过程的结束,以及此特定故障的降级模式的退出。此时,Pool 已从故障中完全恢复,客户端节点现在可以读取重建的对象分片。

此重建过程在应用程序持续访问并更新对象时在线执行。

相关信息

GitHub: https://github.com/storagezhang

Emai: debugzhang@163.com

华为云社区: https://bbs.huaweicloud.com/blogs/254523

DAOS: https://github.com/daos-stack/daos

本文翻译自 https://daos-stack.github.io/overview/fault

DAOS 分布式异步对象存储|故障模型的更多相关文章

  1. 从两个模型带你了解DAOS 分布式异步对象存储

    摘要:分布式异步对象存储 (DAOS) 是一个开源的对象存储系统,专为大规模分布式非易失性内存 (NVM, Non-Volatile Memory) 设计,利用了 SCM(Storage-Class ...

  2. DAOS 分布式异步对象存储|架构设计

    分布式异步对象存储 (DAOS) 是一个开源的对象存储系统,专为大规模分布式非易失性内存 (NVM, Non-Volatile Memory) 设计,利用了SCM(Storage-Class Memo ...

  3. DAOS 分布式异步对象存储|存储模型

    概述 DAOS Pool 是分布在 Target 集合上的存储资源预留.分配给每个 Target 上的 Pool 的实际空间称为 Pool Shard. 分配给 Pool 的总空间在创建时确定,后期可 ...

  4. DAOS 分布式异步对象存储|相关组件

    DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的. DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道: 用于带 ...

  5. DAOS 分布式异步对象存储|事务模型

    DAOS API 支持分布式事务,允许将针对属于同一 Container 的对象的任何更新操作组合到单个 ACID 事务中.分布式一致性是通过基于多版本时间戳排序的无锁乐观并发控制机制提供的.DAOS ...

  6. DAOS 分布式异步对象存储|数据平面

    DAOS 通过两个紧密集成的平面进行运转.数据平面处理繁重的运输操作,而控制平面负责进程编排和存储管理,简化数据平面的操作. 模块接口 I/O 引擎支持一个模块接口,该接口允许按需加载服务器端代码.每 ...

  7. DAOS 分布式异步对象存储|安全模型

    DAOS 使用了一个灵活的安全模型,将身份验证和授权分离开来.它的设计令其对 I/O 的影响被降到最小. DAOS 对用于 I/O 传输的网络结构没有提供任何传输安全性保障.在部署 DAOS 时,管理 ...

  8. OSS与文件系统的对比 文件存储 块存储 对象存储

    基本概念介绍_开发指南_对象存储 OSS-阿里云  https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...

  9. go语言实现分布式对象存储系统之单体对象存储

    对象存储 基本概念 主流存储类型分为三种:块存储.文件存储以及对象存储 NAS(文件存储):Network Attached storage,提供了存储功能和文件系统的网络服务器,客户端可以访问NAS ...

随机推荐

  1. Github OAuth All In One

    Github OAuth All In One new https://docs.github.com/en/free-pro-team@latest/developers/apps/authoriz ...

  2. npm & config settings

    npm & config settings how to check npm config settings https://docs.npmjs.com/cli/config $ npm c ...

  3. mobile css & rem & em & px

    mobile css & rem & em & px 1 rem === 16px 任意浏览器的默认字体高都是 16px, 所有未经调整的浏览器都符合: 1em=16px, 那 ...

  4. TweenMax & GSAP & SVG Animation

    TweenMax & GSAP & SVG Animation svg animation https://greensock.com/tweenmax GSAP https://ww ...

  5. svg & regex

    svg & regex https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reg ...

  6. 「NGK每日快讯」12.24日NGK第51期官方快讯!

  7. 按键显示器(判断键盘监听器获得的值为普通Key还中modifiers)

    1 import sys 2 from PyQt5 import QtWidgets,QtCore 3 from PyQt5.QtCore import Qt 4 from PyQt5.uic.pro ...

  8. Python 爬虫使用动态切换ip防止封杀

    对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的. 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云. 其 ...

  9. [Python] 茎叶图和复合饼图的画法

    目录 茎叶图 复合饼图 茎叶图 from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,19 ...

  10. 微信小程序:app.json中通过使用扩展库userExtendedLib的方式,引入并使用weui

    微信小程序  PK  APP: 1.微信有海量⽤⼾,⽽且粘性很⾼,在微信⾥开发产品更容易触达⽤⼾:而推⼴app的成本太⾼. 2.微信小程序也可以跨平台(Android和IOS). 一.project. ...