DAOS 分布式異步對象存儲|Pool

      網友投稿 916 2022-05-30

      Pool 是分布在不同存儲節點上的一組 Target,在這些存儲節點上分布數據和元數據以實現水平可伸縮性,并對其進行復制或糾刪碼編碼以確保持久性和可用性(請參考 DAOS 分布式異步對象存儲|存儲模型?DAOS Pool 一節)。

      Pool Service

      Pool Service (pool_svc) 存儲 Pool 的元數據,并提供一個 API 來查詢和更新 Pool 的配置。

      Pool 的元數據被組織為鍵值存儲 (key-value stores, KVS) 的層次結構,這些鍵值通過復制存儲在多個服務器上,而這些服務器由 Raft 一致性協議支持。

      客戶端請求只能由 Leader 提供服務,而 Follower 的副本只響應一個指向當前 Leader 的提示,以便客戶端重試。

      pool_svc?派生自一個通用的復制服務模塊 rsvc(請參考 Replicated Services: Architecture),它的實現便于客戶端搜索當前的 Leader。

      元數據設計

      第一級 KVS 存儲 Pool 映射、UID、GID 和 mode 等安全屬性、與空間管理和自愈(請參考 Rebuild)相關的信息,以及包含用戶定義屬性的第二級 KVS(請參考 Container Service: Metadata Layout)。

      此外,它還存儲有關 Pool 連接的信息,這些信息由 Pool 句柄表示,并由客戶端生成的句柄 UUID 標識。

      術語“Pool 連接” (pool connection) 和“Pool 句柄” (pool handle) 可以互換使用。

      Pool 操作

      Pool / Pool Service 創建

      Pool 的創建完全由管理服務驅動,因為與存儲分配和查詢容錯域相關的步驟需要特殊權限。

      格式化所有 Target 后,Target 組件調用每個 Target 上的 Pool 模塊的 ds_pool_create,它為當前 Target 生成一個新的 UUID,并將其存儲在 DSM_META_FILE 中。

      此時,管理模塊通過調用 ds_pool_svc_create 將控制權傳遞給 Pool 模塊,這將在組合 Pool 和 Container Service 的選定節點子集上初始化復制服務。

      Pool 模塊現在向創建數據庫服務的服務負責人發送 Pool_CREATE?請求;然后將 Target 列表及其容錯域轉換為 Pool 映射的初始版本,并與其他初始 Pool 元數據一起存儲在 Pool Service 中。

      Pool 連接

      為了建立 Pool 連接,客戶端進程使用 Pool UUID、連接信息(如組名和服務等級列表)和連接標志調用客戶端庫中的 daos_pool_connect?方法;這將向 Pool Service 發起 Pool 連接請求。Pool Service 嘗試根據正在使用的安全模型(例如,類似 POSIX 的模型中的 UID/GID)對請求進行身份驗證,并將請求的功能授權給客戶端生成的 Pool 句柄 UUID。在繼續之前,Pool 映射被傳輸到客戶端;如果從這一步開始出現錯誤,服務器可以簡單地要求客戶端放棄 Pool 映射。

      此時,Pool Service 將檢查現有的 Pool 句柄:

      如果已經存在具有相同 UUID 的 Pool 句柄,則表示已經建立了 Pool 連接,無需執行其他操作。

      如果存在另一個 Pool 句柄,且當前請求的或現有的 Pool 句柄具有獨占訪問權限,則連接請求將被拒絕,并顯示忙碌狀態代碼。

      如果一切順利,Pool Service 將使用 Pool 句柄 UUID 向 Pool 中的所有 Target 發送一個集中式 POOL_TGT_CONNECT 請求。Target Service 將創建并緩存本地 Pool 對象,并打開本地 VOS Pool 進行訪問。

      一組對等應用程序進程可以共享一個 Pool 連接句柄(請參考 DAOS 分布式異步對象存儲|存儲模型 DAOS Pool 一節和 Use Cases: Storage Management and Workflow Integration)。

      要關閉 Pool 連接,客戶端進程使用 Pool 句柄調用客戶端庫中的 daos_pool_disconnect 方法,觸發對 Pool Service 的 POOL_DISCONNECT 請求,Pool Service 會向 Pool 中的所有 Target 發送一個集中式 POOL_TGT_DISCONNECT 請求。這些步驟將銷毀與連接關聯的所有狀態,包括所有 Container 句柄。最好在調用 disconnect 方法之前,共享此連接的其他客戶端進程在本地銷毀它們的 Pool 句柄副本。如果一組客戶端進程在調用 disconnect 方法之前提前終止,那么一旦 Pool Service 從運行時環境中了解到該事件,它們的 Pool 連接最終將被逐出。

      相關信息

      DAOS 分布式異步對象存儲|Pool

      Emai: debugzhang@163.com

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

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

      分布式 存儲 對象存儲服務 OBS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:單片機學會了有出路嗎?學單片機有什么用?
      下一篇:Java面試題總結之JDBC 和Hibernate
      相關文章
      久久亚洲精品成人无码| 亚洲福利一区二区三区| 亚洲av无码兔费综合| 亚洲欧洲国产综合| 亚洲精品私拍国产福利在线| 国产偷国产偷亚洲清高APP| 亚洲精品9999久久久久无码| 亚洲码和欧洲码一码二码三码 | 成人区精品一区二区不卡亚洲| 亚洲免费黄色网址| 亚洲一区在线视频观看| 亚洲精品免费网站| 亚洲偷偷自拍高清| 亚洲精品无码专区久久| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲制服丝袜在线播放| 2020天堂在线亚洲精品专区| 国产成人精品日本亚洲18图| 亚洲中文字幕无码中文字| 亚洲日韩精品A∨片无码加勒比| 91在线亚洲综合在线| 亚洲大尺度无码无码专线一区| 亚洲精品国产高清在线观看| 久久亚洲精品无码网站| 亚洲无码高清在线观看| 亚洲乳大丰满中文字幕| 亚洲午夜国产精品无码| 国产亚洲一区二区手机在线观看| 久久被窝电影亚洲爽爽爽| 亚洲高清专区日韩精品| 中文字幕亚洲精品| 亚洲jjzzjjzz在线观看| 亚洲欧美国产国产一区二区三区| 亚洲AV无码一区二区三区久久精品| 韩国亚洲伊人久久综合影院| 亚洲国产精品13p| 久久亚洲高清观看| 久久久亚洲裙底偷窥综合| 2019亚洲午夜无码天堂| 精品国产亚洲AV麻豆| 亚洲无码高清在线观看|