如上圖所示,一個完整的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實例之間的所有通信。