chapter 1 moosefs 3.1 storage class 功能的介紹node
1.1 什麼是storage classdom
在moosefs中,storage class容許指定文件的chunks存放在哪些chunkservers上。工具
storage class使用label進行表達。spa
爲了與早起的版本的goal功能兼容,moosefs 3.0以上會自動在系統中創建1~9 storage class。goal工具將默認在對應的storage class下進行工做。code
1.2 什麼是labelserver
label是能夠被分配給chunkserver的字母(a~z,26個字母可選),每一個chunkserver能夠被打上多個標籤(即標記上多個字母,但最多能夠打26個label)blog
完整的label表達式能夠由多個子表達式構成,每一個子標籤之間用逗號分隔。每一個子表達式特指文件副本的一種存儲模式。子表達式能夠爲星號*或一個label schema。進程
label schema能夠是一個label或由加法、乘法和括號構成的複雜表達式。get
加法是邏輯「或」的含義,即文件的副本能夠被存放在任意含有加法元素label的chunkserver上。例如,一個文件的storage class是a+b+c,那麼任何含有a、b或c標籤的chunkserver均可以用來存儲該文件的副本。ast
乘法是邏輯「與」的含義,即文件的副本僅能夠存放在包含全部label的chunkserver上。例如,一個文件的storage class是abc,那麼只有當一臺chunkserver同時含有abc三個標籤時,它才能用於存放該文件的副本。
相同的子表達式能夠經過在表達式前加數字的方式來表示,而不用重複顯示聲明屢次。
chapter 2 如何使用storage class
2.1 機器配置
在本文的示例中,將在11臺機器上安裝moosefs:
ts02, ts03 爲master servers
ts04 .. ts12 爲chunkservers
前提假設:
已有一些初始化數據存放在示例的moosefs文件系統中,而且goal爲2(storage class 2)
2.2 不設置storage class狀況下moosefs的安裝方法
若是chunkserver上沒有設置任何的label,則moosefs 3.0系統中數據的分佈將於2.0版本時相同,以下圖所示
2.3 爲chunkservers加上label
若要給chunkserver打label,則須要修改相應chunkserver的配置文件 /etc/mfs/mfschunkserver.cfg
編輯該配置文件,將LABELS = A前面的註釋符號去掉,並設置上你想要的標籤
設置好後,須要通知chunkserver進程配置文件已更新,使用以下兩個命令都可
service moosefs-pro-chunkserver reload
或
mfschunkserver reload
再爲ts04..ts07設上A標籤,ts08..ts12設上B標籤後,從cgi頁面看到chunkserver的信息以下:
若想爲chunkserver設置多個標籤,則以下三種方式均可以:
LABELS = XYZ
or
LABELS = X Y Z
or
LABELS = X, Y, Z
設好標籤後的集羣以下:
2.4 建立storage class
使用mfsscadmin工具能夠在moosefs系統中建立storage class。
ps:在chapter 3有mfsscadmin工具完整的使用介紹
此處僅簡單給出使用示例
首先,mount一個mfs卷
mount -t moosefs mfsmaster.test.lan: /mnt/mfs
而後,進入到mount點的目錄下
cd /mnt/mfs
假設咱們但願將文件的2個副本存放在帶有label A的chunkserver上,則能夠建立storage class以下:
mfsscadmin create 2A sclass1
上面這條命令的含義爲:每個屬於sclass1的文件,將會擁有2個副本,其中每一個副本將存放在帶有標籤A的chunkserver上。
相似的,能夠建立另外一個storage class,讓文件再生成2個副本存放在帶有標籤B的chunkserver上。
mfsscadmin create 2B sclass2
此外,不必定要cd到mount的目錄中進行storage class的建立,也能夠經過顯示指定目錄的方式來給文件建立storage class,例如:
mfsscadmin /mnt/mfs create 2B sclass2
2.5 展現storage class
mfsscadmin list
該指令將列出某個mfs目錄擁有的storage class列表,例如
root@client :/ mnt / mfs # mfsscadmin list
list ; 1
1
2
3
4
5
6
7
8
9
sclass1
sclass2
root@client :/ mnt / mfs #
也能夠經過加上-l參數來獲取相信的信息
2.6 將storage class配置到文件或目錄上
有不少個工具均可覺得文件或目錄配置storage class:
mfsgetsclass, mfssetsclass, mfscopyclass, mfsxchgsclass, mfslistclass
在chapter 3.2能夠查看這些指令的詳細介紹,或者使用man指令,如:man mfssclass
如今,能夠將一些數據存入mfs中了。建立兩個目錄dataX dataY:
cd /mnt/mfs
mkdir {dataX,dataY}
爲dataX目錄添加sclass1這個storage class:
mfssetsclass sclass1 dataX
執行該指令後,dataX及其子目錄中全部的目錄和文件將自動根據sclass1策略來存儲文件。
一樣的,爲dataY分配sclass2這一storage class:
mfssetsclass sclass2 dataY
2.6.1 建立文件
如今能夠往dataX和dataY分別建立文件並寫入數據了:
root@client :/ mnt / mfs # cd dataX root@client :/ mnt / mfs / dataX # for i in ‘seq 1 35 ‘; do dd if =/ dev / urandom of= dd1G_$i .bin bs =1M count =1024; done [...] root@client :/ mnt / mfs / dataX # cd ../ dataY root@client :/ mnt / mfs / dataY # for i in ‘seq 1 10 ‘; do dd if =/ dev / urandom of= dd1G_$i .bin bs =1M count =1024; done [...] root@client :/ mnt / mfs / dataY #
2.6.2 文件系統根據storage class的設定進行數據分配
與此同時,「resource」tab下的inodes信息也更新了: