特點:
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的內存大小。
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
#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 {
}
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
}
}
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/