DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的。

DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道:

  • 用于带外管理 (out-of-band management) 的 TCP/IP 网络;
  • 用于数据访问的高性能结构。

实际上,同一个网络可以用于管理和数据访问。IP over Fabric 也可用作管理网络。

DAOS 系统

DAOS 服务器是一个多租户守护进程,运行在 Linux 实例(物理节点、VM 或容器)上,管理分配给 DAOS 本地连接的 SCM (Storage-Class Memory) 和 NVM (Non-Volatile Memory) 存储。它监听由 IP 地址和 TCP 端口号寻址的管理端口,以及由网络 URI 寻址的一个或多个结构端点。

DAOS 服务器是通过 YAML 文件 /etc/daos/daos_server.yml(可通过命令行指定的其他路径)进行配置的。服务的启动和停止可以与不同的守护进程管理或编排框架集成(systemd 脚本、Kubernetes 服务、或类似 pdsh 和 srun 的并行启动程序)。

DAOS 系统由一个系统名标识,它由一组连接到同一结构的 DAOS 服务器组成。两个不同的系统由两组不相交的服务器组成,彼此不能相互协调。DAOS Pool 也不能跨多个系统。

在内部,DAOS 服务器由多个守护进程组成:

首先要启动的是控制平面(control plane,二进制名 daos_server)。

  • 它负责解析配置文件、配置存储并最终启动和监视数据平面的一个或多个实例。
  • 控制平面用 Go 编写,并在 gRPC 框架上实现 DAOS management API。该框架提供了一个安全的带外通道来管理 DAOS 系统。
  • 每个服务器要启动的数据平面实例的数量以及存储、CPU 和 Fabric Interface Affinity 可以通过 daos_server.yml 进行配置。

然后是数据平面(data plane,二进制名 daos_engine)。

  • 数据平面是一个用 C 编写的多线程进程,负责运行 DAOS 存储引擎。它通过 CART 通信中间件处理传入的元数据和 I/O 请求,并通过 PMDK(Persistent Memory Devevelopment Kit,用于 SCM)和 SPDK(Storage Performance Development Kit,用于 NVMe SSD)访问本地 NVM 存储。

  • 数据平面依赖于 ABT (Argobots) 进行基于事件的并行处理,并导出可通过结构独立寻址的多个 Target。

  • 在 DAOS 系统中,每个数据平面实例都被分配一个唯一的等级。

控制平面和数据平面进程通过 Unix Domain Sockets 和被称为 dRPC 的定制轻量级协议进行本地通信。

进一步阅读:

客户端 API,工具和 I/O 中间件

应用程序、用户和管理员可以通过两个不同的客户端 API 与 DAOS 系统交互。

DAOS management Go package 允许从任何可以通过带外管理通道与 DAOS 服务器通信的节点管理 DAOS 系统。此 API 保留给通过特定证书进行身份验证的 DAOS 系统管理员。DAOS management API 旨在与不同供应商的存储管理或开源编排框架集成。名为 dmg 的命令行工具是在 DAOS management API 上构建的。

进一步阅读:

DAOS 库 libdaos 实现了 DAOS 存储模型,主要面向希望将数据集存储到 DAOS container 中的应用程序和 I/O 中间件开发人员。它可以被连接到目标 DAOS 系统所使用的结构的任何节点使用。

应用程序进程通过 DAOS 代理进行身份验证。libdaos 导出的 API 通常称为 DAOS API(不同于 DAOS management API),允许通过不同的接口(例如键值存储或 array API)管理 container 和访问 DAOS 对象。

libdfs 库模拟 libdaos 上的 POSIX 文件和目录抽象,并为需要 POSIX 命名空间的应用程序提供平滑的迁移过程。

进一步阅读:

libdaos 和 libdfs 库为支持特定的数据格式(例如 HDF5 和 Apache Arrow)提供了基础。

进一步阅读:

代理

DAOS 代理 (DAOS agent) 是驻留在客户端节点上的守护程序,它通过 dRPC 与 DAOS 客户端库进行交互,以验证应用程序进程。

DAOS 代理是一个可信任的实体,可以使用本地证书对 DAOS 客户端凭据进行签名,同时支持不同的身份验证框架,并使用 Unix Domain Sockets 与客户端库通信。

DAOS 代理用 Go 编写,通过 gRPC 与每个 DAOS 服务器的控制平面组件进行通信,向客户端库提供 DAOS 系统成员信息,并支持 Pool 列表。

相关信息

GitHub: https://github.com/storagezhang

Emai: debugzhang@163.com

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

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

本文翻译自 https://github.com/daos-stack/daos/blob/master/src/engine/README.md

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 依靠大规模分布式单端口存储.因此,每个 Target 实际上都是一个单独的失败点. DAOS 通过在不同的容错域中提供 Target 间的冗余来实现数据和元数据的可用性和持久性.DAOS 内 ...

  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. VSCode & SQL

    VSCode & SQL MySQL MySQL https://marketplace.visualstudio.com/items?itemName=formulahendry.vscod ...

  2. js assert

    js assert console.assert The console.assert() method writes an error message to the console if the a ...

  3. jsbridge 原理 & 通信原理

    jsbridge 原理 & 通信原理 Hybrid 方案是基于 WebView 的,JavaScript 执行在 WebView 的 Webkit 引擎中; 因此,Hybrid 方案中 JSB ...

  4. SPC空投糖果,是白捡还是风险?

    2020年,币圈刮起了空投风,很多项目纷纷"撒钱"在空投中,在空投中获利多者白捡上百万美刀,少的也薅了万把块羊毛,币圈的空投无时不刻透露着天上掉馅饼的气息.NGK官方在2020年年 ...

  5. Java 线程间通信 —— 等待 / 通知机制

    本文部分摘自<Java 并发编程的艺术> volatile 和 synchronize 关键字 每个处于运行状态的线程,如果仅仅是孤立地运行,那么它产生的作用很小,如果多个线程能够相互配合 ...

  6. webpack理解

    打包工具 可以将多个静态文件打包成一个静态文件例如将1.js.2.js.3.css打包成h.js一个静态文件 这样做的好处是:可以减少页面的请求次数 以往是请求多个静态页面,使用webpack后会减少 ...

  7. Debian 基本使用进阶

    系统安装好了我们,迫不及待的想要在Linux系统中肆意翱翔.如果是刚刚接触Linux的系统的话,可能一时间还无法适应Linux的系统环境.对于使用Debian来做服务器的选择,最好的练习方式的就是使用 ...

  8. SpringBoot2.2.5整合ElasticSearch7.9.2

    1:前言 为什么是SpringBoot2.2.5,不是其他的SpringBoot版本,原因有两个: 1:SpringBoot2.2.0以上才能支持ElasticSearch7.x版本. 2:Sprin ...

  9. Hi3559AV100-自己编译了u-boot、kernel及rootfs后,出现烧写错误或者烧写后板载无法启动的解决思路

    这篇随笔主要给出了Hi3559AV100-自己编译了u-boot.kernel及rootfs后,出现烧写错误或者烧写后板载无法启动的解决思路. 问题 (1)对于 u-boot 为官方的,kernel ...

  10. Hi3519 SDK搭建、问题总结及yolov3 RFCN的运行结果与测试

    下面记录一下,在搭建Hi3519A SDK的注意事项与遇到的问题解决,及Hi3519A SDK环境下进行yolov3.RFCN的测试.(具体的Hi3519A的SDK环境搭建参考后面随笔-Hi3559A ...