Glusterfs Rebalance簡析

Glusterfs Rebalance
GlusterFS的哈希分佈是以目錄爲基本單位的,文件的父目錄利用擴展屬性記錄了子卷映射信息,子文件在父目錄所屬存儲服務器中進行分佈。由於文件目錄事先保存了分佈信息,因此新增節點不會影響現有文件存儲分佈,它將從此後的新創建目錄開始參與存儲分佈調度。這種設計,新增節點不需要移動任何文件,但是負載均衡沒有平滑處理,老節點負載較重。GlusterFS在設計中考慮了這一問題,在新建文件時會優先考慮容量負載最輕的節點,在目標存儲節點上創建文件鏈接直向真正存儲文件的節點。此外,GlusterFS彈性卷管理工具可以在後臺以人工方式來執行負載平滑,將進行文件移動和重新分佈,此後所有存儲服務器都會均會被調度。

Glusterfs管理工具gluster提供了Volume Rebalance功能,使用方法如下:
gluster volume rebalance <VOLNAME> [fix-layout|migrate-data] {start|stop|status} - rebalance operations
利用這個功能可以對已經存在的目錄文件進行Rebalance,使得早先創建的老目錄可以在新增存儲節點上分佈,並可對現有文件數據進行遷移實現容量負載均衡。爲了便於控制管理,rebalance操作分爲兩個階段進行實際執行,即fix layout和migrate data。gluster volume rebalance目前支持以下三種應用場景:
1、Fix Layout
 用法:gluster volume rebalance <VOLNAME> fix-layout {start|stop|status},修復layout以使得新舊目錄下新建文件可以在新增節點上分佈上。

2、Migrate Data
 用法:gluster volume rebalance <VOLNAME> migrate-data {start|stop|status},新增或縮減節點後,在卷下所有節點上進行容量負載平滑。爲了提高rebalance效率,通常在執行此操作前先執行Fix Layout。

3、Fix Layout and Migrate Data
 用法:gluster volume rebalance <VOLNAME> {start|stop|status},同時執行以上兩個階段操作,先Fix Layout再Migrate Data。

Fix Layout (gf_glusterd_rebalance_fix_layout)流程

1、對mount point遞歸調用sys_lgetxattr(fullpath, "trusted.distribute.fix.layout", &value, 128)
2、每次調用觸發fuse translator,並傳遞觸發dht translator
3、觸發調用dht translator接口函數dht_getxattr
4、由於指定了trusted.distribute.fix.layout,觸發dht_selfheal_new_directory進行目錄layout修復

Migrate Data (gf_glusterd_rebalance_move_data)流程
1、對mount point遞歸遍歷目錄兩遍
2、第一遍只對文件進行操作,進行文件遷移
 1)copy文件至臨時文件(臨時文件需要位於mount point下)
  2)複製屬性,遷移擴展屬性,更新uid/gid/time
  3)rename臨時文件名爲原文件名
3、第二遍只對子目錄進行操作,遞歸對子目錄調用gf_glusterd_rebalance_move_data
發佈了157 篇原創文章 · 獲贊 248 · 訪問量 179萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章