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






