Wednesday, January 30, 2013

小玩GlusterFS (單機惡搞版)

上次提到,想找一個方法把4個Drobo的volume合併成一個空間.
因為Drobo只能用ext3的特性,所以一般會用的LVM跟mdadm兩個方法都不能用.
說到要底層是ext3... 想來想去也是只有GlusterFS.
所以來(被)玩玩看....

因為GlusterFS架構在FUSE之上,是user-space的,所以不會牽涉到編核心什麼的麻煩事情。(對,Lustre我就是在說你XD)
而且底層吃的是一般的FS,所以ext3、ext4、XFS等等都可以用,只要有extended attbitute就可以。
和一般如Lustre等的分散式檔案系統相比,GlusterFS是對檔名做HASH,然後把一些metadata存到底層檔案的extended attributes裡面,所以不需要metadata server,這是比較不一樣的地方。
另外雖然原本設計是要過網路走server-client架構,但GlusterFS也允許機器同時當作server與client,所以在我們的例子就很合用了。相對來說Lustre就不能這樣做。

安裝倒是超級簡單。
對CentOS來說,去Gluster網站把repo檔抓回來放到/etc/yum.repos.d裡面,然後:
(server)
yum install glusterfs-server glusterfs-fuse glusterfs fuse fuse-libs
service glusterd start
chkconfig glusterd on
(client)
yum install glusterfs-fuse glusterfs fuse fuse-libs
就這樣XD

這個例子裡面server跟client是同一台機器,所以安裝更簡單。
我先把4個Drobo上的ext3 volume,掛載到:
/bricks/1 ~ /bricks/4
然後設定:
gluster volume create drobo hydro1:/bricks/1 hydro1:/bricks/2 hydro1:/bricks/3 hydro1:/bricks/4
(hydro1是主機的名稱,雖然是本機但是不能用localhost)
gluster volume start drobo
這樣server就設定完畢了,爆簡單XD

再來就是client掛載。
GlusterFS支援兩種client模式,一個是native GlusterFS (FUSE),另一個是走NFS。
只是要用NFS的話,記得像rpcbind、nfslock等service也要安裝,而且必須在glusterd之前啟動。
你大概也猜到了,指令:
mount hydro1:drobo /data -t glusterfs
結束。(茶)
然後就會看到:


[root@hydro1 data]# df -h /data /bricks/*
Filesystem            Size  Used Avail Use% Mounted on
hydro1:/drobo          19T  4.1T   15T  22% /data
/dev/sda1             4.7T 1000G  3.7T  21% /bricks/1
/dev/sdb1             4.7T  1.1T  3.7T  23% /bricks/2
/dev/sdc1             4.7T  1.1T  3.7T  22% /bricks/3
/dev/sdd1             4.7T  1.1T  3.7T  23% /bricks/4


/data的容量是bricks/1~4的總和。這樣就達到我的目的了。
如果你好奇進去bricks裡面看,會看到資料是以檔案為單位,分散在各個bricks裡面。
這就是GlusterFS的預設模式:分散模式 (distributed mode)。
好處是簡單,而且因為單位是檔案,所以不會因為有brick壞掉就丟掉所有資料。
GlusterFS另外還有區塊分散模式 (striped mode,類似RAID0) 跟複本模式 (Replication mode,類似RAID1),不過因為我缺空間而且膽小 (lol) 所以沒測試~



No comments: