DAOS 分散式非同步物件儲存|相關元件

debugzhang發表於2021-04-06

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: 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

相關文章