Dispersed Volume 從 Gluster 3.6 版本開始提供;而商業版本是從 Red Hat Gluster Storage 3.1 開始提功此一功能。
簡單來說,Dispersed 最大特性是保有了 Stripe 與 Replicated 的特性,也可以看成網路架構的 RAID 5/6 模式。
Dispersed Volume 使用 Erasure Code 保護資料的完整性,當檔案寫入 Volume 後,會被拆解成指定數量的份數,而每一份包含有資料檢查碼以確保資料的完整性,在 Volume 中,可以同時損毀的數量為 Redundancy 的指定值,只要損毀的數量不超過 Redundancy 值則仍可繼續值行。
當一份 80MB 檔案寫入 Dispersed Volume 時,該檔案會被分散為其 Brick Data 個數,比方一個 Dispersed Volume 包含有 10 個 Brick,而資料量為 8 個 Brick;Redundancy 為 2 個 Brick,那麼資料在寫入的時候會被拆為 8 個部份,也就是 10MB,每個 Brick 都會包含了其它部份檢查碼(使用 EC)。
假設資料分配為 8 + 2 且沒有損毀的條件下,資料塊讀取是由 Rabin IDA 方法從 8 個 Bricks 取出,而不取回 Redundancy 資訊。
因此在讀取時資料會較為快速。
假設資料分配為 8 + 2 的配置條件下,資料塊寫入是會使用 Rabin IDA 法方寫入 10 個 Bricks,並加上 EC 資訊。
在寫入時會較讀取慢。
若在 Dispersed Volume 中配置為 Disperse 10;Redundancy 為 2 的情況之下,代表在同一時間可以有 2 個 Brick 損毀而不會照成資料移失,也就是說在資料可靠性的決定權是在於 Redundancy 的配置數量。
Dispersed Volume 容量消耗比率計算方式為:R / B,R 為 Redundancy 數量;B 為所有 Brick 數量。
比方有 12 個 1TB Bricks;那麼在 10(Data)+ 2(Redundancy)、全部容量為 72TB 的配置下,一共會消耗 (2 / (10 + 2)) * 72 = 12TB 的大小,而總計可用空間總大小為 72TB - 12TB = 60TB。
Gluster 的特點之一就是節點越多、傳送效能越好,但是如果在一個 Volume 中包含了高可靠性的需求,其效能就會減少一些。
一個包含有 Replicated 機制的 Volume,在檔案寫入時需要再耗費一倍的網路效能,而 Dispersed 是由 Bricks 的數量與 Redundancy 的數量計算其網路使用量。以下表簡單比較:
假設原本的檔案為 20MB,在 Dispersed Volue 的情況下,只要節點數與 Brick 數量越多,其網路使用量也會降低。
本例示範建立一個 Dispersed Volume,並且擁有 1 個 Redundancy(同一時間可損毀 1 個 Brick)。
gfs-05:/bricks/dispersed/brick
建立 Volume
root # gluster volume create disp_vol disperse 5 redundancy 1 \
> gfs-01:/bricks/dispersed/brick/ \
> gfs-02:/bricks/dispersed/brick/ \
> gfs-03:/bricks/dispersed/brick/ \
> gfs-04:/bricks/dispersed/brick/ \
> gfs-05:/bricks/dispersed/brick/
啟用 Volume
root # gluster volume start disp_vol
查看 Volume 資訊
root # gluster volume info disp_vol
Volume Name: disp_vol
Type: Disperse
Volume ID: e3daa687-8f7f-42c4-b458-c7821acccbef
Status: Started
Number of Bricks: 1 x (4 + 1) = 5
Transport-type: tcp
Bricks:
Brick1: gfs-01:/bricks/dispersed/brick
Brick2: gfs-02:/bricks/dispersed/brick
Brick3: gfs-03:/bricks/dispersed/brick
Brick4: gfs-04:/bricks/dispersed/brick
Brick5: gfs-05:/bricks/dispersed/brick
Options Reconfigured:
nfs.disable: off
因為 Dispersed Volume 本身擁有高可用性特性,所以您可以放心的將新的 Brick 取代舊有 Brick,使用 force
參數可以更快的完成 Brick 取代的作業。
本例使用 gfs-06:/bricks/dispersed/brick
來更換 gfs-02:/bricks/dispersed/brick
。
root # gluster volume replace-brick disp_vol \
> gfs-02:/bricks/dispersed/brick/ \
> gfs-06:/bricks/dispersed/brick/ \
> commit force
對於更換完成的 Brick,Gluster 會自動將檔案補齊,完成原先架構。在大部份的情況之下系統就會進行同步作業以確認檔案的完整性。
與 Stripe 一樣,一旦您一開始設定了 Volume 架構,爾後新增 Brick 時只能跟原先的相同或是其倍數。
gfs-15:/bricks/dispersed/brick
root # gluster volume add-brick disp_vol disperse 5 redundancy 1 \
> gfs-11:/bricks/dispersed/brick/ \
> gfs-12:/bricks/dispersed/brick/ \
> gfs-13:/bricks/dispersed/brick/ \
> gfs-14:/bricks/dispersed/brick/ \
> gfs-15:/bricks/dispersed/brick/
完成新增後,新的一組組合將會以 Distributed 與原本的組合共同服務,所以完成後需要進行 rebalance 作業。
root # gluster volume rebalance disp_vol start