Linux MFS分布式文件系統(tǒng)

2018-07-31 14:44 更新

防偽碼:我沒(méi)有太多堅(jiān)強(qiáng),只比苦難多一點(diǎn)

                           第十一章  MFS分布式文件系統(tǒng)

前言:幾臺(tái)Web服務(wù)器通過(guò)NFS共享一個(gè)存儲(chǔ),在業(yè)務(wù)功能上滿(mǎn)足需求,但在性能與容量上NFS無(wú)法勝任更高的要求。MFS即moosefs,可以提供容量FB級(jí)別的共享存儲(chǔ),無(wú)需昂貴的專(zhuān)業(yè)硬件服務(wù)器,自身?yè)碛腥哂喙δ芗皠?dòng)態(tài)擴(kuò)容功能,保證數(shù)據(jù)的安全性。本章將介紹MFS分布式文件系統(tǒng)的原理及環(huán)境搭建。

一、 工作原理

1、分布式原理

分布式文件系統(tǒng)就是把一些分散在多臺(tái)計(jì)算機(jī)上的共享文件夾,集合到一個(gè)共享文件夾內(nèi),用戶(hù)要訪(fǎng)問(wèn)這些文件夾的時(shí)候,只要打開(kāi)一個(gè)文件夾,就可以的看到所有鏈接到此文件夾內(nèi)的共享文件夾。

2、MFS原理

MFS是一個(gè)具有容錯(cuò)性的網(wǎng)絡(luò)分布式文件系統(tǒng),它把數(shù)據(jù)分散存放在多個(gè)物理服務(wù)器上,而呈現(xiàn)給用戶(hù)的則是一個(gè)統(tǒng)一的資源。

1) MFS的組成

元數(shù)據(jù)服務(wù)器(Master):在整個(gè)體系中負(fù)責(zé)管理文件系統(tǒng),維護(hù)元數(shù)據(jù),目前不支持高可用。

元數(shù)據(jù)日志服務(wù)器(MetaLogger):備份Master服務(wù)器的變化日志文件,當(dāng)master服務(wù)器損壞,可以從日志服務(wù)器中取得文件恢復(fù)。

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

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

2)MFS讀數(shù)據(jù)的處理過(guò)程

客戶(hù)端向元數(shù)據(jù)服務(wù)器發(fā)出讀請(qǐng)求

元數(shù)據(jù)服務(wù)器把所需數(shù)據(jù)存放的位置(Chunk Server的IP地址和Chunk編號(hào))告知客戶(hù)端

客戶(hù)端向已知的Chunk Server請(qǐng)求發(fā)送數(shù)據(jù)

Chunk Server向客戶(hù)端發(fā)送數(shù)據(jù)

3)寫(xiě)入的過(guò)程

客戶(hù)端向元數(shù)據(jù)服務(wù)器發(fā)送寫(xiě)入請(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ù)器告知客戶(hù)端,可以在哪個(gè)Chunk Server的哪些Chunks寫(xiě)入數(shù)據(jù)

客戶(hù)端向指定的Chunk Server寫(xiě)入數(shù)據(jù)

該Chunk Server與其他Chunk Server進(jìn)行數(shù)據(jù)同步,同步成功后Chunk Server告知客戶(hù)端數(shù)據(jù)寫(xiě)入成功

客戶(hù)端告知元數(shù)據(jù)服務(wù)器本次寫(xiě)入完畢

二、 實(shí)驗(yàn)環(huán)境

三、 實(shí)驗(yàn)步驟

1、 搭建master server

源碼包的位置:

http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27

1)安裝支持包

2) 創(chuàng)建用戶(hù)

3) 安裝源碼包

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

--with-default-user=mfs                   //指定程序運(yùn)行用戶(hù)

--with-default-group=mfs                //指定程序運(yùn)行組

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

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

4)復(fù)制文件(設(shè)置配置文件)

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

此文件存放master的變化信息

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

需要用到兩個(gè)配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被掛載目錄及訪(fǎng)問(wèn)權(quán)限)

mfsmaster.cfg常用的參數(shù)如下,默認(rèn)全部都是不需要修改的,全文都是以#開(kāi)頭,也就是說(shuō)都是默認(rèn)配置

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

[root@centos1 mfs]# vim mfsmaster.cfg

WORKING_USER = mfs                                        //運(yùn)行masterserver的用戶(hù)

# WORKING_GROUP = mfs                                //運(yùn)行masterserver的組

# SYSLOG_IDENT = mfsmaster                        //masterserver在syslog的標(biāo)示,說(shuō)明是由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斷開(kāi)復(fù)制延遲(默認(rèn)是3600秒)

# MATOML_LISTEN_HOST = *        //metalogger監(jiān)聽(tīng)的IP地址默認(rèn)是所有地址

# MATOML_LISTEN_PORT = 9419        //metalogger監(jiān)聽(tīng)的端口地址(默認(rèn)為9419)

# MATOML_LOG_PRESERVE_SECONDS = 600  

# MATOCL_LISTEN_HOST = *                 //用于chunkserver連接的IP地址(默認(rèn)為*代表所有IP)

# MATOCL_LISTEN_PORT = 9421        //用戶(hù)客戶(hù)端掛在的監(jiān)聽(tīng)端口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的客戶(hù)端掛接(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è)部分

        第一部分:客戶(hù)端IP地址

        第二部分:被掛載的目錄

        第三部分:客戶(hù)端擁有的權(quán)限

地址可以指定幾種表現(xiàn)形式

        *代表所有的IP地址

        n.n.n.n單個(gè)ip地址

        n.n.n.n/b        IP網(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——讀寫(xiě)模式共享

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

        maproot——映射為root,還是普通用戶(hù)

        password——指定客戶(hù)端的密碼

        以上就是對(duì)mfsmaster.cfg和mfsexport文件的解釋?zhuān)J(rèn)就是最好的,不需要做任任何修改。

6) 啟動(dòng)master server

7) 查看是否啟動(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

2、 搭建metalogger server

1)安裝mfs(同上)

2) 復(fù)制文件

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

4) 開(kāi)啟服務(wù)

5)查看端口

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

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

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

[root@centos1 mfs]# service iptables save

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

1) 安裝mfs(同上)

2) 復(fù)制文件

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

vim mfschunkserver.cfg

vim mfshdd.cfg(添加/data)

4) 建立文件夾并開(kāi)啟服務(wù)

5) 開(kāi)啟例外端口

[root@centos5 mfs]# ps -ef | grep mfs        //檢查是否啟動(dòng)

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

注意:第二臺(tái)chunk的配置和上面的配置完全一樣,這里就不在贅述了

4、 客戶(hù)端配置

1) 安裝fuseMFS(客戶(hù)端依賴(lài)于FUSE)

2) 設(shè)置環(huán)境變量

添加下面這行

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

3) 安裝MFS客戶(hù)端

4) 掛載文件系統(tǒng)

創(chuàng)建掛載點(diǎn)并加載到內(nèi)核

5)設(shè)置文件被復(fù)制的份數(shù)并測(cè)試

MFS客戶(hù)端安裝完畢后,會(huì)生成/usr/local/mfs/bin/目錄,在這個(gè)目錄下有很多命令是用戶(hù)所需的。

mfsgetgoal命令用來(lái)查看文件被復(fù)制的分?jǐn)?shù),利用-r命令可以對(duì)整個(gè)目錄進(jìn)行遞歸,goal是指文件比復(fù)制的分?jǐn)?shù)。

命令mfssetgoal用來(lái)設(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í)行命令)

然后source /etc/profile


設(shè)置查詢(xún)文件被復(fù)制的份數(shù):

在/mnt/mfs中建立文件

分別打開(kāi)兩臺(tái)chunk查看/data下,都產(chǎn)生了加密的數(shù)據(jù),說(shuō)明成功了

5、Mfscgiserv是用Python編寫(xiě)的一個(gè)web服務(wù)器,其監(jiān)聽(tīng)端口為9425,可以在master上通過(guò)命令

/usr/local/mfs/sbin/mfscgiserv來(lái)啟動(dòng)用戶(hù)利用瀏覽器就可以全面掌握所有客戶(hù)連接,Chunk server、

master以及客戶(hù)端操作。

6、 災(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)在所有客戶(hù)端上掛載NFS文件系統(tǒng)

MFS集群的停止順序如下

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

(2)停止Chunkserver進(jìn)程

(3)停止mfsmetalogger進(jìn)程

(4)停止mfsmaster進(jìn)程

2)MFS災(zāi)難恢復(fù)

整個(gè)MFS體系中,直接斷電只有master server進(jìn)程有可能無(wú)法啟動(dòng),可以在master上使用命令

/usr/local/mfs/sbin/mfsmetarestore -a修復(fù)

啟動(dòng)失?。?/span>

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

init: file system manager failed !!!

error occured during initialization - exiting

修復(fù):

[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

啟動(dòng)成功

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

3) 從MetaLogger中恢復(fù)

我們將master server 直接斷電(必須運(yùn)行的時(shí)間夠20分鐘才可以斷電,否則數(shù)據(jù)很有可能直接丟失) 

補(bǔ)充說(shuō)明: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)罩?changelog.*.mfs,存儲(chǔ)了過(guò)去N小時(shí)的文件變更。

在Master 發(fā)生故障時(shí),可以從MetaLogger中恢復(fù),步驟如下

(1)安裝一臺(tái)mfsmaster,利用同樣的配置來(lái)配置這臺(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.1:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

利用mfsmetarestore命令合并元數(shù)據(jù)changelogs

[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地址,客戶(hù)端也需要重新掛載mfs目錄。

謝謝觀(guān)看,真心的希望能幫到您!

 

本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)