天天看點

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

一、簡介

       MooseFS(Moose File System,mfs)是一種分布式檔案系統,它将資料分布在網絡中的不同伺服器上,支援FUSE(使用者空間檔案系統Filesystem in Userspace,簡稱FUSE),用戶端挂載後可以作為一個 普通的Unix 檔案系統使用MooseFS。

       MooseFS中共有四種角色:主要伺服器master server、主要備份伺服器metalogger server、存儲塊伺服器chunkserver、用戶端主機client。

       主要伺服器負責各個存儲伺服器的管理、檔案讀寫排程、檔案空間回收以及恢複、多節點拷貝。

       主要備份伺服器負責備份主要伺服器的中繼資料、變化日志檔案,檔案類型為changelog_ml.*.mfs,以便在主要伺服器出問題的時候可以恢複。

       存儲塊伺服器負責提供存儲空間,并為客戶提供資料傳輸。

       用戶端則通過fuse挂接主要伺服器上所管理的存儲塊伺服器,可以像操作本地檔案一樣操作MooseFS檔案系統中的檔案。

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

       NFS雖然使用簡單,但當NFS用戶端通路量大時,通過NFS方式共享一個伺服器的存儲空間,使得NFS伺服器不堪重負,并且執行讀寫都比較頻繁的操作會出現意外的錯誤,對于高可靠的叢集部署是有挑戰的。

          這種架構除了性能問題外還存在單點故障,一旦這個NFS伺服器發生故障,所有靠共享提供資料的應用就不再可用,盡管用rsync方式同步資料到另外一個伺服器上做nfs服務的備份,但這對提高整個系統的性能毫無幫助。

       分布式檔案系統伺服器之間的資料通路不再是一對多的關系(1個NFS伺服器,多個NFS用戶端),而是多對多的關系,這樣一來,性能大幅提升毫無問題。moosefs分布式檔案系統,實施起來簡單、不停止服務擴容、恢複服務容易,因為作為共享存儲伺服器是個不錯的選擇。

       MooseFS讀寫流程圖:

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解
centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

上面有詳細的MFS簡介和MooseFS分布式檔案系統安裝向導以及MFS。

先将mfs-1.6.25-1.tar.gz重命名為mfs-1.6.25.tar.gz

#yum install fuse-devel pkgconfig zlib-devel    //build源碼包需要的依賴

#rpmbuild -ta mfs-1.6.25.tar.gz

會生成6個rpm二進制安裝包(其中debuginfo調試時使用):

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

也可以通過tar zxvf mfs-1.6.25-1.tar.gz解壓,使用./configure、make、make install安裝(具體參考安裝向導)。

(1)安裝

#rpm -ivh mfs-master-1.6.25-1.x86_64.rpm    //安裝

#rpm -ql mfs-master                //查詢安裝的檔案路徑,可以檢視所有的安裝檔案,便于修改

/etc/mfsexports.cfg.dist  

/etc/mfsmaster.cfg.dist  

/etc/mfstopology.cfg.dist  

/usr/sbin/mfsmaster  

/usr/sbin/mfsmetadump  

/usr/sbin/mfsmetarestore  

/usr/share/doc/mfs-master-1.6.25  

/usr/share/doc/mfs-master-1.6.25/NEWS  

/usr/share/doc/mfs-master-1.6.25/README  

/usr/share/doc/mfs-master-1.6.25/UPGRADE  

/usr/share/man/man5/mfsexports.cfg.5.gz  

/usr/share/man/man5/mfsmaster.cfg.5.gz  

/usr/share/man/man5/mfstopology.cfg.5.gz  

/usr/share/man/man7/mfs.7.gz  

/usr/share/man/man7/moosefs.7.gz  

/usr/share/man/man8/mfsmaster.8.gz  

/usr/share/man/man8/mfsmetarestore.8.gz  

/var/lib/mfs  

/var/lib/mfs/metadata.mfs.empty  

<a></a>

(2)複制樣例檔案,以得到 master 所需的配置檔案

#cp mfsmaster.cfg.dist mfsmaster.cfg

#cp mfstopology.cfg.dist mfstopology.cfg

#cp mfsexports.cfg.dist mfsexports.cfg

       如果我們打算更改這些配置檔案中的某些項目的值,則需要打開特定配置檔案相關文本行前的注釋,然後修改跟随其後的值。因為被注釋掉的行,即是  MooseFS 内置的預設值。

       Mfsmaster.cfg 配置檔案包含主要伺服器 master 相關的設定,想檢視該配置檔案更多資訊使用指令  man mfsmaster.cfg。

      mfsexports.cfg  指定那些用戶端主機可以遠端挂接 MooseFS 檔案系統,以及授予挂接用戶端什麼樣的通路權限。例如指定隻有 192.168.40.x 網段的主機可以以讀寫模式通路 MooseFS 的整個共享結構資源(/),在配置檔案 mfsexports.cfg  檔案的第二行改為或添加:

(注:可以挂在根/目錄下的子目錄,配置檔案加上192.168.40.0/24  /test  rw,alldirs,maproot=0,password=test,注意test目錄是在根目錄已經建立好的子目錄,并且挂載時使用 mfsmount /mnt/client -H mfsmaster -o mfssubfolder=/test -p,否則會出現mfsmaster register error: Permission denied的錯誤。)

# Allow everything but "meta".  

#*                      /       rw,alldirs,maproot=0  

192.168.40.0/24 / rw,alldirs,maproot=0  

192.168.40.0/24 . rw  

      二進制檔案 metadata 和文本檔案 changelog 将被儲存在目錄/var/lib/mfs,安裝 master 時,會自動生成一個名為 metadata.mfs.empty 的中繼資料檔案 metadata,該檔案是空的。MooseFS master 運必須有檔案 metadata.mfs,這個檔案是從 metadata.mfs.empty 改名而來,運作mfsmaster時該檔案會被命名為metadata.mfs.back。隻要保證日志檔案和中繼資料檔案的安全,即使中繼資料伺服器遭到緻命的破壞,也可以通過備份的中繼資料檔案重新部署一套中繼資料伺服器。

#cd /var/lib/mfs

#cp metadata.mfs.empty metadata.mfs   //MooseFS master 運作以後,metadata.mfs 檔案大小将發生變,不會為空檔案。

(3)綁定主機名 mfsmaster 與 ip (每個節點都需綁定)修改/etc/hosts  檔案,以綁定主機名 mfsmaster 與 ip 位址:

192.168.40.125       mfsmaster  

(4)安裝CGI

        為了監控 MooseFS 目前運作狀态,可以安裝運作 CGI 監控服務用浏覽器檢視整個MooseFS 的運作情況。

#rpm -ivh mfs-cgi-1.6.25-1.x86_64.rpm

#rpm -ql mfs-cgi

(5)啟動

#/usr/sbin/mfsmaster start

會出現問題:

working directory: /var/lib/mfs  

can't create lockfile in working directory: EACCES (Permission denied)  

主要是沒有設定運作使用者和運作組,添加使用者(安裝完成後配置檔案沒有改動),也可以使用nobody:nobody。

#groupadd mfs              //添加  mfs 組

#useradd  -g mfs mfs     //新增系統使用者mfs

#chown -R mfs.mfs /var/lib/mfs          //設定檔案所屬使用者群組(也可以直接指定使用者群組,不需要重新建立)

#vim /etc/mfsmaster.cfg

 WORKING_USER = mfs  

 WORKING_GROUP = mfs  

# SYSLOG_IDENT = mfsmaster  

# LOCK_MEMORY = 0  

然後正常啟動!

#/usr/sbin/mfscgiserv start

會打不開網頁,這是因為cgi檔案沒有可執行權限

#chmod +x /usr/share/mfscgi/*.cgi

然後啟動,在浏覽器位址欄輸入 http://192.168.40.125:9425 即可檢視 master 的運作情況(這時不能看見 chunk server 的資料)。

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

         安裝備份伺服器metalogger的主機在性能上應該比 master 強大(至少有更多的記憶體),一旦主要伺服器 master 失效,隻要導入 changelogs 到中繼資料檔案,備份伺服器 metalogger 将能接替發生故障的 master,行使管理伺服器的職能。

      若備份伺服器單獨安裝,需要安裝fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。添加mfs使用者群組,也可指定到其他使用者,或使用nobody:nobody。

#rpm -ivh mfs-metalogger-1.6.25-1.x86_64.rpm

#rpm -ql mfs-metalogger

#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

#vimmfsmetalogger.cfg(不修改會出現Permission denied)

WORKING_USER = mfs  

WORKING_GROUP = mfs  

接着運作備份服務 mfsmetaloger:

#usr/sbin/mfsmetalogger start

在生産環境裡應當設定自動啟動腳本,以便作業系統重新啟動時MooseFSmfsmetalogger 服務也能自動運作。

若在其他主機上單獨安裝chunkserver需要安裝fuse-devel,并添加mfs使用者群組(可指定到其他使用者)

#rpm -ivh mfs-chunkserver-1.6.25-1.x86_64.rpm    //安裝

#rpm -ql mfs-chunkserver               //查詢安裝的檔案路徑,可以檢視所有的安裝檔案,便于修改

(2)準備 chunk server 服務所需的配置檔案

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

#cp mfshdd.cfg.dist mfshdd.cfg

#vim /etc/mfschunkserver.cfg  (想了解配置檔案mfschunkserver.cfg更詳細的資訊,請檢視手冊頁manmfschunkserver.cfg)

(3)建立共享點

      在配置檔案 mfshdd.cfg 中,給出了用于用戶端挂接 MooseFS 分布式檔案系統根分區所使用的共享空間位置。建議在 chunk server 上劃分單獨的空間建立一個裝置挂載點作為儲存點專門給 MooseFS 使用,這樣做的好處是便于管理剩餘空間。

      此處假定要使用兩個共享點/mnt/mfschunks1 和/mnt/mfschunks2,在 mfshdd.cfg 加入下面的文本行:

# mount points of HDD drives  

#  

#/mnt/hd1  

#/mnt/hd2  

#etc.  

/mnt/mfschunks1  

/mnt/mfschunks2  

       在啟動 chunk server 前,需確定使用者 mfs 有權限讀寫将要被挂接的分區(因為 chunk server 運作時要在此建立一個.lock 的檔案)。否則出現以下錯誤:

hdd space manager: can't create lock file '/mnt/mfschunks1/.lock': EACCES (Permission denied)  

init: hdd space manager failed !!!  

#chown -R mfs:mfs /mnt/mfschunks1

#chown -R mfs:mfs /mnt/mfschunks2

(注:若是單獨與master的機器,還需執行chown  -R mfs:mfs /var/lib/mfs和修改/etc/hosts添加192.168.40.125mfsmaster。)

(4)開始啟動 chunk server

#/usr/sbin/mfschunkserver start

再通過浏覽器通路 http://192.168.40.125:9425就可以看到 MooseFS 系統的全部資訊,包括主要 master 和存儲服務 chunkserver 。

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

(5)MooseFS chunk 以獨占方式使用專門磁盤分區

       在上述操作過程中不需要這部分的内容,此部分是在實際應用環境下,将chunk server用專門磁盤分區作為裝置挂載點,這樣做是不要的,便于管理剩餘空間,因為MooseFS  并不考慮其剩餘空間能被另作他用。

       如果沒有單獨建立檔案系統的條件,可以在檔案中建立一個檔案系統,在此準備兩個 2GB 的檔案(檔案位于目錄/var/lib/mfs/下,也可以放在其他目錄下),并在其上建立檔案系統,把他們格式化為  ext3,分别挂接在/mnt/mfschunks1 和/mnt/mfschunks2。

       操作步驟:挂接第一個檔案系統

1、建立鏡像檔案mfschunks1

#dd if=/dev/zero of=/var/lib/mfs/mfschunks1 bs=1024 count=1 seek=$((2*1024*1024-1))

2、建立檔案系統

##mkfs -t ext3 /var/lib/mfs/mfschunks1

3、建立挂接點

#mkdir -p /mnt/mfschunks1

4、挂接檔案系統

#mount -t ext3 -o loop /var/lib/mfs/mfschunks1 /mnt/mfschunks1

挂接第二個檔案系統的步驟與上面相同,#mount  -t ext3 -o loop /var/lib/mfs/mfschunks2 /mnt/mfschunks2

在啟動  chunk server 前,需確定使用者 mfs 有權限讀寫将要被挂接的分區(因為 chunk server 運作時要在此建立一個.lock 的檔案):

#chown  -R mfs:mfs /mnt/mfschunks1

       為了挂接基于 MooseFS 分布式檔案,用戶端主機必須安裝 FUSE 軟體包( fuse 版本号至少

2.6,推薦使用版本号大于 2.7.2 的 fuse),#yum install fuse。

安裝用戶端軟體 mfsmount:

#rpm -ivh mfs-client-1.6.25-1.x86_64.rpm

(用戶端若單獨安裝,需要安裝fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。)

#cp /etc/mfsmount.cfg.dist /etc/mfsmount.cfg

假定用戶端的挂接點是/mnt/mfs,将以下面的指令來使用 MooseFS 分布式共享檔案系統:

1、 建立挂接點

#mkdir -p /mnt/mfs

2、開始挂接操作

#/usr/bin/mfsmount /mnt/mfs -H mfsmaster

有時會出現mfsmaster register error: Permission denied:

是因為mfsmaster的配置檔案和挂載目錄 不一緻的原因,vim /etc/mfsexports.cfg

192.168.40.0/24 /test rw,alldirs,maproot=0  

       master的挂載配置檔案中允許挂載的目錄是/test,若使用者#mfsmount/mnt -H mfsmaster(不加-o mfssubfolder-子檔案夾,預設是挂載/)挂載根/目錄會挂載不上,可以修改mfsexports.cfg配置檔案為/,再進行挂在就沒問題了。

# /usr/sbin/mfsmaster restart

有時挂載目錄有内容,提示error in fuse_mount,可以使用 -o nonempty選項挂載。

# mfsmount /mnt/mfs -H mfsmaster -o nonempty

3、挂載meta檔案系統

首先保證mfsexports.cfg檔案中加入:

# Allow "meta".  

*       .       rw  

然後執行:

#mfsmount -m /mnt/mfs -H mfsmaster

可以不挂載MFS META檔案系統,挂載該系統主要是為了恢複被誤删除的檔案。

4、檢視分區

執行指令 df -h | grep mfs 檢查分區情況(或使用mount):

mfsmaster:9421        102G  256K  102G   1% /mnt/mfs  

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

(1)備份

#cd /mnt/mfs

#mkdir dir1

#mkdir dir2

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

預設mfs将儲存的檔案隻儲存在一個節點上(master選取的)。

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

設定儲存在儲存塊dir2上的檔案儲存在兩個節點上,做一個備份,系統會自動将資料同步到標明的節點上,這樣達到裡備份的效果。

centos6.3配置MFS伺服器 二、NFS和MFS比較 三、詳解

因master和trunk伺服器在同一台機器上,即便設定了 goal=2 來到達儲存兩個副本但看到的隻是一個副本而已,盡管有兩個trunk挂在點,但它隻是一個  chunk server。

設定檔案副本數量,一般以3份為佳。

#mfssetgoal -r 3 /mnt/mfs

#mfsgetgoal /mnt/mfs/

#/mnt/mfs:  3

(2)設定删除檔案的空間回收時間

 #mfsgettrashtime dir2/passwd

dir2/passwd: 86400

#mfssettrashtime 300 /mnt/mfs

 擷取删除dir2/passwd後在資源回收筒中儲存的時間,防止使用者誤删,這個數字不能設定的太高也不能太低,一般設定為300(5分鐘)。

(3)檢視目錄資訊

#mfsdirinfo -H /mnt/mfs

(4)資料恢複

      二進制檔案 metadata 和文本檔案 changelog 将被儲存在目錄/var/lib/mfs

(5)停止 MooseFS

為了安全停止 MooseFS 叢集,建議執行如下的步驟:

在所有用戶端用 unmount 指令先解除安裝檔案系統(本例将是: umount /mnt/mfs)

停止 chunk server 程序: /usr/sbin/mfschunkserver stop

停止 metalogger 程序: /usr/sbin/mfsmetalogger stop

停止主要 master server 程序: /usr/sbin/mfsmaster stop

(6)簡單使用腳本(配置啟動)

使用者可根據具體使用環境進行修改調試:

#!/bin/bash  

if [ $# -ne 1 ] ; then  

    echo "please input:./moosefs.sh mfsmaster"  

    exit 1  

fi  

if [ "$UID" -ne 0 ]; then  

    echo "you are not root"  

    exit 2  

ALLOW_IP_RANGE="192.168.40.0/24"  

MASTERIP="192.168.40.125"  

start_mfsmaster()  

{  

    echo "------start_mfsmaster------"  

    cd /etc  

    cp mfsmaster.cfg.dist mfsmaster.cfg  

    cp mfstopology.cfg.dist mfstopology.cfg  

    cp mfsexports.cfg.dist mfsexports.cfg  

    chown -R nobody:nobody /var/lib/mfs  

    cd /var/lib/mfs  

    cp metadata.mfs.empty metadata.mfs  

cat &gt;&gt; /etc/mfsexports.cfg &lt;&lt; EOF  

    $ALLOW_IP_RANGE       /        rw,alldirs,maproot=0  

    $ALLOW_IP_RANGE       .        rw  

EOF  

    echo "$MASTERIP      mfsmaster" &gt;&gt; /etc/hosts  

    #sed -i '$a\192.168.40.125    mfsmaster' /etc/hosts  

    /usr/sbin/mfsmaster start  

    /usr/sbin/mfsmaster test &amp;&gt;&gt; start.log  

}  

start_mfsmetalogger()  

    echo "------mfsmetalogger------"  

    cp mfsmetalogger.cfg.dist mfsmetalogger.cfg  

    grep "mfsmaster" /etc/hosts &amp;&gt; /dev/null  

    if [ $? -eq 0 ]; then  

        echo "$MASTERIP      mfsmaster" &gt;&gt; /etc/hosts  

    fi  

    usr/sbin/mfsmetalogger start  

    /usr/sbin/mfsmetalogger test &amp;&gt;&gt; start.log  

start_mfschunkserver()  

    echo "------mfschunkserver------"  

    cp mfschunkserver.cfg.dist mfschunkserver.cfg  

    cp mfshdd.cfg.dist mfshdd.cfg  

    /mnt/mfschunks1  

    /mnt/mfschunks2  

    chown -R nobody:nobody /mnt/mfschunks1  

    chown -R nobody:nobody /mnt/mfschunks2  

    /usr/sbin/mfschunkserver test &amp;&gt;&gt; start.log  

start_mfsclient()  

    echo "------mfsclient------"  

    cp /etc/mfsmount.cfg.dist /etc/mfsmount.cfg  

    mkdir -p /mnt/mfs  

    /usr/bin/mfsmount /mnt/mfs -H mfsmaster  

    /usr/bin/mfsmount -m /mnt/mfs -H mfsmaster  

    mkdir /mnt/mfs/sharedata  

    mkdir /mnt/mfs/sharefile  

    /usr/bin/mfssetgoal -r 3 /mnt/mfs  

    /usr/bin/mfssettrashtime 300 /mnt/mfs  

stop_mfs()  

    result=`df -h | grep mfsmaster | awk -F" " '{print $6}'`  

    OLD_IFS="$IFS"   

    IFS="\n"   

    array=($result)   

    IFS="$OLD_IFS"  

    for element in ${arr[@]}  

    do  

        umount $element  

    done  

    /usr/sbin/mfschunkserver stop  

    /usr/sbin/mfsmetalogger stop  

    /usr/sbin/mfsmaster stop  

main()  

    case "$1" in  

    mfsmaster)  

        start_mfsmaster;;  

    mfsmetalogger)  

        start_mfsmetalogger;;  

    mfschunkserver)  

        start_mfschunkserver;;  

    start_mfsclient)  

        start_mfsclient;;  

    *)  

        echo "please input:./moosefs.sh mfsmaster or mfsmetalogger or mfschunkserver or mfsclient"  

    esac   

main $1  

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1828407,如需轉載請自行聯系原作者