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 命名空间的应用程序提供平滑的迁移过程。

进一步阅读:

libdaoslibdfs 库为支持特定的数据格式(例如 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

最新文章

  1. war 文件打包技巧
  2. 从MyEclipse转战到IntelliJ IDEA的经历
  3. (原) tmux安装与使用
  4. json数据处理实战:Kafka+Flume+Morphline+Solr+Hue数据组合索引
  5. SQL Server 百万级数据提高查询速度的方法
  6. XML 简介
  7. 从表中删除重复记录的sql
  8. SarePoint Powershell Add user to Group
  9. eclipse中导入一个android工程有The import android cannot be resolved错误怎么办
  10. java普通servlet三层开发模式图
  11. (medium)LeetCode 222.Count Complete Tree Nodes
  12. wordpress代理设置
  13. 【分享】生成Revit扩展的addin文件小工具
  14. Python的高级Git库 Gittle
  15. CMDB机柜平台结合zabbix告警展示
  16. PAT_1010 一元多项式求导
  17. 注册界面的优化之ActionBar组件的应用之(二)ActionBar组件的事件处理
  18. android新浪分享实例
  19. HttpGet和HttpPost
  20. maven入门(7)maven项目(组件)的坐标

热门文章

  1. 联合登录 & OAuth 2.0 & OpenID
  2. React + GraphQL 2020 速成课程
  3. 如何重置电信悦 me 智能网关
  4. illustrating javascript prototype & prototype chain
  5. useful tools for programmer programming
  6. taro table component
  7. rxjs 常用的subject
  8. NGK每日快讯」2021.1.27日NGK公链第85期官方快讯!
  9. .NET微服务最佳实践 eShopOnContainers
  10. ubuntu ARM换国内源和国内源安装ROS