1. 程式人生 > >分散式儲存系統GlusterFS初體驗

分散式儲存系統GlusterFS初體驗

轉自 https://my.oschina.net/kisops/blog/151073

  過去一直以為GlusterFSGFS為同一個東西,真是慚愧。昨天一同事用到才發現它是個好東西!

    安裝很簡單,在所有儲存伺服器上執行

yum -y install glusterfs glusterfs-server
chkconfig glusterd on 
service glusterd start

    將儲存節點組合成一個叢集,筆者以18節點為例。只需要在任一個節點執行:

gluster peer probe agent21.kisops.org 
gluster peer probe
agent22.kisops.org gluster peer probe agent23.kisops.org gluster peer probe agent24.kisops.org gluster peer probe agent25.kisops.org gluster peer probe agent26.kisops.org gluster peer probe agent27.kisops.org gluster peer probe agent28.kisops.org gluster peer probe agent29.kisops.org gluster
peer probe agent30.kisops.org gluster peer probe agent31.kisops.org gluster peer probe agent32.kisops.org gluster peer probe agent33.kisops.org gluster peer probe agent34.kisops.org gluster peer probe agent35.kisops.org gluster peer probe agent36.kisops.org gluster peer probe agent37.kisops.org
gluster peer probe agent38.kisops.org # 加入新節點 gluster peer status # 檢視叢集的節點資訊

    以/data/glusterfs為共享目錄,建立一個名為gfs的儲存卷,資料複製2份:

gluster volume create gfs replica 2 agent{21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38}.kisops.org:/data/glusterfs  # 建立卷
gluster volume start gfs # 啟動卷
gluster volume info # 檢視卷資訊
gluster volume set gfs auth.allow 10.20.* # 授權訪問

image

    OK,此時服務端已配置完畢,過程簡單明瞭!客戶端就更簡單了:

yum -y install glusterfs glusterfs-fuse
mount -t glusterfs agent38.kisops.org:/gfs /mnt/gfs # 掛載任一節點即可(推薦)
mount.nfs agent38.kisops.org:/gfs /mnt/nfs -o nfsvers=3,proto=tcp # 使用NFS掛載,注意遠端的rpcbind服務必須開啟
mount -t nfs -o rw,nfsvers=3,proto=tcp,port=38465,nolock,noacl,nocto,noatime,nodiratime,rsize=131072,wsize=524288,async,soft,bg,acregmin=3,acregmax=10,acdirmin=1,acdirmax=5 agent21.kisops.org:/gfs /mnt/nfs # 標準掛法
# 若需要開機自動掛載,請更新/etc/fstab,追加:
agent38.kisops.org:/gfs /mnt/gfs glusterfs defaults,_netdev 0 1

image

    環境配置完成就開始測試吧。

一、檢查檔案正確性

dd if=/dev/urandom of=/tmp/testfile bs=1M count=100 # 在掛載客戶端生成測試檔案
cp –v /tmp/testfile /mnt/gfs/testfile # 檔案拷貝到統一儲存
md5sum /tmp/testfile /mnt/gfs/testfile # 在檢視客戶端檢查檔案雜湊
md5sum /data/glusterfs/testfile # 儲存叢集的某2個節點上會有此檔案,檢查其雜湊

二、宕機測試。使用glusterfs-fuse掛載,即使目標伺服器故障,也完全不影響使用。用NFS則要注意掛載選項,否則服務端故障容易導致檔案系統halt住而影響服務!

三、檔案測試。

# 將其中一個節點停止儲存服務
service glusterd stop
service glusterfsd stop
# 在掛載客戶端刪除測試檔案
rm -fv /mnt/nfs/testfile
# 此時在服務端檢視,服務被停止的節點上testfile並未被刪除。此時啟動服務:
service glusterd start
# 數秒後,testfile就被自動刪除了。新增檔案效果相同!
四、目錄測試。方法和檔案測試類似,由於目錄每個節點都會生成,所以測試更容易。

以下為運維過程常用的指令:

# 刪除卷 
gluster volume stop gfs 
gluster volume delete gfs 
# 將機器移出叢集 
gluster peer detach agent22.kisops.org 
# 卷擴容(由於副本數設定為2,至少要新增2(4、6、8..)臺機器) 
gluster peer probe agent23.kisops.org # 加節點 
gluster peer probe agent24.kisops.org # 加節點 
gluster volume add-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs # 合併卷 
# 收縮卷(收縮卷前gluster需要先移動資料到其他位置) 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs start # 開始遷移 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs status # 檢視遷移狀態 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs commit # 遷移完成後提交 
# 遷移卷 
gluster peer probe agent25.kisops.org # 將agent31.kisops.org的資料遷移到agent25.kisops.org,先將agent25.kisops.org加入叢集 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs start # 開始遷移 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs status # 檢視遷移狀態 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs commit # 資料遷移完畢後提交 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent22.kisops.org:/data/glusterfs commit -force # 如果機器agent31.kisops.org出現故障已經不能執行,執行強制提交 
gluster volume heal gfs full # 同步整個卷

    本文介紹的是GlusterFS基礎的用法,感覺它的最大優點就是檔案使用雜湊雜湊,而不需要單獨去維護MetaData以避開單點問題,而目錄則是所有節點都一致的。節點資訊會在變化過程中自動同步!不過增刪節點,需要做Rebalance資料才會重新分佈。