防偽碼:我沒有太多堅強,只比苦難多一點
第十一章 MFS分布式文件系統(tǒng)
前言:幾臺Web服務器通過NFS共享一個存儲,在業(yè)務功能上滿足需求,但在性能與容量上NFS無法勝任更高的要求。MFS即moosefs,可以提供容量FB級別的共享存儲,無需昂貴的專業(yè)硬件服務器,自身擁有冗余功能及動態(tài)擴容功能,保證數(shù)據(jù)的安全性。本章將介紹MFS分布式文件系統(tǒng)的原理及環(huán)境搭建。
一、 工作原理
1、分布式原理
分布式文件系統(tǒng)就是把一些分散在多臺計算機上的共享文件夾,集合到一個共享文件夾內(nèi),用戶要訪問這些文件夾的時候,只要打開一個文件夾,就可以的看到所有鏈接到此文件夾內(nèi)的共享文件夾。
2、MFS原理
MFS是一個具有容錯性的網(wǎng)絡分布式文件系統(tǒng),它把數(shù)據(jù)分散存放在多個物理服務器上,而呈現(xiàn)給用戶的則是一個統(tǒng)一的資源。
1) MFS的組成
元數(shù)據(jù)服務器(Master):在整個體系中負責管理文件系統(tǒng),維護元數(shù)據(jù),目前不支持高可用。
元數(shù)據(jù)日志服務器(MetaLogger):備份Master服務器的變化日志文件,當master服務器損壞,可以從日志服務器中取得文件恢復。
數(shù)據(jù)存儲服務器(Chunk Server):真正存儲數(shù)據(jù)的服務器,服務器越多,容量就越大,可靠性越高,性能越好。
客戶端(Client): 可以像掛載NFS一樣 掛載MFS文件系統(tǒng)
2)MFS讀數(shù)據(jù)的處理過程
客戶端向元數(shù)據(jù)服務器發(fā)出讀請求
元數(shù)據(jù)服務器把所需數(shù)據(jù)存放的位置(Chunk Server的IP地址和Chunk編號)告知客戶端
客戶端向已知的Chunk Server請求發(fā)送數(shù)據(jù)
Chunk Server向客戶端發(fā)送數(shù)據(jù)
3)寫入的過程
客戶端向元數(shù)據(jù)服務器發(fā)送寫入請求
元數(shù)據(jù)服務器與Chunk Server進行交互,但元數(shù)據(jù)服務器只在某些服務器創(chuàng)建新的分塊Chunks,創(chuàng)建成功后由Chunk Servers告知元數(shù)據(jù)服務器操作成功
元數(shù)據(jù)服務器告知客戶端,可以在哪個Chunk Server的哪些Chunks寫入數(shù)據(jù)
客戶端向指定的Chunk Server寫入數(shù)據(jù)
該Chunk Server與其他Chunk Server進行數(shù)據(jù)同步,同步成功后Chunk Server告知客戶端數(shù)據(jù)寫入成功
客戶端告知元數(shù)據(jù)服務器本次寫入完畢
二、 實驗環(huán)境
三、 實驗步驟
1、 搭建master server
源碼包的位置:
http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27
1)安裝支持包
2) 創(chuàng)建用戶
3) 安裝源碼包
--prefix=/usr/local/mfs //指定安裝目錄
--with-default-user=mfs //指定程序運行用戶
--with-default-group=mfs //指定程序運行組
--disable-mfschunkserver //禁用Chunk功能
--disable-mfsmount //禁用mfsmount功能
4)復制文件(設置配置文件)
[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs
此文件存放master的變化信息
5) 配置文件(下面的只是介紹一下,不用修改,默認就好)
需要用到兩個配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被掛載目錄及訪問權(quán)限)
mfsmaster.cfg常用的參數(shù)如下,默認全部都是不需要修改的,全文都是以#開頭,也就是說都是默認配置
[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產(chǎn)生的
# LOCK_MEMORY = 0 //是否執(zhí)行mlokall(),以避免mfsmaster進程溢出默認為0
# NICE_LEVEL = -19 //運行的優(yōu)先級,進程必須由root啟動
# 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ù)目(默認是50)
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 //延遲復制的時間(默認300)
# REPLICATIONS_DELAY_DISCONNECT = 3600 //Chunkserver斷開復制延遲(默認是3600秒)
# MATOML_LISTEN_HOST = * //metalogger監(jiān)聽的IP地址默認是所有地址
# MATOML_LISTEN_PORT = 9419 //metalogger監(jiān)聽的端口地址(默認為9419)
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCL_LISTEN_HOST = * //用于chunkserver連接的IP地址(默認為*代表所有IP)
# MATOCL_LISTEN_PORT = 9421 //用戶客戶端掛在的監(jiān)聽端口9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300 //chunks的回環(huán)頻率(默認300)
# CHUNKS_SOFT_DEL_LIMIT = 10
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2 //在一個循環(huán)里復制到另外一個Chunkserver的最大Chunk數(shù)
# CHUNKS_READ_REP_LIMIT = 10 //在一個循環(huán)里從一個Chunkserver復制的的最大Chunk數(shù)
# 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
mfsexport.cfg文件參數(shù)格式如下
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
該文件,每一個條目分為三個部分
第一部分:客戶端IP地址
第二部分:被掛載的目錄
第三部分:客戶端擁有的權(quán)限
地址可以指定幾種表現(xiàn)形式
*代表所有的IP地址
n.n.n.n單個ip地址
n.n.n.n/b IP網(wǎng)絡地址/位數(shù)掩碼
n.n.n.n/m.m.m.m IP網(wǎng)絡地址/子網(wǎng)掩碼
f.f.f.f-t.t.t.t IP段
目錄部分的標示如下
/標示MFS根
.表示MFSMETA文件系統(tǒng)
權(quán)限部分如下所示
ro——只讀模式共享
rw——讀寫模式共享
alldirs——允許掛載任何指定的子目錄
maproot——映射為root,還是普通用戶
password——指定客戶端的密碼
以上就是對mfsmaster.cfg和mfsexport文件的解釋,默認就是最好的,不需要做任任何修改。
6) 啟動master server
7) 查看是否啟動
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) 復制文件
3)修改配置文件,添加master服務器的ip地址(注意去掉注釋和空格)
4) 開啟服務
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(二臺chunk的搭建步驟相同)
1) 安裝mfs(同上)
2) 復制文件
3) 修改配置文件(一共2個)
vim mfschunkserver.cfg
vim mfshdd.cfg(添加/data)
4) 建立文件夾并開啟服務
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)
2) 設置環(huán)境變量
添加下面這行
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
3) 安裝MFS客戶端
4) 掛載文件系統(tǒng)
創(chuàng)建掛載點并加載到內(nèi)核
5)設置文件被復制的份數(shù)并測試
MFS客戶端安裝完畢后,會生成/usr/local/mfs/bin/目錄,在這個目錄下有很多命令是用戶所需的。
mfsgetgoal命令用來查看文件被復制的分數(shù),利用-r命令可以對整個目錄進行遞歸,goal是指文件比復制的分數(shù)。
命令mfssetgoal用來設置文件被復制的分數(shù),生產(chǎn)環(huán)境下Chunk server節(jié)點數(shù)量應大于2,文件副本數(shù)小于Chunk server服務器的數(shù)量。
由于我有二臺Chunk server 我將副本數(shù)量設置為1
在vim /etc/profile文件中增加一行(為了方便執(zhí)行命令)
然后source /etc/profile
設置查詢文件被復制的份數(shù):
在/mnt/mfs中建立文件
分別打開兩臺chunk查看/data下,都產(chǎn)生了加密的數(shù)據(jù),說明成功了
5、Mfscgiserv是用Python編寫的一個web服務器,其監(jiān)聽端口為9425,可以在master上通過命令
/usr/local/mfs/sbin/mfscgiserv來啟動用戶利用瀏覽器就可以全面掌握所有客戶連接,Chunk server、
master以及客戶端操作。
6、 災難恢復
MFS維護及災難恢復
1)MFS集群的啟動與停止
MFS集群的啟動順序如下
(1)啟動mfsmaster進程
(2)啟動所有的mfsChunkserver進程
(3)啟動mfsmetalogger進程
(4)在所有客戶端上掛載NFS文件系統(tǒng)
MFS集群的停止順序如下
(1)在所有客戶端卸載MFS掛載
(2)停止Chunkserver進程
(3)停止mfsmetalogger進程
(4)停止mfsmaster進程
2)MFS災難恢復
整個MFS體系中,直接斷電只有master server進程有可能無法啟動,可以在master上使用命令
/usr/local/mfs/sbin/mfsmetarestore -a修復
啟動失?。?/span>
[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中恢復
我們將master server 直接斷電(必須運行的時間夠20分鐘才可以斷電,否則數(shù)據(jù)很有可能直接丟失)
補充說明:MFS元數(shù)據(jù)通常有兩部分的數(shù)據(jù),分別如下
(1)主要元數(shù)據(jù)文件metadata.mfs,當mfsmaster運行時會被命名為metadata.back.mfs。
(2)元數(shù)據(jù)改變?nèi)罩?changelog.*.mfs,存儲了過去N小時的文件變更。
在Master 發(fā)生故障時,可以從MetaLogger中恢復,步驟如下
(1)安裝一臺mfsmaster,利用同樣的配置來配置這臺mfsmaster,mfsmaster進程先不要啟動
(2)將metalogger上/usr/local/mfs/var/mfs/目錄下所有文件復制到mfsmaster相應的目錄中。
[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,恢復數(shù)據(jù)后,需要更改metalogger和chunkserver,
配置MASTER_HOST的ip地址,客戶端也需要重新掛載mfs目錄。
謝謝觀看,真心的希望能幫到您!
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: