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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章