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 的定製輕量級協議進行本地通訊。
進一步閱讀:
- DAOS 控制平面 DAOS control plane (daos_server)
- DAOS 資料平面 DAOS data plane (daos_engine)
- Persistent Memory Devevelopment Kit
- Storage Performance Development Kit
客戶端 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 名稱空間的應用程式提供平滑的遷移過程。
進一步閱讀:
- DAOS Library (
libdaos
) and array interface and KV interface built on top of the native DAOS API - Python API bindings
- Go bindings and API documentation
- POSIX File & Directory Emulation (
libdfs
)
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