MFS分佈式文件系統

Mfs分佈式文件系統

前言:前面我們學習過NFS,以及虛擬化課程的時候我們學習過openfiler,這兩個都是屬於存儲服務器。但是他們有着共同的缺點,就是性能不好,因爲都是通過共享方式共享一個存儲空間,使得服務器不堪重負,會出現超時的問題,而且存在着單點故障問題,儘管可以用rsync同步數據到另外一臺服務器上做備份,但性能方便沒有任何提升。而分佈式文件系統把數據分散存儲在不同的服務器上,讀取數據的時候相當於同時讀取,不像nfs是一對多的關係,而是多對多的關係,這樣可以使得性能得到大幅提升。

今天我們學習使用MFS搭建分佈式文件系統,MFS具有容錯功能,高可用,可擴展的功能。MFS把數據分散在多臺服務器上,但用戶看到的只是一個源。

一、工作原理

1、分佈式原理

分佈式文件系統就是把一些分散在多臺計算機上的共享文件夾,集合到一個共享文件夾內,用戶要訪問這些文件夾的時候,只要打開一個文件夾,就可以的看到所有鏈接到此文件夾內的共享文件夾。

2、MFS原理

MFS是一個具有容錯性的網絡分佈式文件系統,它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。

1)MFS的組成

元數據服務器(Master):在整個體系中負責管理文件系統,維護元數據,目前不支持高可用。

元數據日誌服務器(MetaLogger):備份Master服務器的變化日誌文件,當master服務器損壞,可以從日誌服務器中取得文件恢復。

數據存儲服務器(Chunk Server):真正存儲數據的服務器,服務器越多,容量就越大,可靠性越高,性能越好。

客戶端(Client):可以像掛載NFS一樣掛載MFS文件系統

wKioL1msE43yHpScAACNjTmivwg698.png 

9419

9420

9421

2)MFS讀數據的處理過程

n客戶端向元數據服務器發出讀請求

n元數據服務器把所需數據存放的位置(Chunk Server的IP地址和Chunk編號)告知客戶端

n客戶端向已知的Chunk Server請求發送數據

nChunk Server向客戶端發送數據

 

3)寫入的過程

n客戶端向元數據服務器發送寫入請求

n元數據服務器與Chunk Server進行交互,但元數據服務器只在某些服務器創建新的分塊Chunks,創建成功後由Chunk Servers告知元數據服務器操作成功

n元數據服務器告知客戶端,可以在哪個Chunk Server的哪些Chunks寫入數據

n客戶端向指定的Chunk Server寫入數據

n該Chunk Server與其他Chunk Server進行數據同步,同步成功後Chunk Server告知客戶端數據寫入成功

n客戶端告知元數據服務器本次寫入完畢

 

二、實驗環境

1、實驗拓撲

wKiom1msE8_TJDaiAACA-kVvIgU478.png

2、虛擬機環境

wKioL1msE8jBJLs1AADP6hNM_lU999.png 

三、實驗步驟

1、搭建master server

1)停止防火牆並且安裝支持包

wKiom1msE_XC5644AABnDJOfiLo355.png 

2)創建用戶

wKiom1msFAXSogcVAAAm8-Q9Crs909.png 

3)安裝源碼包

[root@centos3 ~]# tar zxf mfs-1.6.27-5.tar.gz

[root@centos3 ~]# cd mfs-1.6.27

[root@centos3 mfs-1.6.27]# ./configure \

>--prefix=/usr/local/mfs \//指定安裝目錄

>--with-default-user=mfs \//指定程序運行用戶

>--with-default-group=mfs \//指定程序運行組

>--disable-mfschunkserver  \//禁用Chunk功能

>--disable-mfsmount    \//禁用mfsmount功能

[root@centos3 mfs-1.6.27]# make && make install //編譯安裝

wKioL1msFArSyw6sAACDJR8oAvk779.png 

wKiom1msFEOBtH5BAAAocuHPJNE056.png

4)複製文件(設置配置文件)

[root@centos3 mfs-1.6.

[root@centos3 mfs]# ls

mfsexports.cfg.dist  mfsmetalogger.cfg.dist

mfsmaster.cfg.dist   mfstopology.cfg.dist

[root@centos3 mfs]# cp mfsexports.cfg.dist  mfsexports.cfg

[root@centos3 mfs]# cp mfsmaster.cfg.dist  mfsmaster.cfg

[root@centos3 mfs]# cp mfstopology.cfg.dist  mfstopology.cfg

[root@centos3 mfs]# cd /usr/local/mfs/var/mfs/

[root@centos3 mfs]# ls

metadata.mfs.empty

[root@centos1 mfs]# cp metadata.mfs.empty  metadata.mfs

這個文件存放master的變化信息

wKioL1msFFKCFo9eAABrJavYxGU861.png

5)配置文件(下面的只是介紹一下,不用修改,默認就好)

需要用到兩個配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被掛載目錄及訪問權限)

mfsmaster.cfg常用的參數如下,默認全部都是不需要修改的,全文都是以#開頭,也就是說都是默認配置

[root@centos1 mfs]# cd /usr/local/mfs/etc/mfs/

[root@centos1 mfs]# vim mfsmaster.cfg

#WORKING_USER = mfs//運行masterserver的用戶

# WORKING_GROUP = mfs//運行masterserver的組

# SYSLOG_IDENT = mfsmaster//masterserver在syslog的標示,說明是由masterserver產生的

# LOCK_MEMORY = 0//是否執行mlockall(),以避免mfsmaster進程溢出默認爲0

# NICE_LEVEL = -19//運行的優先級,進程必須由root啓動

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg

//被掛載目錄及其權限控制文件的存放位置

# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg

# DATA_PATH = /usr/local/mfs/var/mfs//數據存放路徑

# BACK_LOGS = 50 //metadata改變的log文件數目(默認是50)

# BACK_META_KEEP_PREVIOUS = 1

# REPLICATIONS_DELAY_INIT = 300  //延遲複製的時間(默認300)

# REPLICATIONS_DELAY_DISCONNECT = 3600  //Chunkserver斷開復制延遲(默認是3600秒)

# MATOML_LISTEN_HOST = *//metalogger監聽的IP地址默認是所有地址

# MATOML_LISTEN_PORT = 9419//metalogger監聽的端口地址(默認爲9419)

# MATOML_LOG_PRESERVE_SECONDS = 600  

# MATOCL_LISTEN_HOST = *//用於chunkserver連接的IP地址(默認爲*代表所有IP)

# MATOCL_LISTEN_PORT = 9421//用戶客戶端掛在的監聽端口9421

# CHUNKS_LOOP_MAX_CPS = 100000

# CHUNKS_LOOP_MIN_TIME = 300//chunks的迴環頻率(默認300)

# CHUNKS_SOFT_DEL_LIMIT = 10

# CHUNKS_HARD_DEL_LIMIT = 25

# CHUNKS_WRITE_REP_LIMIT = 2 //在一個循環裏複製到另外一個Chunkserver的最大Chunk數

# CHUNKS_READ_REP_LIMIT = 10//在一個循環裏從一個Chunkserver複製的的最大Chunk數

# ACCEPTABLE_DIFFERENCE = 0.1   

# SESSION_SUSTAIN_TIME = 86400

# REJECT_OLD_CLIENTS = 0//彈出低於1.6.0的客戶端掛接(0或1,默認是0)

# deprecated:

# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead

# LOCK_FILE - lock system has been changed, and this option is used onl

y to search for old lockfile

 

 

mfsexports.cfg文件參數格式如下

# Allow everything but "meta".

192.168.1.0/24          /       rw,alldirs,maproot=0

# Allow "meta".

*               .       rw                          

該文件,每一個條目分爲三個部分

第一部分:客戶端IP地址

第二部分:被掛載的目錄

第三部分:客戶端擁有的權限

地址可以指定幾種表現形式

*代表所有的IP地址

n.n.n.n單個ip地址

n.n.n.n/bIP網絡地址/位數掩碼

n.n.n.n/m.m.m.m IP網絡地址/子網掩碼

f.f.f.f-t.t.t.t IP段

目錄部分的標示如下

/標示MFS根

.表示MFSMETA文件系統

權限部分如下所示

ro——只讀模式共享

rw——讀寫模式共享

alldirs——允許掛載任何指定的子目錄

maproot——映射爲root,還是普通用戶

password——指定客戶端的密碼

以上就是對mfsmaster.cfg和mfsexport文件的解釋,默認就是最好的,不需要做任任何修改。

 

6)啓動master server

第一遍啓動的時候,可能會出現以下錯誤信息

[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster  start

loading sessions ... file not found

如果出現以上信息,則關閉服務並重新啓動就可以了

[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster  -s

-s 表示停止服務

[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster  start

再啓動就不會出現任何信息

wKioL1msFKyDFin8AABeeMZH1bc956.png 

7)查看是否啓動

wKioL1msFL-CuRTGAAA8ZounWyQ312.png 

8)建立防火牆規則

[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT

[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9420 -j ACCEPT

[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9421 -j ACCEPT

[root@centos1 mfs]# service iptables save

 

2、搭建metalogger server

1)安裝mfs(同上)

wKioL1msFUXCpULiAABdzdtq7mU742.png

wKioL1msFUWglTgOAAAqUdlROWs407.png

wKiom1msFWCSy2PGAACHDuEjZag892.png

wKioL1msFUWivkOLAAAr76Y0z0U692.png

 

2)複製文件

wKioL1msFYrAiRMQAABEXoSD5No479.png

3)修改配置文件,添加master服務器的ip地址(注意去掉註釋和空格)

wKioL1msFZvQNvlCAABDCWSABfQ610.png 

4)開啓服務

wKiom1msFcmzV9SZAABe3K_Tcck410.png 

5)查看端口

[root@centos5 mfs]# netstat -anpt | grep 9419

tcp        0      0 192.168.1.2:50929           192.168.1.1:9419            ESTABLISHED 53533/mfsmetalogger

[root@centos5 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT

[root@centos5 mfs]# service iptables save


3、搭建chunk server(二臺chunk的搭建步驟相同)

1)安裝mfs(同上)

wKiom1msFhjjQP9HAABaOQewEJA691.png

wKioL1msFf6jQg1vAAAmmG15vT0118.png

wKiom1msFhniVsjhAABqzm46QQ0762.png

wKioL1msFf6zSdU7AABKH6wD-_c140.png

 

2)複製文件

wKiom1msFj6h7FX_AABKbxK-Hy0339.png

3)修改配置文件(一共2個)

 vim mfschunkserver.cfg

wKioL1msFjWQ6wVDAABkVnfn43w321.png 

vim mfshdd.cfg(添加/data)

wKiom1msFmTDCnqfAAA8ago1sug006.png 

4)建立文件夾並開啓服務

wKioL1msFmCS0Z1yAACl6eJuJdw537.png

5)開啓例外

[root@centos5 mfs]# ps -ef | grep mfs

mfs       56269      1  0 20:54 ?        00:00:00 /usr/local/mfs/sbin/mfschunkserver start

root      56297  48740  0 20:54 pts/0    00:00:00 grep mfs

[root@centos5 mfs]# iptables -I INPUT -p tcp --dport 9422 -j ACCEPT

[root@centos5 mfs]# service iptables save

 

注意:第二臺chunk的配置和上面的配置完全一樣,這裏就不在說明了

 

4、客戶端配置

1)安裝fuseMFS(客戶端依賴於FUSE)

wKioL1msFpuzGyxqAABKH6wD-_c826.png

wKiom1msFrayGUmhAABHXAcvs9M351.png

 

2)設置環境變量

wKiom1msFuqxgvfGAAAlYdGRAlM920.png 

添加下面這行

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

wKioL1msFtCj_CGqAABR5kuamkU141.png 

wKioL1msFxyRgSzRAAAnQ-UmP50383.png

3)安裝MFS客戶端


wKiom1msFzeQT7jRAAAnWlMl98w485.png

 

配置

cd   mfs-1.6.27

wKiom1msGEmzFqIKAABAHDP7pfA690.png

wKiom1msF-ig2il8AAAl7YZYg_s977.png

4)掛載文件系統

wKiom1msF-jCa92YAABN_xFDb-w730.png

wKiom1msF6HTGa3ZAABMhpvBqW4131.png

5)查看掛載情況

wKiom1msGMzRpff1AACGSA9N0KI578.png 

6)設置文件被複制的份數並測試

 

MFS客戶端安裝完畢後,會生成/usr/local/mfs/bin/目錄,在這個目錄下有很多命令是用戶所需的。

mfsgetgoal命令用來查看文件被複制的分數,利用-r命令可以對整個目錄進行遞歸,goal是指文件比複製的分數。

[root@centos6 mfs-1.6.27]# mfsgetgoal  -r /mnt/mfs/

/mnt/mfs/:

 directories with goal  1 :          1

由於還沒有設置,默認爲1份

命令mfssetgoal用來設置文件被複制的分數,生產環境下Chunk server節點數量應大於2,文件副本數小於Chunk server服務器的數量。由於我有二臺Chunk server 我將副本數量設置爲1

 

在vim  /etc/profile文件中增加一行(爲了方便執行命令)

wKiom1msGMzDSn3SAABDCp2ph3w129.png 

wKioL1msGLKTavLcAAAlmgY99l4026.png 

設置查詢文件被複制的份數:

wKioL1msGFnQ_0JTAAA0TjreXTo653.png 

wKioL1msGUbwgjcfAAA8SHH1zWE593.png 

在/mnt/mfs中建立文件

wKioL1msGWfh6itDAAAz8vRKrDE584.png 

分別打開兩臺chunk查看/data下,都產生了加密的數據,說明成功了

wKiom1msGcfB1p10AAC-Y__KZ48765.png

wKiom1msGcfT0qytAADNyDmH_vI214.png

 

5、mfs監控

mfscgiserv是用python編寫的一個web服務器,其監聽端口是9425,可以再masster server 上通過 /usr/local/mfs/sbin/mfscgiserv來啓動,用戶利用瀏覽器就可以完全監控所有客戶掛接、Chunk server、Master server等。

在一臺客戶端上通過瀏覽器訪問http://192.168.1.100:9425

 

[root@centos3 mfs]# /usr/local/mfs/sbin/mfscgiserv

lockfile created and locked

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)

[root@centos3 mfs]# iptables -I INPUT -p tcp --dport 9425 -j ACCEPT    

wKioL1msGfDySvlUAADsQnt5doE153.png

wKiom1msGguxJFS4AACnCvQ7BR4928.png

 

6、災難恢復

MFS維護及災難恢復

1)MFS集羣的啓動與停止

MFS集羣的啓動順序如下

(1)啓動mfsmaster進程

(2)啓動所有的mfsChunkserver進程

(3)啓動mfsmetalogger進程

(4)在所有客戶端上掛載NFS文件系統

MFS集羣的停止順序如下

(1)在所有客戶端卸載MFS掛載

(2)停止Chunkserver進程

(3)停止mfsmetalogger進程

(4)停止mfsmaster進程

 

2)MFS災難恢復

整個MFS體系中,直接斷電只有master server進程有可能無法啓動,可以在master上使用命令/usr/local/mfs/sbin/mfsmetarestore -a修復

我們將master server 直接斷電(必須運行的時間夠20分鐘纔可以斷電,否則數據很有可能直接丟失)(模擬:直接關閉掉master server 主機)

[root@centos1 ~]# /usr/local/mfs/sbin/mfsmaster start

init: file system manager failed !!!

error occured during initialization - exiting

 

[root@centos1 ~]# /usr/local/mfs/sbin/mfsmetarestore -a

loading objects (files,directories,etc.) ... ok

loading names ... ok

loading deletion timestamps ... ok

loading chunks data ... ok

checking filesystem consistency ... ok

connecting files and chunks ... ok

progress: current change: 0 (first:0 - last:0 - 100% - ETA:finished)

store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs

[root@centos1 ~]# /usr/local/mfs/sbin/mfsmaster  start

3)從MetaLogger中恢復

 

MFS元數據通常有兩部分的數據,分別如下

(1)主要元數據文件metadata.mfs,當mfsmaster運行時會被命名爲metadata.back.mfs。

(2)元數據改變日誌 changelog.*.mfs,存儲了過去N小時的文件變更。

 

在Master 發生故障時,可以從MetaLogger中恢復,步驟如下

(1)安裝一臺mfsmaster,利用同樣的配置來配置這臺mfsmaster,mfsmaster進程先不要啓動

(2)將metalogger上/usr/local/mfs/var/mfs/目錄下所有文件複製到mfsmaster相應的目錄中。

[root@centos3 mfs]# scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

[root@centos3 mfs]# /usr/local/mfs/sbin/mfsmetarestore  -m metadata_ml.mfs.back -o metadata.mfs changelog_ml.*.mfs

loading objects (files,directories,etc.) ... ok

loading names ... ok

loading deletion timestamps ... ok

loading chunks data ... ok

checking filesystem consistency ... ok

connecting files and chunks ... ok

changelog_ml.0.mfs:1: version mismatch

[root@centos3 mfs]# /usr/local/mfs/sbin/mfsmaster  start

[root@centos3 mfs]# ls

Ceshi

 

注意:如果是全新安裝的master,恢復數據後,需要更改metalogger和chunkserver,配置MASTER_HOST的ip地址,客戶端也需要重新掛載mfs目錄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章