MooseFS分布式文件系統(tǒng)的注意事項和排錯經(jīng)驗
原創(chuàng)【51CTO專稿】MooseFS(簡稱MFS)是一款分布式文件系統(tǒng),其運行機(jī)制和原理可以參考其官方網(wǎng)站,51CTO上對MooseFS的基本概念和部署安裝也介紹過,對MooseFS不太了解的朋友們可以先自行研究一下。
本文是我自己在研究和使用MooseFS的過程中整理的一些注意事項和排錯經(jīng)驗,寫出來分享給大家,一同探討。
一、有關(guān)“副本”
MFS語言是通過“副本”機(jī)制來保證文件的高可用,我們可以通過MFS的管理命令setglobal來設(shè)置文件的“副本”,這個值表示某個目錄級別或文件級別的副本個數(shù)。
將“副本”設(shè)置為大于1的某個數(shù)字可以用多個數(shù)據(jù)服務(wù)器來進(jìn)行冗余備份。當(dāng)一個數(shù)據(jù)文件被保存為多個副本時,整個系統(tǒng)可以在有單臺數(shù)據(jù)服務(wù)器故障時仍然提供正常服務(wù)。
對于一些比較重要的文件來講,我們通常將“副本”設(shè)置為大于2的某個值,這將這些文件能夠抵御多臺數(shù)據(jù)服務(wù)器的崩潰。一般可用的副本數(shù)的設(shè)置應(yīng)該是超過預(yù)期的無法訪問的服務(wù)器的數(shù)量,在生產(chǎn)環(huán)節(jié)中一般設(shè)置為3(實際上同一單位時間內(nèi)2臺服務(wù)機(jī)宕機(jī)的機(jī)率為零),這時我建議大家可以根據(jù)實際情況,將chunkserserver數(shù)據(jù)數(shù)據(jù)服務(wù)器設(shè)置成一個大于或等于4的值。
在下面的MFS文件分布應(yīng)用場景中,我們的chunkserver機(jī)器的數(shù)量等于4,當(dāng)一臺chunkserver數(shù)據(jù)服務(wù)器出現(xiàn)故障,不能被其他服務(wù)器訪問時,其上的數(shù)據(jù)仍然會有另外的兩份備份,仍然可以對提供數(shù)據(jù)的讀寫服務(wù),此時并不會影響用戶的訪問。但是此時該數(shù)據(jù)的“副本”值大于當(dāng)前的副本數(shù)目,于是數(shù)據(jù)服務(wù)器會將該數(shù)據(jù)同步到其他服務(wù)器中以滿足要求的文件副本數(shù)量。這里有個特別需要注意的地方,就是可用的chunkserver數(shù)據(jù)服務(wù)器數(shù)量小于某個特定文件的“副本”值,此時需要的副本數(shù)量將無法被滿足。類似,當(dāng)可用的數(shù)據(jù)服務(wù)器數(shù)量等于文件的“副本”值時,如果數(shù)據(jù)服務(wù)器的容量已經(jīng)達(dá)到100%,這時將不會再接受對大于“副本”值文件的同步需求。
當(dāng)遇到以上這些情況時,我們就需要盡快的增加數(shù)據(jù)服務(wù)器來保存需求的文件副本。當(dāng)我們增加一個新的數(shù)據(jù)服務(wù)器時,它可以在任意時間加入到系統(tǒng)中。新的空間容量將立即生效,并被用來保存新的數(shù)據(jù),或者接收來自其他數(shù)據(jù)服務(wù)器的同步需求。我們可以通過MFS提供的管理工具mfsfileinfo來查詢系統(tǒng)中某個文件的狀態(tài),從前判斷其當(dāng)前的副本數(shù)量與設(shè)置的“副本”值是否有差別,當(dāng)然,我們也可以通過管理工具來修改“副本”值。
另外,在數(shù)據(jù)服務(wù)器中的數(shù)據(jù)是有版本信息的,當(dāng)一個具有舊版本數(shù)據(jù)的數(shù)據(jù)服務(wù)器(比如下線了一段時間)重新連接到管理服務(wù)器時,它會使自己同步新版本的數(shù)據(jù),并且將舊版本的數(shù)據(jù)刪除來釋放空間,從而避免數(shù)據(jù)的不一致情況發(fā)生。
有興趣的朋友可以讀一下MFS的源碼,多了解下MFS的數(shù)據(jù)分布算法,這個由于不在本文的專業(yè)范疇之類,這個請大家自行研究。
二、DRBD+Heartbeat+mfsmaster實現(xiàn)高可用性
大家通過官網(wǎng)的MFS運行機(jī)制就應(yīng)該能理解MFS元數(shù)據(jù)服務(wù)器的重要性,這時候我們可以用DRBD+Heartbeat雙機(jī)來確保MFS的元數(shù)據(jù)服務(wù)器的高可用性。
DRBD的底層設(shè)備可以是單獨的磁盤也可以是分區(qū),這里建議大家用Raid1+0的分區(qū)來運行。
DRBD+Heartbeat+mfsmaster元服務(wù)器安裝中的注意事項:
1、我們在配置DRBD時可能會遇到報錯:
drbdadm create-md ha: exited with coolcode 40
這是由于DRBD認(rèn)為底層設(shè)備已被占用,所以我們用dd命令破壞即可解決此問題。
2、Primary機(jī)器上可以先把DRBD啟動起來,先掛載/drbd至目錄下,然后
./configure --prefix=/drbd/mfs --with-default-user=mfs --with-default-group=mfs
注意:安裝時候一定要記得帶prefix=/drbd/mfs,把安裝目錄全部置于DRBD的掛載目錄,這樣方便以后不用去指定路徑去掛載,Secondary機(jī)器上不需要執(zhí)行這步,因為只有Primary機(jī)器出問題時Secondary機(jī)器才會真正生效,此時它也會憑Heartbeat定義腳本mfsmaster來自動掛載。
3、雙機(jī)中的resource腳本內(nèi)容為:
centos1.cn7788.com IPaddr::192.168.11.30/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/drbd::ext3 mfsmaster
mfsmaster腳本內(nèi)容為:
#!/bin/bash case "$1" in 'start') drbdadm primary r0 mount /dev/drbd0 /drbd /drbd/mfs/sbin/mfsmaster start ;; 'stop') /drbd/mfs/sbin/mfsmaster -s umount /drbd drbdadm secondary r0 ;; 'restart') ;; *) echo "Usage: $0 { start | stop | restart }" ;; esac exit 0
注意:Heartbeat默認(rèn)采用的是LSB(Linux Standard Base)風(fēng)格,所以要保證mfsmaster腳本能接收start、stop、status三個參數(shù),大家可以仔細(xì)看看,mfsstart啟動和關(guān)閉的過程正好相反,而start過程正好是手動啟動MFS分布式文件系統(tǒng)的過程。
三、有關(guān)fuse和uid、gid設(shè)置
MFS中的mastermfs元數(shù)據(jù)服務(wù)器是不需要fuse的,所以在這二臺機(jī)器上我們都不需要安裝fuse。我看網(wǎng)上許多文章都在mfsmaster機(jī)器上安裝fuse,其實這步是多余的,不需要操作。
為了避免在mfs用戶及用戶組上出問題,二臺機(jī)器的mfs的uid和gid建議配置成一樣,建少出問題機(jī)率,命令如下所示:
groupadd -g 65534 mfs useradd -u 65534 -g mfs -s /bin/false mfs
四、網(wǎng)絡(luò)相關(guān)
MFS跟NFS一樣,對網(wǎng)絡(luò)的依賴非常大,建議在內(nèi)網(wǎng)環(huán)境中做好監(jiān)控和上線前的測試工作,在正式上線時我們要合理分配帶寬資源,優(yōu)化網(wǎng)絡(luò)環(huán)境,保證MFS分布式文件系統(tǒng)的網(wǎng)絡(luò)穩(wěn)定。
五、MFS分布式文件系統(tǒng)在啟動和運中的排錯
1. 非正常關(guān)閉管理服務(wù)器進(jìn)程導(dǎo)致啟動失敗,啟動過程中生成如下報錯日志:
錯誤日志一:
working directory: /drbd/mfs lockfile created and locked initializing mfsmaster modules ... loading sessions ... ok sessions file has been loaded exports file has been loaded loading metadata ... can't open metadata file if this is new instalation then rename metadata.mfs.empty as metadata.mfs init: file system manager failed !!! error occured during initialization - exiting
以上錯誤提示將metadata.mfs.empty 文件重命名為metadata.mfs,解決方法如下所示:
cd /drbd/mfs/var/mfs mv metadata.mfs.empty metadata.mfs
錯誤日志二:
當(dāng)執(zhí)行完上述命令再次啟動進(jìn)程后,會有如下錯誤日志生成
backup file is newer than current file - please check it manually - propably you should run metarestore init: file system manager failed !!! error occured during initialization - exiting
可以執(zhí)行下列命令自動修復(fù)元數(shù)據(jù)文件,命令如下所示:
/drbd/mfs/sbin/mfsmetarestore -a
作者簡介:余洪春(博客,微博),網(wǎng)名撫琴煮酒,從事系統(tǒng)管理和系統(tǒng)集成多年?!?a >構(gòu)建高可用Linux服務(wù)器》一書作者。






