分佈式文件存儲--MFS
今天給大家講的是目前最比較流行的分佈式文件存儲--MFS。MooseFS呢是一個具有容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
它有好多比較好的特點比如:
下面給大家介紹下mfs的體系結構和工作原理:
任意數量的主機,可以通過mfsmount進程與管理服務器(接收和更改元數據)和數據服務器(改變實際文件數據)進行交流。
(官方網絡示意圖)
(讀寫原理圖)
MFS的讀數據過程1.client當需要一個數據時,首先向master server發起查詢請求;
2.管理服務器檢索自己的數據,獲取到數據所在的可用數據服務器位置ip|port|chunkid;
3.管理服務器將數據服務器的地址發送給客戶端;
4.客戶端向具體的數據服務器發起數據獲取請求;
5.數據服務器將數據發送給客戶端;
MFS的寫數據過程
1.當客戶端有數據寫需求時,首先向管理服務器提供文件元數據信息請求存儲地址(元數據信息如:文件名|大小|份數等);
2.管理服務器根據寫文件的元數據信息,到數據服務器創建新的數據塊;
3.數據服務器返回創建成功的消息;
4.管理服務器將數據服務器的地址返回給客戶端(chunkIP|port|chunkid);
5.客戶端向數據服務器寫數據;
6.數據服務器返回給客戶端寫成功的消息;
7.客戶端將此次寫完成結束信號和一些信息發送到管理服務器來更新文件的長度和最後修改時間
MFS的刪除文件過程
1.客戶端有刪除操作時,首先向Master發送刪除信息;
2.Master定位到相應元數據信息進行刪除,並將chunk server上塊的刪除操作加入隊列異步清理;
3.響應客戶端刪除成功的信號
MFS修改文件內容的過程
1.客戶端有修改文件內容時,首先向Master發送操作信息;
2.Master申請新的塊給.swp文件,
3.客戶端關閉文件後,會向Master發送關閉信息;
4.Master會檢測內容是否有更新,若有,則申請新的塊存放更改後的文件,刪除原有塊和.swp文件塊;
5.若無,則直接刪除.swp文件塊。
MFS重命名文件的過程
1.客戶端重命名文件時,會向Master發送操作信息;
2.Master直接修改元數據信息中的文件名;返回重命名完成信息;
MFS遍歷文件的過程
1.遍歷文件不需要訪問chunk server,當有客戶端遍歷請求時,向Master發送操作信息;
3.客戶端接收到信息後顯示
好了上面已經介紹的差不多了,下面咱們開始安裝部署mfs。
一、環境介紹
192.168.1.10 master、metalogger
192.168.1.11 chunk server、client server
我這裏爲了方便我把master和metalogger放到了一塊、但是實際生產環境中不要這樣因爲master本來就是單點,還有chunk server和client server也不應該放到一塊。
二、安裝步驟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | master server 搭建 [root@localhost Desktop] # useradd mfs -s /sbin/nologin [root@localhost Desktop] # mv mfs-1.6.20-2.tar.gz /tmp [root@localhost Desktop] # cd /tmp/ [root@localhost tmp] # tar xf mfs-1.6.20-2.tar.gz [root@localhost tmp] # cd mfs-1.6.20-2 [root@localhost mfs-1.6.20-2] # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount [root@localhost mfs-1.6.20-2] # cd /usr/local/mfs/etc/ [root@localhost etc] # ls mfsexports.cfg.dist mfsmaster.cfg.dist mfsmetalogger.cfg.dist [root@localhost etc] # cp mfsmaster.cfg.dist mfsmaster.cfg [root@localhost etc] # cp mfsexports.cfg.dist mfsexports.cfg [root@localhost etc] # cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs [root@localhost etc] # /usr/local/mfs/sbin/mfsmaster start working directory: /usr/local/mfs/var/mfs lockfile created and locked initializing mfsmaster modules ... loading sessions ... file not found if it is not fresh installation then you have to restart all active mounts !!! exports file has been loaded loading metadata ... create new empty filesystemmetadata file has been loaded no charts data file - initializing empty charts master <-> metaloggers module: listen on *:9419 master <-> chunkservers module: listen on *:9420 main master server module: listen on *:9421 mfsmaster daemon initialized properly [root@localhost etc] # /usr/local/mfs/sbin/mfscgiserv starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi ) chunk server 搭建 [root@localhost] # useradd mfs -s /sbin/nologin [root@localhost ] # cd /tmp/ [root@localhost tmp] # tar xf mfs-1.6.20-2.tar.gz [root@localhost tmp] # cd mfs-1.6.20-2 [root@localhost mfs-1.6.20-2] # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount [root@localhost mfs-1.6.20-2] # make [root@localhost mfs-1.6.20-2] # make install [root@localhost mfs-1.6.20-2] # cd /usr/local/mfs/etc/ [root@localhost etc] # cp mfschunkserver.cfg.dist mfschunkserver.cfg mfs使用空間配置 [root@localhost etc] # cp mfshdd.cfg.dist mfshdd.cfg [root@localhost etc] # vim /usr/local/mfs/etc/mfschunkserver.cfg MASTER_HOST = 192.168.1.10 [root@localhost etc] # mkdir /data [root@localhost etc] # mount /dev/hda1 /data [root@localhost etc] # chown -R mfs:mfs /data [root@localhost etc] # vim mfshdd.cfg /data [root@localhost etc] # /usr/local/mfs/sbin/mfschunkserver start working directory: /usr/local/mfs/var/mfs lockfile created and locked initializing mfschunkserver modules ... hdd space manager: scanning folder /data/ ... hdd space manager: scanning complete hdd space manager: /data/ : 0 chunks found hdd space manager: scanning complete main server module: listen on *:9422 no charts data file - initializing empty charts mfschunkserver daemon initialized properly metalogger server 搭建 [root@localhost ~] # useradd mfs -s /sbin/nologin [root@localhost ~] # cd /tmp/ [root@localhost tmp] # tar xf mfs-1.6.20-2.tar.gz [root@localhost tmp] # cd mfs-1.6.20-2 [root@localhost mfs-1.6.20-2] # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount [root@localhost mfs-1.6.20-2] # make [root@localhost mfs-1.6.20-2] # make install [root@localhost mfs-1.6.20-2] # cd /usr/local/mfs/etc/ [root@localhost etc] # cp mfsmetalogger.cfg.dist mfsmetalogger.cfg [root@localhost etc] # vim mfsmetalogger.cfg MASTER_HOST = 192.168.1.10 [root@localhost etc] # /usr/local/mfs/sbin/mfsmetalogger start working directory: /usr/local/mfs/var/mfs lockfile created and locked initializing mfsmetalogger modules ... mfsmetalogger daemon initialized properly client server搭建 [root@localhost ~] # yum install fuse fuse-libs fuse-devel [root@localhost ~] # useradd mfs -s /sbin/nologin [root@localhost ~] # cd /tmp/ [root@localhost tmp] # tar xf mfs-1.6.20-2.tar.gz [root@localhost tmp] # cd mfs-1.6.20-2 [root@localhost mfs-1.6.20-2] # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver [root@localhost mfs-1.6.20-2] # make [root@localhost mfs-1.6.20-2] # make install [root@localhost mfs-1.6.20-2] # /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.1.10 mfsmaster accepted connection with parameters: read -write,restricted_ip ; root mapped to root:root [root@localhost mfs-1.6.20-2] # /usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.1.10 mfsmaster accepted connection with parameters: read -write,restricted_ip [root@localhost mfs-1.6.20-2] # df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 8.6G 2.6G 5.6G 32% / /dev/vda1 99M 12M 82M 13% /boot tmpfs 252M 0 252M 0% /dev/shm mfs #192.168.1.10:9421 22G 0 22G 0% /mnt/mfs |
三、MFS的高級特性
1.冗餘goal設置
目標(goal),是指文件被拷貝的份數,設定了拷貝的份數後是可以通過mfsgetgoal 命令來證實的,也可以通過mfsrsetgoal 來改變設定。
/usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/test1
/usr/local/mfs/bin/mfsgetgoal /mnt/mfs/test1
/mnt/mfs/test1: 3
用mfsgetgoal –r 和mfssetgoal –r 同樣的操作可以對整個樹形目錄遞歸操作,其等效於mfsrsetgoal命令。實際的拷貝份數可以通過mfscheckfile 和mfsfile info 命令來證實。
注意以下幾種特殊情況:
一個不包含數據的零長度的文件,儘管沒有設置爲非零的目標(the non-zero “goal”),但用mfscheckfile 命令查詢將返回一個空的結果;將文件填充內容後,其會根據設置的goal創建副本;這時再將文件清空,其副本依然作爲空文件存在。
假如改變一個已經存在的文件的拷貝個數,那麼文件的拷貝份數將會被擴大或者被刪除,這個過程會有延時。可以通過mfscheckfile 命令來證實。
對一個目錄設定“目標”,此目錄下的新創建文件和子目錄均會繼承此目錄的設定,但不會改變已經存在的文件及目錄的拷貝份數。
可以通過mfsdirinfo來查看整個目錄樹的信息摘要。
2.垃圾回收站
一個刪除文件能夠存放在一個“ 垃圾箱”的時間就是一個隔離時間, 這個時間可以用mfsgettrashtime 命令來驗證,也可以用mfssettrashtime 命令來設置。如:
/usr/local/mfs/bin/mfssettrashtime 64800 /mnt/mfs/test1
/usr/local/mfs/bin/mfsgettrashtime /mnt/mfs/test1
/mnt/mfs/test1: 64800
時間的單位是秒(有用的值有:1 小時是3600 秒,24 – 86400 秒,1天 – 604800 秒)。就像文件被存儲的份數一樣, 爲一個目錄設定存放時間是要被新創建的文件和目錄所繼承的。數字0 意味着一個文件被刪除後, 將立即被徹底刪除,在想回收是不可能的。
刪除文件可以通過一個單獨安裝MFSMETA 文件系統。特別是它包含目錄/ trash (包含任然可以被還原的被刪除文件的信息)和/ trash/undel (用於獲取文件)。只有管理員有權限訪問MFSMETA(用戶的uid 0,通常是root)。
/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.0.1
被刪文件的文件名在“垃圾箱”目錄裏還可見,文件名由一個八位十六進制的數i-node 和被刪文件的文件名組成,在文件名和i-node 之間不是用“/”,而是用了“|”替代。如果一個文件名的長度超過操作系統的限制(通常是255 個字符),那麼部分將被刪除。通過從掛載點起全路徑的文件名被刪除的文件任然可以被讀寫。
移動這個文件到trash/undel 子目錄下,將會使原始的文件恢復到正確的MooseFS 文件系統上路徑下(如果路徑沒有改變)。如果在同一路徑下有個新的同名文件,那麼恢復不會成功。
從“垃圾箱”中刪除文件結果是釋放之前被它站用的空間(刪除有延遲,數據被異步刪除)。
在MFSMETA中還有另一個目錄reserved,該目錄內的是被刪除但依然打開的文件。在用戶關閉了這些被打開的文件後,reserved 目錄中的文件將被刪除,文件的數據也將被立即刪除。在reserved 目錄中文件的命名方法同trash 目錄中的一樣,但是不能有其他功能的操作。
3.快照snapshot
MooseFS 系統的另一個特徵是利用mfsmakesnapshot 工具給文件或者是目錄樹做快照。
/usr/local/mfs/bin/mfsmakesnapshot source ... destination
Mfsmakesnapshot 是在一次執行中整合了一個或是一組文件的拷貝,而且任何修改這些文件的源文件都不會影響到源文件的快照, 就是說任何對源文件的操作,例如寫入源文件,將不會修改副本(或反之亦然)。
也可以使用mfsappendchunks:
/usr/local/mfs/bin/mfsappendchunks destination-file source-file ...
當有多個源文件時,它們的快照被加入到同一個目標文件中(每個chunk 的最大量是chunk)。
本文出自 “windy丶寒” 博客,請務必保留此出處http://sangh.blog.51cto.com/6892345/1363253