MFS分布式对象存储
分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机、服务器模式。一个典型的网络可能包括多个用户访问服务器。
一、MFS优越性如下
-
Free通用文件系统
-
可在线扩展,体系架构伸缩性极强
-
部署简单
-
高可用,可设置任意文件冗余程度(提供比raid10更高的冗余级别,而不影响读写性能,只会加速)
-
可回收在指定时间内删除的文件
-
提供了类似于EMC,IBM等商业存储的快照特性。(可对整个文件或正在读写的文件创建快照)
二、MFS工作原理和设计架构
角色 | 角色作用 |
---|---|
管理服务器managing server(master) | 负责整个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,节点拷贝 |
元数据服务器Metalogger server(Metalogger) | 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于master server 出现问题的时候接替进行工作 |
数据存储服务器data server(chunk) | 负责链接管理服务器,听从于管理服务器调度,提供存储空间,并为客户提供数据传输 |
客户机挂载使用client computer | 通过fuse 内核接口远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地Unix文件系统使用一样的效果。 |
MFS读取数据的过程
当client需要数据时,首先向master server发起查询请求 管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid 管理服务器将数据服务器的地址发送给客户端 客户端向具体的数据服务器发起数据获取请求 数据服务器将数据发送给客户端
MFS删除数据的过程
l 客户端有删除操作时,首先向Master发送删除信息
l Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理
l 响应客户端删除成功的信号MFS修改文件内容的过程客户端有修改文件内容时,首先向Master发送操作信息
l Master申请新的块给.swp文件,客户端关闭文件后,会向Master发送关闭信息
l Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块
l 若无,则直接删除.swp文件块。
注: l Master记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs.back文件中,定期同步到metalogger,操作实时写入changelog.*.mfs,实时同步到metalogger server中。master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件。 l 文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF 256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续。 l Chunkserver上的剩余存储空间要大于1GB,新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。 l 文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。
三、MFS的安装、部署、配置
实验规划
身份 | IP |
---|---|
client server | 192.168.30.10 |
master server | 192.168.30.20 |
metalogger server | 192.168.30.30 |
chunk server1 | 192.168.30.40 |
chunk server2 | 192.168.30.50 |
安装包:Index of /src
步骤一:配置master server 192.168.30.20
-
安装
[root@localhost ~]# yum -y install gcc zlib-devel [root@localhost ~]# useradd -r -s /sbin.nologin mfs [root@localhost ~]# tar -xf moosefs-3.0.101 [root@localhost ~]# cd moosefs-3.0.101 [root@localhost ~]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfschunkserver [root@localhost ~]# make && make install
-
配置
[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin [root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin [root@localhost ~]# cd /usr/local/mfs/etc/mfs [root@localhost mfs]# cp -a mfsmaster.cfg.sample mfsmaster.cfg [root@localhost mfs]# cp -a mfsexports.cfg.sample mfsexports.cfg [root@localhost mfs]# cp -a mfstopology.cfg.sample mfstopology.cfg [root@localhost mfs]# vim mfsexports.cfg 客户端IP 允许挂载的目录 客户端挂载的权限 * / rw,alldirs,admin,maproot=0:0 * . rw
-
管理
[root@localhost ~]# cd /usr/local/mfs/var/mfs [root@localhost mfs]# cp -a metadata.mfs.empty metadata.mfs [root@localhost ~]# mfsmaster start [root@localhost ~]# netstat -anpt tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 15534/mfsmaster tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 15534/mfsmaster tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 15534/mfsmaster
步骤二:配置metalogger server 192.168.30.30
-
安装moosefs-3.0.101(同上)
-
配置
[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin [root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin [root@localhost ~]# cd /usr/local/mfs/etc/mfs/ [root@localhost mfs]# cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg [root@localhost mfs]# vim mfsmetalogger.cfg META_DOWNLOAD_FREQ = 2 MASTER_HOST = 192.168.30.20 [root@localhost ~]# mfsmetalogger start [root@localhost ~]# lsof -i :9419 mfsmetalo 12659 mfs 8u IPv4 44244 0t0 TCP localhost.localdomain:59956->192.168.30.20:9419 (ESTABLISHED)
步骤三:配置chunk server 192.168.30.40&50
-
安装
[root@localhost ~]# yum -y install gcc zlib-devel [root@localhost ~]# useradd -r -s /sbin/nologin mfs [root@localhost ~]# tar -xf moosefs-3.0.101-1.tar.gz [root@localhost ~]# cd moosefs-3.0.101 [root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount [root@localhost moosefs-3.0.101]# make [root@localhost moosefs-3.0.101]# make install
-
配置
[root@localhost moosefs-3.0.101]# ln -s /usr/local/mfs/bin/* /usr/local/bin/ [root@localhost moosefs-3.0.101]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ [root@localhost moosefs-3.0.101]# cd /usr/local/mfs/etc/mfs [root@localhost mfs]# cp -a mfschunkserver.cfg.sample mfschunkserver.cfg [root@localhost mfs]# vim mfschunkserver.cfg MASTER_HOST = mfsmaster #指明master server服务器地址 MASTER_PORT = 9420 #指明master server 端口 HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg #共享磁盘的配置文件 [root@localhost mfs]# cp -a mfshdd.cfg.sample mfshdd.cfg [root@localhost mfs]# vim mfshdd.cfg /chunkdir #填写挂载点 [root@localhost mfs]# pvcreate /dev/sdb [root@localhost mfs]# vgcreate vg01 /dev/sdb [root@localhost mfs]# lvcreate -L 18G -n lv01 vg01 [root@localhost mfs]# mkfs.ext4 /dev/vg01/lv01 [root@localhost mfs]# mkdir /chunkdir [root@localhost mfs]# mount -t xfs /dev/vg01/lv01 /chunkdir #建议写入/etc/fstab [root@localhost mfs]# chown -R mfs.mfs /chunkdir #注意在挂载完成后,修改目录归属 #添加一块磁盘并创建分区,然后挂载到指定的挂载点下(使用ext4文件系统格式化)
-
管理
[root@localhost etc]# mfschunkserver start [root@localhost etc]# ps -ef | grep mfs 405681002:14 ? 00:00:00 mfschunkserver startroot
步骤三:配置client server 192.168.30.10
-
安装
[root@localhost ~]# yum -y install gcc zlib-devel fuse fuse-devel fuse-libs [root@localhost ~]# useradd -r -s /sbin/nologin mfs [root@localhost ~]# tar -xf moosefs-3.0.101-1.tar.gz [root@localhost ~]# cd moosefs-3.0.101 [root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver [root@localhost moosefs-3.0.101]# make [root@localhost moosefs-3.0.101]# make install
-
配置
测试 [root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin/ [root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ [root@localhost ~]# mfsmount /mfsdata/ -H 192.168.88.10 [root@localhost ~]# mfsmount /mfsmeta/ -H 192.168.88.10 [root@localhost ~]# mfsmount -m /mfsmeta/ -H 192.168.88.10 # -H 指定 master server IP