DAOS 分散式非同步對象存儲|相關組件

DAOS 的安裝涉及多個組件,這些組件可以是集中式的,也可以是分散式的。

DAOS 軟體定義存儲 (software-defined storage, SDS) 框架依賴於兩種不同的通訊通道:

  • 用於帶外管理 (out-of-band management) 的 TCP/IP 網路;
  • 用於數據訪問的高性能結構。

實際上,同一個網路可以用於管理和數據訪問。IP over Fabric 也可用作管理網路。

DAOS SDS Components

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: //github.com/storagezhang

Emai: [email protected]

華為雲社區: //bbs.huaweicloud.com/blogs/255551

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

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

Tags: