MFS分佈式文件系統部署方案

 

MFS分佈式文件系統部署方案
一、       網絡拓撲圖
 
二、       功能模塊介紹及部署
2.1 管理服務器(master
作爲管理服務器(master)MooseFS 部署中重要的一個元素,在硬件方面,應該被安裝在一臺能夠保證高可靠性和能勝任的整個系統存取的要求的機器上。一個明智的做法是用一個配有冗餘電源、一個明智的做法是用一個配有冗餘電源、ECC 內存、磁盤陣列,如RAID1/RAID5/RAID10。在操作系統方面,管理服務器的操作系統應該是具有POSIX 兼容的系統(到目前支持Linux, FreeBSD, Mac OS X and OpenSolaris)。
2.1.1部署教程: (所有角色都是用的同一個安裝文件只是配置有所不同)
useradd mfs –s /sbin/nologin #建立用戶並禁示此用戶登陸
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure –prefix=/usr/local/mfs --with-default-user=mfs –with-default-group=mfs
make && make install
cd /usr/local/mfs/etc
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
vim mfsmaster.cfg
# WORKING_USER = mfs 運行master server 的用戶
# WORKING_GROUP = mfs 運行master server 的組
# SYSLOG_IDENT = mfsmaster master server syslog中的標識說明是由master serve 產生的
# LOCK_MEMORY = 0 是否執行mlockall()以避免mfsmaster 進程溢出默認爲0
# NICE_LEVEL = -19 運行的優先級(如果可以默認是-19; 注意: 進程必須是用root啓動)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 被掛接目錄及其權限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs 數據存放路徑此目錄下大致有三類文件changelogsessionsstats
# BACK_LOGS = 50 metadata 的改變log 文件數目(默認是50);
# REPLICATIONS_DELAY_INIT = 300 延遲複製的時間默認是300s;
# REPLICATIONS_DELAY_DISCONNECT = 3600 chunkserver 斷開的複製延遲默認是3600);
# MATOML_LISTEN_HOST = * metalogger 監聽的IP 地址(默認是*代表任何IP)
# MATOML_LISTEN_PORT = 9419 metalogger 監聽的端口地址(默認是9419)
# MATOCS_LISTEN_HOST = * 用於chunkserver 連接的IP 地址默認是*代表任何IP);
# MATOCS_LISTEN_PORT = 9420 用於chunkserver 連接的端口地址默認是9420);
# MATOCU_LISTEN_HOST = * 用於客戶端掛接連接的IP 地址(默認是*代表任何IP)
# MATOCU_LISTEN_PORT = 9421 用於客戶端掛接連接的端口地址默認是9421);
# CHUNKS_LOOP_TIME = 300 chunks 的迴環頻率默認是300 );
原文爲Chunks loop frequency in seconds (default is 300)
# CHUNKS_DEL_LIMIT = 100
# CHUNKS_WRITE_REP_LIMIT = 1 在一個循環裏複製到一個chunkserver 的最大chunk數目默認是1
# CHUNKS_READ_REP_LIMIT = 5 在一個循環裏從一個chunkserver 複製的最大chunk數目默認是5
# REJECT_OLD_CLIENTS = 0 彈出低於1.6.0的客戶端掛接0 1默認是0
此文件不需要修改如果需要修改去掉前面的#在修改
Vim mfsexports.cfg
#* / ro
#192.168.1.0/24 / rw
#192.168.1.0/24 / rw,alldirs,maproot=0,password=passcode
#10.0.0.0-10.0.0.5 /test rw,maproot=nobody,password=test
#* / rw,alldirs,maproot=0
#192.168.3.138 / rw,alldirs,maproot=0,password=111111
* . rw
#允許所有客戶端可以訪問回收站
192.168.1.0/24    /   rw,alldirs,maproot=0
該文件每一個條目分爲三部分:
第一部分:客戶端的ip 地址
第二部分:被掛接的目錄
第三部分:客戶端擁有的權限
地址可以指定的幾種表現形式:
* 所有的ip 地址
n.n.n.n 單個ip 地址
n.n.n.n/b IP 網絡地址/位數掩碼
n.n.n.n/m.m.m.m IP 網絡地址/子網掩碼
f.f.f.f-t.t.t.t IP
目錄部分需要注意兩點:
/ 標識MooseFS ;
. 表示MFSMETA 文件系統
權限部分:
ro 只讀模式共享
rw 讀寫的方式共享
alldirs 許掛載任何指定的子目錄
maproot 映射爲root,還是指定的用戶
password 指定客戶端密碼
2.1.2修改目錄權限
chown –R mfs:mfs /usr/local/mfs
2.1.3啓動服務端
/usr/local/mfs/sbin/mfsmaster start
echo ‘/usr/local/mfs/bin/mfsmaster start’>> /etc/rc.local
2.1.4關閉服務器
/usr/local/mfs/sbin/mfsmaster -s
關閉服務一定不要用KILL來關閉會出現數據丟失的情況,後面我會做一個啓動管理腳本用來管理開機啓動和關機關閉服務。
2.2、元數據日誌服務器(mfsmetalogger
元數據日誌守護進程是在安裝master server 時一同安裝的,最小的要求並不比master 本身大,可以被運行在任何機器上(例如任一臺chunkserver),但是最好是放置在MooseFS master 的備份機上,備份master 服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs。因爲主要的master server 一旦失效,可能就會將這臺metalogger 機器取代而作爲master server
2.2.1部署教程:
useradd mfs –s /sbin/nologin #建立用戶並禁示此用戶登陸
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure –prefix=/usr/local/mfs --with-default-user=mfs –with-default-group=mfs
make && make install
cd /usr/local/mfs/etc
vim mfsmetalogger.cfg
# WORKING_USER =mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT =mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH= /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24 元數據備份文件下載請求頻率。默認爲24小時,即每隔一天從元數據服務器
(MASTER)下載一個metadata.mfs.back 文件。當元數據服務器關閉或者出故障時,matedata.mfs.back 文件將消失,那麼要恢復整個mfs,則需從metalogger 服務器取得該文件。請特別注意這個文件,它與日誌文件一起,才能夠恢復整個被損壞的分佈式文件系統。
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.1.252
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
2.2.2修改目錄權限
chown –R mfs:mfs /usr/local/mfs
2.2.3啓動服務
/usr/local/mfs/sbin/mfsmetalogger start
echo ‘/usr/local/mfs/bin/mfsmetalogger start’>> /etc/rc.local
2.2.4關閉服務
/usr/local/mfs/sbin/mfsmetalogger -s
2.3 數據存儲服務器(chunkserver
安裝完管理服務器後,將安裝數據服務器(chunkservers),這些機器的磁盤上要有適當的剩餘空間,而且操作系統要遵循POSIX 標準(驗證了的有這些: Linux, FreeBSD, Mac OS X and OpenSolaris)。Chunkserver 在一個普通的文件系統上儲存數據塊/碎片(chunks/fragments)作爲文件。
2.3.1部署教程:
useradd mfs –s /sbin/nologin #建立用戶並禁示此用戶登陸
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure –prefix=/usr/local/mfs --with-default-user=mfs –with-default-group=mfs
cd /usr/local/mfs/etc
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# DATA_PATH = /usr/local/mfs/var/mfs
# LOCK_FILE = /var/run/mfs/mfschunkserver.pid
# SYSLOG_IDENT = mfschunkserver
# BACK_LOGS = 50
# MASTER_RECONNECTION_DELAY = 30
MASTER_HOST = 192.168.1.252 元數據服務器的名稱或地址,可以是主機名,也可以是ip 地址
MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422 這個監聽端口用於與其它數據存儲服務器間的連接,通常是數據複製
# CSSERV_TIMEOUT = 60
# CSTOCS_TIMEOUT = 60
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配給MFS 使用的磁盤空間配置文件的位置
Vim mfshdd.cfg
/tmp
在這裏/tmp 是一個給mfs 的分區,但在本機上是一個獨立的磁盤的掛載目錄
2.3.2修改權限
chown –R mfs:mfs /tmp
chown –R mfs:mfs /usr/local/mfs
2.3.3啓動服務
/usr/local/mfs/sbin/mfschunkserver start
echo ‘/usr/local/mfs/bin/mfschunkserver start’>> /etc/rc.local
 
2.3.4關閉服務
/usr/local/mfs/sbin/mfschunkserver –s
2.3.5共享空間限制(如果不限制可以不用設置)
dd if=/dev/zero of=/opt/mfs.img bs=1M count=50000#設置空間50G
losetup /dev/loop0 mfs.img
mkfs.ext3 /dev/loop0
mkdir /tmp
chown mfs:mfs /tmp
mount -o loop /dev/loop0 /tmp
2.4 MFS客戶端(client)
2.4.1 fuse安裝
如果所在的系統已經安裝了fuse,則跳過這個步驟,高版本的Linux 內核已經支持了。
tar zxvf fuse_2.8.1.tar.gz
cd fuse-2.8.1
./configure
Make && make install
echo ‘export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH’ >>/etc/profile #增加全局變量
source /etc/profile
2.4.2 mfs安裝
useradd mfs –s /sbin/nologin
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure --prefix=/usr/local/mfs --w ith-default-user=mfs --w ith-default-group=mfs --enable-mfsmount
make && make install
2.4.3掛接MFS文件系統
創建掛載點:mkdir /mnt/mfs
            Mkdir /mnt/mfsmeta
加載fuse 模塊到內核:modprobe fuse
掛接MFS:
ln -s /usr/local/mfs/bin/mfsmount /usr/sbin/mfsmount #mfsmount鏈接到sbin目錄中
mfsmount /mnt/mfs -H 192.168.1.252 –p #掛載MFS根目錄到/mnt/mfs中密碼爲服務端設置密碼
mfsmount -m /mnt/mfsmeta/ -H 192.168.1.252 #掛載MFS回收站到/mnt/mfsmeta
系統管理:
ln -s /usr/local/mfs/bin/mfssetgoal /usr/sbin/mfssetgoal
mfsrsetgoal 2 /mnt/mfs #設置文件的備份份數爲2
mfsrsettrashtime 600 /mnt/mfs #設置回收時間爲10分鐘
開機自動運行
echo  ‘#!/bin/sh
/sbin/modprobe /sys/module/fuse
/usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.1.252’>> /etc/rc.local
2.5 監控服務端(mfssetgoal)
用來監控MFS各節點狀態信息,可部署在任一節點服務器。
yum install python
/usr/local/mfs/sbin/mfscgiserv (後臺啓動二個啓動方式只用啓動一次就可以了)
/usr/local/mfs/sbin/mfscgiserv  -f(前臺啓動)
#有可能出現如下提示不用管它已經啓動完成如果有問題:
ps aux | grep mfscgiserv
kill -9 “ID”
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
Traceback (most recent call last):
Traceback (most recent call last):
 File "./mfscgiserv", line 399, in ?
 File "./mfscgiserv", line 392, in ?
    exit(0)
TypeError: 'str' object is not callable
    exit(0)
TypeError: 'str' object is not callable
查看方式在瀏覽器中輸入http://192.168.1.252:9425(我這個部署在MASTER服務器上)
3 附錄
3.1 MooseFS 文件系統利用下面的命令:
mfsmount mountpoint [-d] [-f] [-s] [-m] [-n] [-p] [-HMASTER] [-PPORT] [-S PATH] [-o OPT[,OPT...]]
-H MASTER:是管理服務器(master server)的ip 地址
-P PORT: 是管理服務器( master server)的端口號,要按照mfsmaster.cfg 配置文件中的變量MATOCU_LISTEN_POR 的之填寫。如果master serve 使用的是默認端口號則不用指出。
-S PATH:指出被掛接mfs 目錄的子目錄,默認是/目錄,就是掛載整個mfs 目錄。
Mountpoint:是指先前創建的用來掛接mfs 的目錄。
在開始mfsmount 進程時,用一個-m -o mfsmeta 的選項,這樣可以掛接一個輔助的文件系統MFSMETA,這麼做的目的是對於意外的從MooseFS 捲上刪除文件或者是爲了釋放磁盤空間而移動的文件而又此文件又過去了垃圾文件存放期的恢復
3.2 MooseFS 的特定的操作
3.2.1、設定的目標
目標(goal),是指文件被拷貝的份數,設定了拷貝的份數後是可以通過可以mfsgetgoal 命令來證實的,也可以通過mfssetgoal 來改變設定。例如:
$ mfsgetgoal /mnt/mfs-test/test1
/mnt/mfs-test/test1: 2
$ mfssetgoal 3 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3
$ mfsgetgoal /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3
3.2.2mfsgetgoal r mfssetgoal r 同樣的操作可以對整個樹形目錄遞歸操作。
$ mfsgetgoal -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with goal 2 : 36
directories with goal 2 : 1
$ mfssetgoal -r 3 /mnt/mfs-test/test2
/mnt/mfs-test/test2:
inodes with goal changed: 37
inodes with goal not changed: 0
inodes with permission denied: 0
$ mfsgetgoal -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with goal 3 : 36
directories with goal 3 : 1
3.2.3實際的拷貝份數可以通過mfscheckfile mfsfile info 命令來證實,例如:
$ mfscheckfile /mnt/mfs-test/test1
/mnt/mfs-test/test1:
3 copies: 1 chunks
$ mfsfileinfo /mnt/mfs-test/test1
/mnt/mfs-test/test1:
chunk 0: 00000000000520DF_00000001 / (id:336095 ver:1)
copy 1: 192.168.0.12:9622
copy 2: 192.168.0.52:9622
copy 3: 192.168.0.54:9622
3.2.4整個目錄樹的內容摘要可以用一個功能增強的等同於du s 的命令mfsdirinfomfsdirinfo MooseFS 列出具體的信息。
例如:
$ mfsdirinfo /mnt/mfs-test/test/:
inodes: 15
directories: 4
files: 8
chunks: 6
length: 270604
size: 620544
realsize: 1170432
上述內容摘要顯示了目錄、文件及chunks 的數目,還有整個目錄佔用磁盤空間的情況。
length -文件大小的總和
size –塊長度總和
realsize –磁盤空間的使用包括所有的拷貝
3.3垃圾箱(trash bin)設定隔離的時間(quarantine time
3.3.1一個刪除文件能夠存放在一個“ 垃圾箱”的時間就是一個隔離時間, 這個時間可以用
mfsgettrashtime 命令來驗證,也可以用mfssettrashtime 命令來設置,例如:
$ mfsgettrashtime /mnt/mfs-test/test1
/mnt/mfs-test/test1: 604800
$ mfssettrashtime 0 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 0
$ mfsgettrashtime /mnt/mfs-test/test1
/mnt/mfs-test/test1: 0
3.3.2這些工具也有個遞歸選項-r,可以對整個目錄樹操作,例如:
$ mfsgettrashtime -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with trashtime 0 : 36
directories with trashtime 604800 : 1
$ mfssettrashtime -r 1209600 /mnt/mfs-test/test2
/mnt/mfs-test/test2:
inodes with trashtime changed: 37
inodes with trashtime not changed: 0
inodes with permission denied: 0
$ mfsgettrashtime -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with trashtime 1209600 : 36
directories with trashtime 1209600 : 1
3.3.3時間的單位是秒(有用的值有:1 小時是3600 ,24 - 86400 ,1 - 604800 )。就像文件被存儲的份數一樣, 爲一個目錄設定存放時間是要被新創建的文件和目錄所繼承的。數字0 意味着一個文件被刪除後, 將立即被徹底刪除,在想回收是不可能的
刪除文件可以通過一個單獨安裝MFSMETA 文件系統。特別是它包含目錄/ trash (包含任然可以被還原的被刪除文件的信息)/ trash/undel (用於獲取文件)。只有管理員有權限訪問MFSMETA(用戶的uid 0,通常是root)
$ mfssettrashtime 3600 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3600
$ rm /mnt/mfs-test/test1
$ ls /mnt/mfs-test/test1
ls: /mnt/mfs-test/test1: No such file or directory
# ls -l /mnt/mfs-test-meta/trash/*test1
-rw-r--r-- 1 user users 1 2007-08-09 15:23 /mnt/mfs-test-meta/trash/00013BC7|test1
3.3.4被刪文件的文件名在“垃圾箱”目錄裏還可見,文件名由一個八位十六進制的數i-node 和被刪文件的文件名組成,在文件名和i-node 之間不是用“/,而是用了“|”替代。如果一個文件名的長度超過操作系統的限制(通常是255 個字符),那麼部分將被刪除。通過從掛載點起全路徑的文件名被刪除的文件任然可以被讀寫。需要注意的是被刪除的文件在用全路徑文件名(注意文件名是兩部分)時一定要用單引號引起來。例如:
# cat '/mnt/mfs-test-meta/trash/00013BC7|test1'
test1
# echo 'test/test2' > '/mnt/mfs-test-meta/trash/00013BC7|test1'
# cat '/mnt/mfs-test-meta/trash/00013BC7|test1'
test/test2
移動這個文件到trash/undel 子目錄下,將會使原始的文件恢復到正確的MooseFS 文件系統上路徑下(如果路徑沒有改變)。例如:
[root@www mfs]# ll dgg
-rw-r--r-- 1 root root 8 Jan 13 08:45 dgg
[root@www mfs]# rm -f dgg
[root@www mfs]# ll dgg
ls: dgg: No such file or directory
[root@www trash]# ls
0000000B|dgg 00000047|f1 undel
[root@www trash]# mv '/mnt/mfsmeta/trash/0000000B|dgg' ./undel/
[root@www trash]# ls
undel 00000047|f1
[root@www mfs]# ll dgg
-rw-r--r-- 1 root root 8 Jan 13 08:45 dgg
注意:如果在同一路徑下有個新的同名文件,那麼恢復不會成功
從“垃圾箱”中刪除文件結果是釋放之前被它站用的空間(刪除有延遲,數據被異步刪除)。在這種被從“垃圾箱”刪除的情況下,該文件是不可能恢復了。
可以通過mfssetgoal 工具來改變文件的拷貝數,也可以通過mfssettrashtime 工具來改變存儲在“垃圾箱”中的時間。
MFSMETA 的目錄裏,除了trash trash/undel 兩個目錄外,還有第三個目錄reserved,該目錄內有已經刪除的文件,但卻有一直打開着。在用戶關閉了這些被打開的文件後,reserved 目錄中的文件將被刪除,文件的數據也將被立即刪除。在reserved 目錄中文件的命名方法同trash 目錄中的一樣,但是不能有其他功能的操作。
3.4 快照
MooseFS 系統的另一個特徵是利用mfsmakesnapshot 工具給文件或者是目錄樹做快照,例如:
$ mfsmakesnapshot source ... destination
Mfsmakesnapshot 是在一次執行中整合了一個或是一組文件的拷貝,而且任何修改這些文件的源文件都不會影響到源文件的快照,就是說任何對源文件的操作,例如寫入源文件,將不會修改副本(或反之亦然)
文件快照可以用mfsappendchunks,就像MooseFS1.5 中的mfssnapshot 一樣,,作爲選擇,二者都可以用。例如:
$ mfsappendchunks destination-file source-file ...
當有多個源文件時,它們的快照被加入到同一個目標文件中(每個chunk 的最大量是chunk
3.5 額外的屬性
文件或目錄的額外的屬性(noowner, noattrcache, noentrycache),可以被mfsgeteattrmfsseteattrmfsdeleattr 工具檢查, 設置, 刪除, 其行爲類似mfsgetgoal/mfssetgoal or 或者是mfsgettrashtime/mfssettrashtime,詳細可見命令手冊。
4MooseFS 元數據的備份
通常元數據有兩部分的數據
1.主要元數據文件metadata.mfs,當mfsmaster 運行的時候會被命名爲metadata.mfs.back
2.元數據改變日誌changelog.*.mfs,存儲了過去的N 小時的文件改變(N 的數值是由BACK_LOGS參數設置的,參數的設置在mfschunkserver.cfg 配置文件中)。
主要的元數據文件需要定期備份,備份的頻率取決於取決於多少小時changelogs 儲存。元數據changelogs 應該實時的自動複製。自從MooseFS 1.6.5,這兩項任務是由mfsmetalogger 守護進程做的。
5MooseFS master的恢復
一旦mfsmaster 崩潰(例如因爲主機或電源失敗),需要最後一個元數據日誌changelog 併入主要的metadata 中。這個操作時通過mfsmetarestore 工具做的,最簡單的方法是:
如果master 數據被存儲在MooseFS 編譯指定地點外的路徑,則要利用-d 參數指定使用,如:
mfsmetarestore -a -d /storage/mfsmaster
6 從備份恢復MooseFS master
爲了從備份中恢復一個master,需要做:
1、安裝一個mfsmaster
2、利用同樣的配置來配置這臺mfsmaster(利用備份來找回mfsmaster.cfg),可見配置文件也是需要備份的。
3、找回metadata.mfs.back 文件,可以從備份中找,也可以中metalogger 主機中找(如果啓動了metalogger 服務),然後把metadata.mfs.back 放入data 目錄,一般爲${prefix}/var/mfs
4、從在master 宕掉之前的任何運行metalogger 服務的服務器上拷貝最後metadata 文件,然後放入mfsmaster 的數據目錄。
5、利用mfsmetarestore 命令合併元數據changelogs,可以用自動恢復模式mfsmetarestore a,也可以利用非自動化恢復模式,語法如下:
mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章