glusterfs——volume管理


Q: 常用的命令有哪些?

創建volume: 

gluster volume create NAME stripe SCOUNT replica RCOUNT transport TYPE  BRICKLIST

NAME為volume的名字;SCOUNT,RCOUNT分別為stripe,replica的個數;transport為傳輸類型(tcp/rdma);BRICKLIST為brick列表,具體形式為HOME:PATH

啟用volume:  gluster volume start NAME

停用volume:  gluster volume stop NAME

刪除volume:  gluster volume delete NAME

查看volume信息:  gluster volume info

查看volume運行時的信息: gluster volume statedump Name

===========================

Q: 創建/啟用/停用/刪除volume最終都干了些什么?

(1) 創建volume能看得到的結果是: glusterd在工作目錄(默認為/var/lib/glusterd)的vols目錄下,創建以volume名稱為名字的目錄,並在這個目錄下創建相關文件記錄volume的相關信息;看不到的結果是glusterd程序中也記錄了volume的相關信息。(2) 啟用volume的結果是在指定brick的節點上啟動glusterfsd和glusterfs進程(注意:如果多個brick在同一節點下,會有多個glusterfsd進程,但只有一個glusterfs進程),同時在日志文件中更新記錄的volume相關信息。(3) 停用volume的結果是結束glusterfsd和glusterfs進程。(4)刪除volume則是將創建volume的相關文件信息全部清除。

===========================

Q: 創建volume時都會創建哪些文件?分別記錄些什么信息?

創建volume時會在glusterd工作目錄(默認為/var/lib/glusterd)的vols目錄下,創建以volume名字為名的目錄,在這個目錄下會創建這些文件:

info文件:保存volume的復制類型,volume的brick個數,brick的詳細信息,stripe個數,replica個數,傳輸類型,volume的唯一ID,以及內部使用的用戶名密碼。這些基本上都是創建volume指定的參數信息。

node_state.info:rebalance的狀態信息,由gluster volume rebalance命令觸發(不完全確定)。

rb_state:rebalane-brick的狀態信息,由gluster volume-brick命令觸發(不完全確定)。

cksum:校驗值

Name-fuse.vol/trusted-Name-fuse.vol(Name為volume的名字):volume對應glusterfs的配置文件,進程啟動時讀取。

Name.Host.Path.vol(Name為volume的名字,Host為brick的主機名,Path為brick的存儲路徑'/'轉換為'-'):

volume對應brick的glusterfsd的配置文件,進程啟動時讀取。

bricks/Host:Path(Host為brick的主機名,Path為brick的存儲路徑'/'轉換為'-'):birck的相關信息,包括brick的主機名,文件存儲路徑,對應glusterfsd的偵聽端口,以及連接狀態。

啟用volume時,會記錄brick對應glusterfsd進程的pid信息到 run/HOST-PATH.pid 文件中。

===========================

Q: glusterd對這些命令的處理,內部實現大概是怎樣的?

與peer節點管理一樣,針對volume的操作,glusterd也維護了一個事件鏈表和一個狀態機,以及相應的狀態數組,事件處理數組。當有對volume的操作請求時,往事件鏈表中添加事件,並根據狀態機的變化,從相應狀態的事件處理數組中找到對應的事件處理函數,並完成實際的處理動作。節點管理中是根據每個peer節點的狀態作為有限狀態機的變化,而volume的管理則是有一個全局的變量(opinfo)記錄相應的狀態。

完整的處理一次請求,大概會有這樣的狀態機切換:

由於brick可能是遠端的節點,因此glusterd在本地處理的同時,還會和遠端節點的glusterd交互。從上面狀態機的轉換可看出,一個請求的處理過程可理解為事務的執行,包括上鎖,提交,釋放鎖等,具體實現方式等同於2pc的提交。關鍵函數調用如下圖所示。

===========================

Q: 這篇文章最后提到的問題是怎么回事?

這是因為創建volume時,在brick對應的存儲目錄上,增加了"trusted.glusterfs.volume-id"和"trusted.gfid"兩個擴展屬性,在刪除volume時並未移除這兩個屬性,再次創建時,對brick的存儲目錄進行校驗,發現已經有了擴展屬性,因此會有brick已經是volume的一部分的提示。

通過getfattr命令可以查看這些存儲路徑的擴展屬性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM