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

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

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 系统运维

2013-12-30 16:59:22

安装环境:CentOS 5.6 x64 + VM

软件:MooseFS 1.6.20

安装方式: RPM包

安装Master服务器

和官方的安装指导使用编译安装方式不同,通过RPM包安装,首先要导入第三方的仓库

下载 仓库配置文件

Wget 

安装配置文件

rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm

搜索RPM包

yum search mfs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * rpmforge: apt.sw.be
===================Matched:  mfs =======================
mfs.x86_64 : Fault tolerant, network distributed file system
mfs-cgi.x86_64 : Status CGI for MooseFS
mfs-client.x86_64 : Client tools for MooseFS

其中三个包mfs.x86_64是主程序包,mfs-cgi.x86-64是用于apache主机的cgi监控,如果你不用apache,可以不用安装的。第三个包mfs-client,是给客户端安装的,需要fuse的相关依赖性予以支持。

修改配置文件并启动服务器

1、切换目录
#cd /etc
2、复制样例文件,以得到master 所需的配置文件
#cp mfsmaster.cfg.dist mfsmaster.cfg
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
#cp mfsexports.cfg.dist mfsexports.cfg

mfsmaster.cfg包含了服务器的相关设置,配置文件mfsexports.cfg

配置元数据文件,初次安装的时候,元数据文件只是一个空文件,在启动服务器之前,必须做如下配置

1、切换目录
#cd /var/mfs
2、重命名文件
#cp metadata.mfs.empty metadata.mfs

启动服务器

#/usr/sbin/mfsmaster start

启动CGI监控页面

       /usr/local/sbin/mfscgiserv start

Mfscgiserv是用python编写的一个web服务器,监听端口是9425。用户利用浏览器就可全面监控所有客户挂载、服务器状态、磁盘IO信息、客户端的各种操作等等。

mfsexports.cfg文件的配置

[root@mfsMaster mfs]# vim mfsexports.cfg
# Allow everything but "meta".
*                       /       rw,alldirs,maproot=0
 
# Allow "meta".
*                       .       rw
 
# Some examples:
 
#  Users from any IP can mount root directory as a read-only file system. Local roots are mapped as users with uid:gid = 999:
999.
#*                      /       ro
 
#  Users from IP 192.168.1.0-192.168.1.255 can mount root directory as a standard read/write file system. Local roots are map
ped as users with uid:gid = 999:999.
#192.168.1.0/24         /       rw
 
#  Users from IP 192.168.1.0-192.168.1.255 when give password 'passcode' can mount any subdirectory as a standard read/write 
file system. Local roots are left unmapped.
#192.168.1.0/24         /       rw,alldirs,maproot=0,password=passcode
 
#  Users from IP 10.0.0.0-10.0.0.5 when give password 'test' can mount 'test' subdirectory as a standard read/write file syst
em. Local roots are mapped as 'nobody' users (usually uid=65534).
#10.0.0.0-10.0.0.5      /test   rw,maproot=nobody,password=test
 
#  Users from IP 10.1.0.0-10.1.255.255 can mount 'public' subdirectory as a standard read/write file system. All users are ma
pped as users with uid:gid = 1000:1000.
#10.1.0.0/255.255.0.0   /public rw,mapall=1000:1000

该文件每一行分为三部分:

第一部分:被允许接入的客户端的ip地址

第二部分:被挂接的目录

第三部分:客户端的权限

第一部分IP地址可以指定多种形式:

* 所有的ip地址

n.n.n.n 单个ip地址

n.n.n.n/m IP网络地址/位数掩码

n.n.n.n/m.m.m.m IP网络地址/子网掩码

a.a.a.a-b.b.b.b IP段

第二部分 目录用以下表示:

/ 表示MooseFS 文件系统的根;

. 表示MFS META 元数据文件系统

第三部分 权限有以下选项:

ro 只读的模式共享

rw 读写的模式共享

alldirs 允许挂载任意指定的子目录

maproot 映射本地root到远程服务器上的用户

mapall 映射本地其他用户到远程服务器上的用户

password 指定客户端挂载密码

安装Metalogger服务器

拷贝配置文件并编辑

cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

修改配置文件MASTER_HOST = 16.157.134.165

安装chunk服务器

因为RPM包编译后,服务器进程默认的执行用户是daemon,所以必须给mfshdd.cfg中指定的路径赋予权限,允许其读写。执行以下语句:

     chmod –R daemon:daemon /mnt/mfschunks1

使用mfschunk start初始化 目录,大概要浪费掉300mb的空间。Chuck块大小是64MB,block块大小是64KB,原始设计倾向于保存大文件。效验和的开销:Block 每64KB是4B,所以Chunk每64MB是4KB。

在线热拔插硬盘

需要注意的是必须保证任何一个chunks有2个以上的备份(goal)才可以安全的移除主机或磁盘。

第一步,首先编辑待去除硬盘主机的/etc/mfs/mfshdd.cfg文件,把需要去除的路径前面标记*号 ,例如:

# mount points of HDD drives
#/mnt/hd1
#/mnt/hd2
#etc.
/mnt/mfschunks1
*/mnt/mfschunks2

第二步,重启chunkserver进程

# mfschunkserver restart
working directory: /var/mfs
sending SIGTERM to lock owner (pid:3532)
waiting for termination ... terminated
initializing mfschunkserver modules ...
hdd space manager: scanning folder /mnt/mfschunks1/ ...
hdd space manager: scanning complete
hdd space manager: /mnt/mfschunks1/: 0 chunks found
hdd space manager: scanning complete
main server module: listen on *:9422
stats file has been loaded
mfschunkserver daemon initialized properly                                                                                                                                           

第三步查看 CGI页面,可以观察到相应的硬盘已经标记marked for removal,这个时候说明MFS软件已经阻止任何新的IO写入该磁盘。并且要在CGI页面中确认undergoal的chunk数量为0,否则说明还有chunk没有完整的备份到其他服务器上。做完以上这些工作,停止mfschunkserverstop,即可安全的移除磁盘了。

客户端挂载MFS文件系统

mfsmount  /mnt/mfstest(本地挂载点) -H 16.157.134.165 (Master主机IP或域名)

挂载MFS META文件系统

挂载该系统主要是为了恢复被误删除的文件,挂载命令为:

mfsmount -m /mnt/mfstest -H 16.157.134.165 (Master主机IP或域名)

文件系统结构如下:

[root@mfsClient2 mfstest]# ll
total 0
dr-x------ 2 root root 0 Sep  8 15:24 reserved
drwx------ 3 root root 0 Sep  8 15:24 trash
[root@mfsClient2 mfstest]# cd trash/
[root@mfsClient2 trash]# ls
undel

trash目录中是删除到回收站中的文件,如果移动到undel子目录,那么被删除的文件就会恢复到原MFS文件系统中。只有管理员有权限访问MFSMETA (用户的uid 0,通常是root)。在 MFSMETA的目录里,除了trash和trash/undel两个目录外,还有第三个目录reserved,该目录内有已经删除的文件,但却有一直打开着。在用户关闭了这些被打开的文件后,reserved目录中的文件将被删除,文件的数据也将被立即删除。在reserved目录中文件的命名方法同trash目录中的一样。

系统启动自动挂载

编辑文件 /etc/fstab 加入如下行

mfsmount 挂载点 fuse mfsmaster=MFSMASTER_IP,mfsport=MFSMASTER_PORT,_netdev 0 0

其中的_netdev这个参数 大多数redhat或者debian系统都可以识别,表示该设备在网络服务正常运行后开始挂载,从而避免挂载失败。

系统管理:

MFS系统管理文件系统比较奇怪,由指定权限的客户端管理而不是由master服务器管理,如果不想给予客户端管理的权限,必须在mfsexports.cfg文件中设置为ro权限。它由一系列的get/set管理命令组成:

mfsgeteattr/ mfsseteattr 文件或目录的额外的属性

mfsgetgoal/ mfssetgoal 设置文件的冗余份数,建议设置值为2以上,保证至少允许一台服务器故障

mfsgettrashtime/ mfssettrashtime 设置垃圾箱保留时间,如果设置为0,则表示直接删除,不进入回收站

以上的命令均是对单个文件或者目录起效果,如果想对整个文件系统生效,请在根目录下面使用命令,并且加上递归的参数 –r。

实际的拷贝份数可以通过mfscheckfile 和 mfsfileinfo/mfsdirinfo 命令来证实

[root@mfsClient1 mfstest]# mfscheckfile b
b:
2 copies: 1 chunks
[root@mfsClient1 mfstest]# mfsfileinfo b
b:
        chunk 0: 0000000000006334_00000001 / (id:25396 ver:1)
                copy 1: 192.168.0.3:9422
                copy 2: 192.168.0.4:9422

MFS测试

测试的考量方面主要有两点,一性能测试;二可靠性测试。主要的测试项目如下图所示:

测试环境

主机名

CPU

Mem

Master

2 Core

2GB

MetaLogger

1 Core

1GB

Chunk X 3

1 Core

1GB

Client X 1

1 Core

256MB


对比测试方案:

1. 本地硬盘测试

2. 不配置MetaLogger服务器

3. 配置MetaLogger服务器

4. Master服务器硬盘由thin升级为thick

5. 网络环境更改为MTU 9K

6. 设置goal为2

测试结果数据和图表如下所示:

表1,本地测试结果

表2,不配置MetaLogger服务器

表3,配置MetaLogger服务器

表4 ,Master服务器硬盘由thin升级为thick

对网络MTU优化后进行测试

主要优化部分,将测试的环境全部更换到MTU 9000,并且开启网卡的相应的一些offload功能,如tcp segmentation offload、generic segmentation offload、generic-receive-offload。

在ESX主机上增加vswitch 并且设置MTU

~ # esxcfg-vswitch -a mfsswitch
~ # esxcfg-vswitch  mfsswitch -m 9000

在虚拟机中,在线给VM添加新网卡,网卡类型选择性能最好的VMXNET3。在Linux发现新网卡,并设置相关IP

# kudzu
# system-config-network-tui
# service network restart

设置MTU,并开启相关功能

# ifconfig eth1 mtu 9000
# ethtool -K eth1 gso on
# ethtool -K eth1 gro on 
# ethtool -K eth1 tso on

表5,网络环境更改为MTU 9K

表6,设置GOAL 为2

测试结果横向比较

为了消除CPU Cache和Memory Buffer对结果的影响,和考察极端条件下的真实IO能力,我选取上面测试结果中的FileSize=512MB和BlockSize=64KB的Random Read/Write成绩做出下表进行横向比较和研究:

从结果上,是否配置日志备份服务器对性能影响不大。提升Master服务器的配置,对性能有轻微影响。改进MTU 9K对性能影响较大。设置GOAL =2的时候,读的性能获得类似于负载均衡的效果,故有一定的提高,而写入的性能,由于需要等待多台服务器进行同步之后,才能确定write successful,故该参数设置对写性能有负面影响。

可靠性测试

修改goal 目标为1 ,尝试写入大文件的途中,模拟一台chunk服务器网络中断故障的结果:

dd if=/dev/zero of=/mnt/mfstest/test bs=100MB count=50

dd: writing `/mnt/mfstest/test': Input/output error

dd: closing output file `/mnt/mfstest/test': Input/output error

改为goal为2的时候,模拟相同的故障,结果顺利完成写入大文件。为了文件的完整性,建议使用MFS系统时,必须将GOAL 设置为2以上。






 MooseFS文件系统介绍 2011-06-07 18:42:13

分类: 服务器与存储


MooseFS文件系统介绍

MooseFS是一种分布式文件系统,MooseFS文件系统结构包括以下四种角色:

  1 管理服务器managing server (master)
  2 元数据日志服务器Metalogger server(Metalogger)
  3 数据存储服务器data servers (chunkservers)
  4 客户机挂载使用client computers

各种角色作用:
   1 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
  2 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
  3 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
  4 客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.

MooseFS优点

1.开源
2.通用文件系统,不需要要修改上层应用就可以使用
3.可以在线扩容,体系架构可伸缩性极强
4.部署简单
5.体系架构高可用,所有组件无单点故障
6.文件对象高可用,可设置任意的文件冗余程度,而绝对不会影响读写的性能,只会加速
7,提供如windows回收站的功能,
8.提供类似java语言GC(垃圾回收)
9.提供netapp,emc,ibm等商业存储的snapshot特性
10.google filesystem 的一个c实现
11.提供web gui监控接口
12.提高随机读写的效率
13.提高海量小文件的读写效率


MooseFS 1.6版本改进
 
 1.修改1.5中的大批量操作时打开文件过多的bug
 2.新增加了masterlogger服务器,在1.5中没有的,就是做了master服务器的冗余,进一步的加强master服务器的稳定性,在mfs体系中master是要求最稳定以及性能要求最高的,因此务必保证master的稳定
 3.修改1.5中存在的对于坏块的修复功能,在mfs1.5中遇到chunker坏块校验,错误比较多的是往往导致master将出现坏块的chunker自动剔除出去的情况,此次增加了对坏块的修复功能,很方便的进行修复,简化对坏块的处理功能。
 4.对metadata和changelog的新认识,之前认为changelog记录的是文件的操作,定期的像数据库的日志一样归档到metadata中,发现上面的理解存在误区,真正的是changelog中记录了对文件的操作,metadata记录文件的大小和位置,因此metadata是比较重要的,在进行修复的过程中是采用metadata和最后一次changelog进行修复。
 5.MFS 文档中明确指出对于内存和磁盘大小的要求
 6.指出了在测试的过程中多个chunker并不影响写的速度,但是能加快读的速度,在原来的基础上增加一个chunker时,数据会自动同步到新增的chunker上以达到数据的平衡和均衡。

常见问题,

 1.master性能瓶颈,主要是可扩展性不强
 2.体系架构存储文件总数的瓶颈,mfs把文件系统的结构缓存到master内存中,这样文件越多,master的内存消耗越大,8G对应2500kw文件数,2亿就的64G内存
 3.单点故障解决方案的健壮性
 4.垃圾回收   把默认的86400改为300秒,这样可以免的垃圾还没回收完,你的存储容量就暴掉了。


mfs的原理:

就是客户端请求master,master分派他去哪里读数据,

MFS系统由4个部分构成,master、metalogger、chunkserver、client。
Master —— mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,和innodb中共享空间(ibdata)中存储的信息类似,这些信息被记录到metadata.mfs中,当该文件被载入内存后,改文件会重命名为metadata.mfs.back,当chunkserver上有更新时,master会定期将获得的新的信息回写到metadata.mfs.back中,保重元数据的可靠。
 
硬件推荐:大内存,因为内存中需要将metadata.mfs加载进来,这个文件的大小取决于你chunkserver上存储的数据量,内存的大小会成为之后的问题,要ECC的可以进行错误校验,当内存中数据量达到一定程度,如果没有个容错的机制,会很可怕;冗余电池,和磁盘配置RAID1/RAID5/RAID10,都是为了保证高可靠。
 
Metalogger —— mfs的备份,好比mysql中的m-s结构,metalogger会定期重master上将的metadata、changelog、session类型的文件下载同步到本地目录下,并加后缀”_ml”将其重命名。
 
硬件推荐:与master机器配置一致,metalogger本身就是master的一个备机,当master宕机后,可以直接将metalogger提升为master。
 
Chunkserver —— 数据存储地,文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小,超过64M的文件将被均分,每一份(chunk)的大小以不超过64M为原则;文件可以有多份copy,即除了原始文件以外,该文件还存储的份数,当goal为1时,表示只有一份copy,这份copy会被随机存到一台chunkserver上,当goal的数大于1时,每一份copy会被分别保存到每一个chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存,goal设置再多实际上也就没有意义的。Copy的份数,一般设为大于1份,这样如果有一台chukserver坏掉后,至少还有一份copy,当这台又被加进来后,会将失去的那份copy补回来,始终保持原有的copy数,而如果goal设为1copy,那么当存储该copy的chunkserver坏掉,之后又重新加入回来,copy数将始终是0,不会恢复到之前的1个copy。
Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。
 
硬件建议:普通的机器就行,就是要来存几份数据,只要磁盘够大就好。
 
Client —— 客户端通过内核加载的FUSE模块,再通过和master的共同,将chunkserver共享的分区挂载到本地,然后进行读写操作。由于FUSE模块是外加的模块,当系统重启后,需要执行modprobe fuse,将其加载到内核中



matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。

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