moosefs文件系統學習心得

特點:

1. 可以在線擴容,體系架構可伸縮性極強。

2. 部署簡單。通用文件系統,不需要修改上層應用就可以使用(支持fuse)。不過有些老版本的內核,比如5.4一下可能需要增加fuse模塊

3. 體系架構高可用,除開master組件無單點故障。

4. 文件對象高可用,可設置任意的文件冗餘程度,而絕對不會影響讀或者寫的性能。

5. 提供Windows回收站的功能。

6. 提供類似Java語言的 GC(垃圾回收)。

7. 提供netapp,emc,ibm等商業存儲的snapshot特性。 幾乎沒用到

8. google filesystem的一個c實現。

9. 提供web gui監控接口。監控頁面python寫的,還有待進一步研究

10. 提高隨機讀或寫的效率。這個沒啥感覺

11. 提高海量小文件的讀寫效率。也沒啥感覺

最關鍵一點,nfs不是分佈式文件系統,當掛載點多並且讀寫大的情形下,性能很難得到保障。並且線上服務器長期存在限制的硬盤資源,所以爲了充分的資源同時方便以後的擴展,應該及早採用分佈式文件系統方案。

 

 

二 ,moosefs安裝

參考腳本

cd /opt

rm -f mfs-1.6.11.tar.gz

wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz 

tar zxf mfs-1.6.11.tar.gz

cd mfs-1.6.11

useradd -s /sbin/nologin  -u 60021    mfs

lsmod |grep fuse

[ $? -eq 0  ] &&  ./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs  --enable-mfsmount || ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

 makeclean && make &&  makeinstall 

cd /usr/local/mfs/etc

cp mfsmaster.cfg.dist mfsmaster.cfg

cp mfsexports.cfg.dist mfsexports.cfg

cp mfschunkserver.cfg.distmfschunkserver.cfg 

cp mfshdd.cfg.dist  mfshdd.cfg

cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

cp/usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

lsmod |grep fuse

[ $? -eq 0  ] && echo  "exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"  >> /etc/profile

chown -R mfs.mfs  /usr/local/mfs/var/mfs

mfs內存佔用情況

mfsmaster運行時要把文件信息記錄到內存中,測試了一下,大概是1w個文件消耗10M大小的內存。

同時mfsmount大概消耗7-8M的內存大小。


•Chunkserver
•具體的安裝步驟還是看前面的通用安裝腳本,安裝完畢以後,下一步是創建文件系統
•流數據文件系統

ddif=/dev/zero of=mfs.img bs=1M count=15000

losetup/dev/loop0 mfs.img

mkfs.ext3 /dev/loop0

mkdir-p /mfs/chunk

mount -o loop /dev/loop0 /mfs/chunk

echo “mount -o loop /dev/loop0 /mfs/chunk

”  >> /etc/rc.local


•然後上面其實是把文件系統給創建完成,下一步是編輯配置文件mfshdd.cfg ,增加如下內容,把原來的默認內容刪除
•/mnt/mfschunks
•編輯mfschunkserver.cfg
•重點是把裏面的MASTER_HOST改成真實的master的ip,其他可以默認配置
•啓動chunk之前,把/mnt/mfschunks的用戶權限改成mfs
•啓動方式 /usr/sbin/mfschunkserver 


•Client端安裝
•具體安裝過程可以看通用安裝腳本
•Client端需要注意的是查看內核是不是支持fuse,如果沒有,那說明內核版本稍低,需要手工去添加該模塊。
•lsmod|grep fuse 可以查看系統是否支持fuse
•假如不支持的話,需要安裝fuse

•可以從http://sourceforge.net/projects/fuse/取得安裝源碼:
#cd /usr/src
#tar -zxvf fuse-2.8.4.tar.gz
#cd fuse-2.8.4
#./configure --prefix=/usr
#make
#make install

設置fuse啓動時自動裝載,在/etc/rc.local文件的後面增加如下一行:
modprobe fuse




三,Moosefs的日常維護

3.1 master的主備切換

master的主備切換分爲兩個步驟:一是由metalogger恢復master;二是chunk和client端進行響應的處理。

3.1.1 metalogger恢復master機制原理

1、metalogger定期從master下載metadata文件,並實時記錄changelog,但是這個“實時”究竟有多麼的實時,還得再看看。這個下載metadata和記錄changelog的工作有點類似sfrd客戶端每天下載基準和導入增量。

2、master掛掉之後,使用metarestore命令將metalogger中的基準和增量變成master需要的metadata,然後啓動mfsmaster。master和metalogger可以部署在同一臺機器,也可以部署在不同機器。

3、metalogger恢復master時使用的命令:

$ cd /home/XXXX/local/mfs/sbin

$ ./metarestore –a

$ ./mfsmaster

4、說明:

(1)metalogger服務器中需要備份master的兩個配置文件,由於配置文件不是經常變化,因此通過定時腳本進行文件同步即可。

(2)當metalogger沒有下載metadata之前,不能使用期接管master。此時metarestore程序會運行失敗。

(3)metarestore程序是根據metalogger中定期下載的metadata和changelog來恢復master掛掉時刻master所記錄的整個mfs的信息。

    

3.1.2 chunk和client相應的修改

      1、對於client,需要umount掉mfs分區後,重啓mfsmount新的master的IP地址。如果master掛掉之後,經過(1)重啓服務器(2)使用同一臺機器中metalogger恢復master數據(3)啓動master;則client端不需要重新手動進行mfsmount,因爲mfsmount會自動重試。

      2、對於chunk,可以逐個chunk修改配置文件中master的IP地址,然後進行重啓。如果master掛掉之後,經過(1)重啓服務器(2)使用同一臺機器中metalogger恢復master數據(3)啓動master;則chunk不需要重啓,master會在自動檢測chunk的時候檢測到它。

3.2 metalogger的注意事項

    1、部署metalogger的服務器的open files數目必須大於或者等於5000,

    2、metalogger在啓動時不會下載metadata,而是等到第一個下載週期的下載時間點時再去下載,metalogger下載metadata的時間點是每小時的10分30秒,時間間隔是1小時的整數倍。

    3、metalogger不是在啓動的時候就取下載metadata,而是必須等到下載時間點(2中所述)纔會去下載。也就是說,metalogger爲確保正確性,要在啓動後最少一個小時以內master和metalogger都要保持良好的狀態。

 

3.1.3         master端自動切換機制

目前打算採用的是keepalived+master的方式去進行主備機的切換。過程如下:主機上如果vip不通或者是mfs的master進程不存在了,或者是其他的檢查手段,認爲主機上的master服務不能提供正常的服務了,這時候keepalived就會把vip遷移到備機,同時備機上通過keepalived去啓動master服務。

切換過程主要注意的是主機上的服務檢測,vip的切換,備機上的master的日誌恢復同時平穩啓動。切換過程中master服務會一度中斷,10到30秒之間,並且中斷時間包括幾個部分,vip的漂移,備機master進程啓動,後端chunk端和master端通訊,以及最後client端重新建立和master端的通訊。期間一切的讀寫操作均失效,從原理來說,當時由於服務停止響應,所以不會寫入新的數據,也就不存在數據寫入過程中的丟失。但是假如當時有程序準備往文件系統去寫入數據,這時候是寫不進去的,但是可以下次等mfs正常以後再次提交,所以這個數據丟失沒法從量上進行衡量。

牽扯到master自動切換這塊的內容,還有待進一步的去優化,爭取進一步縮短切換中的服務失效時間。

 

 

配置文件

Keepalived.conf

global_defs {

  notification_email {

    [email protected]

    [email protected]

    [email protected]

   }

  notification_email_from [email protected]

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id mfs

}


vrrp_instance VI_1 {

notify_master"/usr/local/sbin/keepalived_notify.sh master"

   state MASTER

   interface eth0

   virtual_router_id 51

   priority 150

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

    }

   virtual_ipaddress {

       10.8.1.236

    }

}

 

•more /usr/local/sbin/keepalived_notify.sh
•#!/bin/bash
•###change to master
•cd /usr/local/mfs/var/mfs
•/usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back -o metadata.mfs `ls -ltr changelog_ml*|awk 'END{print $9}'`
•/usr/local/mfs/sbin/mfsmaster
•echo `date +%Y%m%d-%T` 'change to master ' >> /tmp/mfs_change.log

 

Master切換過程,當主的master服務器宕機以後,備機上的keepalived進程會在備機上進行日誌回覆,然後啓動master進程和vip。

 

 

故障模擬過程:

1,  主上停止mfs進程,模擬主機斷電,同時停止keepalived,這時候從上keepalived會啓動vip,同時啓動mfs的master進程。

2,  由於從上keepalived並沒有對本機mfs進程進行監控,所以,當主上的服務正常以後,還需要重新把服務切換到主服務器上。停到從上的mfs進程,然後停掉keepalived進程。

啓動主上的keepalived進程。檢查master服務是否在主上運行正常,並通過客戶端訪問去驗證。

 

目前線上系統的服務器部署情況

常見問題大全:

Q:嘗試把mfs的日誌數據放到nfs文件系統上,一開始啓動報錯,

A:後來發現是因爲moosefs啓動的時候會找文件鎖,但是nfs默認沒有啓動lock機制,所以需要在客戶端和服務端都要啓動nfslock服務。


ps:

官方網站

http://www.moosefs.org/

發佈了27 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章