Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6800669
  • 博文数量: 1662
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12554
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1662)

文章存档

2021年(8)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 架构设计与优化

2013-12-27 11:00:19

moosefs文件系统学习心得

分类: linux 681人阅读 评论(0) 收藏 举报

特点:

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



?可以从取得安装源码:
#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

    }

}

 


?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:

官方网站

阅读(577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~