版權(quán)聲明:原創(chuàng)作品抛蚤,謝絕轉(zhuǎn)載!否則將追究法律責(zé)任赏胚。
Mfs分布式文件系統(tǒng)
前言:前面我們學(xué)習(xí)過NFS什荣,以及虛擬化課程的時(shí)候我們學(xué)習(xí)過openfiler呀忧,這兩個(gè)都是屬于存儲(chǔ)服務(wù)器。但是他們有著共同的缺點(diǎn)溃睹,就是性能不好,因?yàn)槎际峭ㄟ^共享方式共享一個(gè)存儲(chǔ)空間胰坟,使得服務(wù)器不堪重負(fù)因篇,會(huì)出現(xiàn)超時(shí)的問題泞辐,而且存在著單點(diǎn)故障問題,盡管可以用rsync同步數(shù)據(jù)到另外一臺(tái)服務(wù)器上做備份竞滓,但性能方便沒有任何提升咐吼。而分布式文件系統(tǒng)把數(shù)據(jù)分散存儲(chǔ)在不同的服務(wù)器上,讀取數(shù)據(jù)的時(shí)候相當(dāng)于同時(shí)讀取商佑,不像nfs是一對(duì)多的關(guān)系锯茄,而是多對(duì)多的關(guān)系,這樣可以使得性能得到大幅提升茶没。
今天我們學(xué)習(xí)使用MFS搭建分布式文件系統(tǒng)肌幽,MFS具有容錯(cuò)功能,高可用抓半,可擴(kuò)展的功能喂急。MFS把數(shù)據(jù)分散在多臺(tái)服務(wù)器上,但用戶看到的只是一個(gè)源笛求。
客戶端向元數(shù)據(jù)服務(wù)器發(fā)出讀請(qǐng)求
元數(shù)據(jù)服務(wù)器把所需數(shù)據(jù)存放的位置(Chunk Server的IP地址和Chunk編號(hào))告知客戶端
客戶端向已知的Chunk Server請(qǐng)求發(fā)送數(shù)據(jù)
Chunk Server向客戶端發(fā)送數(shù)據(jù)
3)寫入的過程
客戶端向元數(shù)據(jù)服務(wù)器發(fā)送寫入請(qǐng)求
元數(shù)據(jù)服務(wù)器與Chunk Server進(jìn)行交互廊移,但元數(shù)據(jù)服務(wù)器只在某些服務(wù)器創(chuàng)建新的分塊Chunks,創(chuàng)建成功后由Chunk Servers告知元數(shù)據(jù)服務(wù)器操作成功
元數(shù)據(jù)服務(wù)器告知客戶端探入,可以在哪個(gè)Chunk Server的哪些Chunks寫入數(shù)據(jù)
客戶端向指定的Chunk Server寫入數(shù)據(jù)
該Chunk Server與其他Chunk Server進(jìn)行數(shù)據(jù)同步狡孔,同步成功后Chunk Server告知客戶端數(shù)據(jù)寫入成功
客戶端告知元數(shù)據(jù)服務(wù)器本次寫入完畢
實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)拓?fù)?/p>
虛擬機(jī)環(huán)境
實(shí)驗(yàn)步驟
搭建master server
停止防火墻并且安裝支持包
創(chuàng)建用戶
安裝源碼包
[root@centos3~]# tar zxf mfs-1.6.27-5.tar.gz
[root@centos3~]# cd mfs-1.6.27
[root@centos3mfs-1.6.27]# ./configure\
>--prefix=/usr/local/mfs\//指定安裝目錄
>--with-default-user=mfs\//指定程序運(yùn)行用戶
>--with-default-group=mfs\//指定程序運(yùn)行組
>--disable-mfschunkserver\//禁用Chunk功能
>--disable-mfsmount\//禁用mfsmount功能
[root@centos3mfs-1.6.27]# make && make install//編譯安裝
4)復(fù)制文件(設(shè)置配置文件)
[root@centos3mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@centos3mfs]# ls
mfsexports.cfg.distmfsmetalogger.cfg.dist
mfsmaster.cfg.distmfstopology.cfg.dist
[root@centos3mfs]# cp mfsexports.cfg.dist ?mfsexports.cfg
[root@centos3mfs]# cp mfsmaster.cfg.dist ?mfsmaster.cfg
[root@centos3mfs]# cp mfstopology.cfg.dist ?mfstopology.cfg
[root@centos3mfs]# cd /usr/local/mfs/var/mfs/
[root@centos3mfs]# ls
metadata.mfs.empty
[root@centos1 mfs]# cp metadata.mfs.empty ?metadata.mfs
這個(gè)文件存放master的變化信息
配置文件(下面的只是介紹一下,不用修改蜂嗽,默認(rèn)就好)
需要用到兩個(gè)配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被掛載目錄及訪問權(quán)限)
mfsmaster.cfg常用的參數(shù)如下苗膝,默認(rèn)全部都是不需要修改的,全文都是以#開頭徒爹,也就是說都是默認(rèn)配置
[root@centos1 mfs]# cd /usr/local/mfs/etc/mfs/
[root@centos1 mfs]# vim mfsmaster.cfg
WORKING_USER = mfs//運(yùn)行masterserver的用戶
# WORKING_GROUP = mfs//運(yùn)行masterserver的組
# SYSLOG_IDENT = mfsmaster//masterserver在syslog的標(biāo)示荚醒,說明是由masterserver產(chǎn)生的
# LOCK_MEMORY = 0//是否執(zhí)行mlokall(),以避免mfsmaster進(jìn)程溢出默認(rèn)為0
# NICE_LEVEL = -19//運(yùn)行的優(yōu)先級(jí)隆嗅,進(jìn)程必須由root啟動(dòng)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
//被掛載目錄及其權(quán)限控制文件的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs//數(shù)據(jù)存放路徑
# BACK_LOGS = 50//metadata改變的log文件數(shù)目(默認(rèn)是50)
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 ?//延遲復(fù)制的時(shí)間(默認(rèn)300)
# REPLICATIONS_DELAY_DISCONNECT = 3600 ?//Chunkserver斷開復(fù)制延遲(默認(rèn)是3600秒)
# MATOML_LISTEN_HOST = *//metalogger監(jiān)聽的IP地址默認(rèn)是所有地址
# MATOML_LISTEN_PORT = 9419//metalogger監(jiān)聽的端口地址(默認(rèn)為9419)
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCL_LISTEN_HOST = *//用于chunkserver連接的IP地址(默認(rèn)為*代表所有IP)
# MATOCL_LISTEN_PORT = 9421//用戶客戶端掛在的監(jiān)聽端口9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300//chunks的回環(huán)頻率(默認(rèn)300)
# CHUNKS_SOFT_DEL_LIMIT = 10
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2//在一個(gè)循環(huán)里復(fù)制到另外一個(gè)Chunkserver的最大Chunk數(shù)
# CHUNKS_READ_REP_LIMIT = 10//在一個(gè)循環(huán)里從一個(gè)Chunkserver復(fù)制的的最大Chunk數(shù)
# ACCEPTABLE_DIFFERENCE = 0.1
# SESSION_SUSTAIN_TIME = 86400
# REJECT_OLD_CLIENTS = 0//彈出低于1.6.0的客戶端掛接(0或1界阁,默認(rèn)是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
mfsexport.cfg文件參數(shù)格式如下
# Allow everything but "meta".
* ?????????/ ??????rw,alldirs,maproot=0
# Allow "meta".
* ??????????????????????. ??????rw
該文件,每一個(gè)條目分為三個(gè)部分
第一部分:客戶端IP地址
第二部分:被掛載的目錄
第三部分:客戶端擁有的權(quán)限
地址可以指定幾種表現(xiàn)形式
*代表所有的IP地址
n.n.n.n單個(gè)ip地址
n.n.n.n/bIP網(wǎng)絡(luò)地址/位數(shù)掩碼
n.n.n.n/m.m.m.m IP網(wǎng)絡(luò)地址/子網(wǎng)掩碼
f.f.f.f-t.t.t.t IP段
目錄部分的標(biāo)示如下
/標(biāo)示MFS根
.表示MFSMETA文件系統(tǒng)
權(quán)限部分如下所示
ro——只讀模式共享
rw——讀寫模式共享
alldirs——允許掛載任何指定的子目錄
maproot——映射為root胖喳,還是普通用戶
password——指定客戶端的密碼
以上就是對(duì)mfsmaster.cfg和mfsexport文件的解釋泡躯,默認(rèn)就是最好的,不需要做任任何修改丽焊。
啟動(dòng)master server
第一遍啟動(dòng)的時(shí)候较剃,可能會(huì)出現(xiàn)以下錯(cuò)誤信息
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster ?start
loading sessions ... file not found
如果出現(xiàn)以上信息,則關(guān)閉服務(wù)并重新啟動(dòng)就可以了
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster ?-s
-s表示停止服務(wù)
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster ?start
再啟動(dòng)就不會(huì)出現(xiàn)任何信息
查看是否啟動(dòng)
8)建立防火墻規(guī)則
[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
搭建metalogger server
1)安裝mfs(同上)
Useradd mfs ?-s ?/sbin/nologin
復(fù)制文件
3)修改配置文件技健,添加master服務(wù)器的ip地址(注意去掉注釋和空格)
開啟服務(wù)
5)查看端口
[root@centos5mfs]# netstat -anpt | grep 9419
tcp ???????0 ?????0 192.168.1.2:50929 ??????????192.168.1.1:9419 ???????????ESTABLISHED 53533/mfsmetalogger
[root@centos5mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
[root@centos5mfs]# service iptables save
搭建chunk server(二臺(tái)chunk的搭建步驟相同)
安裝mfs(同上)
復(fù)制文件
Cd /usr/local/mfs/etc/mfs
Cp mfschunkserver.cfg.dist mfschunkserver.cfg
Cp mfshdd.cfg.dist mfshdd.cfg
Vi mfschunkserver.cfg
修改配置文件(一共2個(gè))
vim mfschunkserver.cfg
vim mfshdd.cfg(添加/data)
建立文件夾并開啟服務(wù)
開啟例外
[root@centos5mfs]# 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@centos5mfs]# iptables -I INPUT -p tcp --dport 9422 -j ACCEPT
[root@centos5mfs]# service iptables save
注意:第二臺(tái)chunk的配置和上面的配置完全一樣写穴,這里就不在說明了
客戶端配置
安裝fuseMFS(客戶端依賴于FUSE)
設(shè)置環(huán)境變量
添加下面這行
exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
安裝MFS客戶端
掛載文件系統(tǒng)
查看掛載情況
設(shè)置文件被復(fù)制的份數(shù)并測試
MFS客戶端安裝完畢后,會(huì)生成/usr/local/mfs/bin/目錄雌贱,在這個(gè)目錄下有很多命令是用戶所需的啊送。
mfsgetgoal命令用來查看文件被復(fù)制的分?jǐn)?shù)偿短,利用-r命令可以對(duì)整個(gè)目錄進(jìn)行遞歸,goal是指文件比復(fù)制的分?jǐn)?shù)馋没。
[root@centos6 mfs-1.6.27]# mfsgetgoal ?-r /mnt/mfs/
/mnt/mfs/:
directories with goal ?1 : ?????????1
由于還沒有設(shè)置昔逗,默認(rèn)為1份
命令mfssetgoal用來設(shè)置文件被復(fù)制的分?jǐn)?shù),生產(chǎn)環(huán)境下Chunk server節(jié)點(diǎn)數(shù)量應(yīng)大于2篷朵,文件副本數(shù)小于Chunk server服務(wù)器的數(shù)量勾怒。由于我有二臺(tái)Chunk server我將副本數(shù)量設(shè)置為1
在vim ?/etc/profile文件中增加一行(為了方便執(zhí)行命令)
設(shè)置查詢文件被復(fù)制的份數(shù):
在/mnt/mfs中建立文件
分別打開兩臺(tái)chunk查看/data下,都產(chǎn)生了加密的數(shù)據(jù)声旺,說明成功了
5笔链、mfs監(jiān)控
mfscgiserv是用python編寫的一個(gè)web服務(wù)器,其監(jiān)聽端口是9425艾少,可以再masster server上通過/usr/local/mfs/sbin/mfscgiserv來啟動(dòng)卡乾,用戶利用瀏覽器就可以完全監(jiān)控所有客戶掛接、Chunk server缚够、Master server等幔妨。
在一臺(tái)客戶端上通過瀏覽器訪問http://192.168.1.1:9425
[root@centos3mfs]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
[root@centos3mfs]# iptables -I INPUT -p tcp --dport 9425 -j ACCEPT
災(zāi)難恢復(fù)
MFS維護(hù)及災(zāi)難恢復(fù)
1)MFS集群的啟動(dòng)與停止
MFS集群的啟動(dòng)順序如下
(1)啟動(dòng)mfsmaster進(jìn)程
(2)啟動(dòng)所有的mfsChunkserver進(jìn)程
(3)啟動(dòng)mfsmetalogger進(jìn)程
(4)在所有客戶端上掛載NFS文件系統(tǒng)
MFS集群的停止順序如下
(1)在所有客戶端卸載MFS掛載
(2)停止Chunkserver進(jìn)程
(3)停止mfsmetalogger進(jìn)程
(4)停止mfsmaster進(jìn)程
2)MFS災(zāi)難恢復(fù)
整個(gè)MFS體系中,直接斷電只有master server進(jìn)程有可能無法啟動(dòng)谍椅,可以在master上使用命令/usr/local/mfs/sbin/mfsmetarestore -a修復(fù)
我們將master server直接斷電(必須運(yùn)行的時(shí)間夠20分鐘才可以斷電误堡,否則數(shù)據(jù)很有可能直接丟失)
[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
從MetaLogger中恢復(fù)
MFS元數(shù)據(jù)通常有兩部分的數(shù)據(jù),分別如下
(1)主要元數(shù)據(jù)文件metadata.mfs雏吭,當(dāng)mfsmaster運(yùn)行時(shí)會(huì)被命名為metadata.back.mfs锁施。
(2)元數(shù)據(jù)改變?nèi)罩綾hangelog.*.mfs,存儲(chǔ)了過去N小時(shí)的文件變更杖们。
在Master發(fā)生故障時(shí)悉抵,可以從MetaLogger中恢復(fù),步驟如下
(1)安裝一臺(tái)mfsmaster摘完,利用同樣的配置來配置這臺(tái)mfsmaster姥饰,mfsmaster進(jìn)程先不要啟動(dòng)
(2)將metalogger上/usr/local/mfs/var/mfs/目錄下所有文件復(fù)制到mfsmaster相應(yīng)的目錄中。
[root@centos3 mfs]# scp root@192.168.1.101:/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孝治,恢復(fù)數(shù)據(jù)后列粪,需要更改metalogger和chunkserver,配置MASTER_HOST的ip地址谈飒,客戶端也需要重新掛載mfs目錄岂座。
本文出自 “李世龍” 博客,謝絕轉(zhuǎn)載杭措!