特点:
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 {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
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/