如上图所示,一个完整的DAOS系统是由管理节点组件、客户端节点组件、服务端节点组件以及网络通信组件四个部分组成。管理节点组件通过管理网络通道(蓝色)对DAOS服务管理和监控。客户端节点组件通过数据网络通道(红色)与服务端节点组件通信实现数据读取和写入。服务端节点组件是整个DAOS系统的核心组件,用于集群数据的管理。
1.1. 服务端节点组件
在服务端,每个节点是由daos_server
和daos_engine
两类组件构建,它们是运行在服务端节点上的守护进程。daos_server是DAOS控制平面
的组件,负责解析配置文件,启动和监控多个daos_engine组件。daos_engine是DAOS数据平面
的组件,是一个多线程进程,是由daos_server启动的。每个daos_server可以启动一个或多个daos_engine(通过配置daos_server.yml实现)。daos_engine负责处理元数据和I/O请求(通过CART网络通信中间件和调用PMDK和SPDK库直接访问本地NVMe设备)。PMDK用于直接访问存储级别的内存设备(SCM:storage-class memory)。SPDK用于直接访问NVMe SSD。
● daos_server.service - DAOS ServerLoaded: loaded (/usr/lib/systemd/system/daos_server.service; disabled; vendor preset: disabled)Active: active (running) since Thu 2025-04-10 19:07:50 CST; 18h agoMain PID: 67250 (daos_server)Tasks: 52 (limit: 1644956)Memory: 100.2GCGroup: /system.slice/daos_server.service├─67250 /usr/bin/daos_server start└─74592 /usr/bin/daos_engine -t 12 -x 2 -g daosfs00 -d /var/lib/daos/daos_server -T 4 -n /var/lib/daos/daos_control/engine0/daos_nvme.conf -I 0 -r 13312 -H 2 -s /var/lib/daos/daos_scm/0
1.2. 客户端节点组件
DAOS客户端与服务端通信主要通过DAOS Library(libdaos)。libdaos是专门为用户应用和IO中间件存储数据到DAOS container中而设计的。libdaos允许应用通过该接口与daos_engine进行通信,用来管理container和以不同的方式访问object。DAOS在libdaos之上又封装了一个libdfs库。libdfs库模拟了POSIX语义来支持文件系统应用程序。
另外,在DAOS客户端组件中,还提供了DAOS agent。它通过dRPC与libdaos通信来对应用程序进程身份验证。DAOS agent可以支持不同的身份验证框架,并使用Unix域套接字与客户端库进行通信。它还可以通过gRPC与每个DAOS server进行通信,以便向libdaos提供DAOS系统成员信息并支持pool list操作。
● daos_agent.service - DAOS AgentLoaded: loaded (/usr/lib/systemd/system/daos_agent.service; disabled; vendor preset: disabled)Active: active (running) since Tue 2025-04-08 13:17:29 CST; 3 days agoMain PID: 1467814 (daos_agent)Tasks: 27 (limit: 1644967)Memory: 26.2MCGroup: /system.slice/daos_agent.service└─1467814 /usr/bin/daos_agent
1.3. 管理节点组件
管理节点组件提供了系统管理工具(dmg)和管理API。dmg是在管理API之上设计的一个命令行工具,系统用管理员可以通过dmg命令管理和监控DAOS集群。管理API是专门为第三方存储管理框架设计的,第三方管理框架可以通过调用该API来监控DAOS集群。无论是dmg还是API,最终都是通过gRPC与daos_server组件通信。
root@node2 ~]# dmg --help
Usage:dmg [OPTIONS] <command>dmg (DAOS Management) is a tool for connecting to DAOS servers
for the purpose of issuing administrative commands to the cluster. dmg is
provided as a means for allowing administrators to securely discover and
administer DAOS components such as storage allocations, network configuration,
and access control settings, along with system wide operations.Application Options:--allow-proxy Allow proxy configuration via environment-i, --insecure Have dmg attempt to connect without certificates-d, --debug Enable debug output--log-file= Log command output to the specified file-j, --json Enable JSON output-J, --json-logging Enable JSON-formatted log output-o, --config-path= Client config file pathHelp Options:-h, --help Show this help messageAvailable commands:check Check system healthconfig Perform tasks related to configuration of hardware on remote servers (aliases: cfg)container Perform tasks related to DAOS containers (aliases: cont)network Perform tasks related to network devices attached to remote servers (aliases: net)pool Perform tasks related to DAOS poolsserver Perform tasks related to remote servers (aliases: srv)server-version Print server versionstorage Perform tasks related to storage attached to remote servers (aliases: sto)support Perform debug tasks to help support team (aliases: supp)system Perform distributed tasks related to DAOS system (aliases: sys)telemetry Perform telemetry operations (aliases: telem)version Print dmg version
1.4. 网络通信组件
在整个DAOS系统中,DAOS使用了3类通信渠道:gRPC、dRPC和CART。
gRPC
为DAOS管理提供了一个双向安全通道,通常使用out-of-band TCP/IP网络,用于管理通信。它依赖TLS/SSL来对administrator和server进行身份验证。
dRPC
是一种基于Unix域套接字构建的通信通道,用于进程间通信。主要用应用于DAOS agent与DAOS libdaos应用进程的身份认证,DAOS server与DAOS engine之间的协议序列化。
CART
是用户空间的函数库,主要用于客户端与服务端的数据传输。通常采用低延时高带宽的网络,比如RDMA。CART是在Mercury和libfabric上构建的。CART库用于libdaos和daos_engine实例之间的所有通信。