设为首页 收藏本站
查看: 1633|回复: 0

[经验分享] MFS分布式文件系统

[复制链接]

尚未签到

发表于 2019-2-1 09:30:34 | 显示全部楼层 |阅读模式
一、MooseFS


  • MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
  • Moose文件系统(MooseFS)是由Core Technology开发的开源,POSIX兼容的分布式文件系统。MooseFS旨在为数据中心提供容错,高可用,高性能,可扩展的通用网络分布式文件系统。最初是专有软件,它于2008年5月5日作为开源向公众发布。
  • 目前有两个版本的MooseFS:
    MooseFS - 根据GPLv2许可发布,
    MooseFS专业版(MooseFS Pro) - 以二进制包形式的专有许可证发布。
  • 官网地址:http://www.moosefs.com/

二、组成
  MooseFS遵循与Fossil(文件系统),Google File System,Lustre或Ceph类似的设计原则。文件系统包括三个组件:


  • 元数据服务器(Master) - 维护和管理文件的位置(布局),文件访问和命名空间层次结构。当前版本的MooseFS支持多个元数据服务器和自动故障转移。客户端只与MDS通信以检索/更新文件的布局和属性; 数据本身直接在客户端和块服务器之间传输。元数据服务器是用户空间守护程序 ; 元数据保存在内存中,并且懒惰地存储在本地磁盘上。
  • 元数据日志服务器(Metalogger)- 纪录数据的改动情况,定期从MDS中提取元数据以存储它以进行备份。从版本1.6.5开始,这是一个可选功能。
  • 块服务器(Chunk Server) - 存储数据并可选地在它们之间进行复制。虽然可扩展性限制尚未发布,但可能有很多。迄今为止报告的最大集群包括160台服务器。[7] Chunk服务器也是一个用户空间守护程序,它依赖于底层本地文件系统来管理实际存储。
  • 客户端 - 与Master和ChunkServer交谈。MooseFS客户端通过FUSE将文件系统挂载到用户空间。

三、原理

MFS读过程


  • 客户端向Master发送读请求
  • Master去缓存的数据库(非MySQL)中搜索客户端所需数据的位置,并告知客户端(Chunk Server IP、Chunk编号)
  • 客户端去指定Chunk Server的对应Chunk编号读取数据
  • 客户端通知Master读取完毕

MFS写过程


  • 客户端向Master发送写请求
  • Master通知Chunk Server(谁空闲,如空闲新建Chunk编号),找到后将知道的Chunk Server IP和编号告知客户端
  • 客户端向指定IP和编号存储数据
  • 客户端告知Master写入完毕
  • Master通知Metalogger有新数据写入(Matelogger纪录新增加文件位置和对应Chunk Server),日志记录完毕后,连接关闭

四、功能
  为实现高可靠性和高性能,MooseFS提供以下功能:


  • 容错 - MooseFS使用复制,可以跨块服务器复制数据,每个文件/目录设置复制比率(N)。如果(N-1)个副本失败,则数据仍然可用。目前,MooseFS没有提供任何其他容错技术。因此,对于非常大的文件的容错需要大量的空间--N *文件大小而不是文件大小+(N * stripeize),如RAID 4,RAID 5或RAID 6的情况。MooseFS版本4.x PRO将具有RAID6。
  • 条带化 - 大文件分为块(最多64 兆字节),可以存储在不同的块服务器上,以实现更高的聚合带宽。
  • 负载平衡 - MooseFS尝试平等地使用存储资源,当前算法似乎只考虑消耗的空间。
  • 安全性 - 除了经典的POSIX文件权限之外,自1.6版本发布以来,MooseFS提供了一个简单的,类似NFS的身份验证 / 授权。
  • 相干快照 - 快速,低开销的快照。
  • 透明的“垃圾桶” - 删除的文件将保留一段可配置的时间。
  • 数据分层/存储类 - 可以“标记”服务器,创建称为“存储类”的标签定义,并决定数据存储在哪些类型的服务器上[8]
  • “项目”配额支持
  • POSIX锁,flock锁支持

四、数据存储方式


  • 文件以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份,这样如果有一台chunkserver坏掉后,至少还有一份copy,当这台又被加进来后,会将失去的那份copy补回来,始终保持原有的copy数。而如果goal设为1,那么当存储该copy的chunkserver坏掉,之后又重新加入回来,copy数将始终是0,不会恢复到之前的1个copy
  • chunkserver上的剩余存储空间要大于1GB,新的数据才会被允许写入,否则,你会看到No space left的提示
  • 多个chunker并不影响写的速度,但是能加快读的速度,在原来的基础上增加一个chunker时,数据会自动同步到新增的chunker上以达到数据的平衡和均衡


五、部署MFS

环境准备


Role
IP
OS
RPM




Master
192.168.0.21
CentOS6.7_64bit
mfs-1.6.27-5.tar.gz


MetaLogger
192.168.0.22
CentOS6.7_64bit
mfs-1.6.27-5.tar.gz


Chunk Server 1
192.168.0.23
CentOS6.7_64bit
mfs-1.6.27-5.tar.gz


Chunk Server 2
192.168.0.24
CentOS6.7_64bit
mfs-1.6.27-5.tar.gz


Client
192.168.0.25
CentOS6.7_64bit
mfs-1.6.27-5.tar.gz   fuse-2.9.2.tar.gz

搭建Master Server
  a.安装环境包并创建用户

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.21
NETMASK=255.255.255.0
yum -y install zlib-devel    //安装依赖环境
useradd -s /sbin/nologin mfs    //创建mfs运行用户
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27    //解包
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount    //配置选项
make && make install    //编译并安装
cd /usr/local/mfs/
ll                         //看下安装完成生成的目录
drwxr-xr-x 2 root root 4096 Dec  3 11:24 bin         //客户端工具
drwxr-xr-x 3 root root 4096 Dec  3 11:24 etc         //服务器的配置文件都放在该目录中
drwxr-xr-x 2 root root 4096 Dec  3 11:24 sbin       //服务端启动程序。如:元数据服务器端程序 mfsmaster、数据存储服务器端服务程序mfschunkserver
drwxr-xr-x 4 root root 4096 Dec  3 11:24 share     //文档
drwxr-xr-x 3 root root 4096 Dec  3 11:24 var         //元数据目录(可在配置文件中自定义到其他目录)
  b.复制文件

cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg    //Master配置文件
cp mfstopology.cfg.dist mfstopology.cfg    //输出目录配置文件
cp mfsexports.cfg.dist mfsexports.cfg    //元数据日志
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
//首次安装 master 时,会自动生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFS master 运必须有文件 metadata.mfs
  c.启动Master Server
master 会打开 9420 端口等待 chunkserver 数据存储服务器连接

/usr/local/mfs/sbin/mfsmaster start    //启动master服务
ps -ef | grep mfs
ll /usr/local/mfs/var/mfs/         //查看生成的日志文件
-rw-r----- 1 mfs mfs     95 Dec 24 14:30 metadata.mfs
-rw-r----- 1 mfs mfs     95 Dec 24 14:28 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs      8 Dec 24 14:13 metadata.mfs.empty
-rw-r----- 1 mfs mfs     10 Dec 24 14:28 sessions.mfs
-rw-r----- 1 mfs mfs 762516 Dec 24 14:30 stats.mfs
/usr/local/mfs/sbin/mfsmaster stop     //服务的关闭方法
/usr/local/mfs/sbin/mfscgiserv start    //启动web统计
IE --> 192.168.0.21:9425    //访问web统计界面
搭建MetaLogger Server
  a.安装环境包并创建用户

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.22
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
make && make install
  b.复制文件

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
vim mfsmetalogger.cfg
MASTER_HOST = 192.168.0.21
//MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER 的 IP 地址
  c.启动Metalogger Server

/usr/local/mfs/sbin/mfsmetalogger start
ps -ef | grep mfs
搭建Chunk Server 1
  a.安装环境包并创建用户

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.23
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make && make install
  b.复制文件

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.0.21
vim mfshdd.cfg
/data
//数据存放的目录,一般为一块磁盘的挂载目录
mkdir /data
chown -R mfs:mfs /data
  c.启动Chunk服务

/usr/local/mfs/sbin/mfschunkserver start
ps -ef | grep mfs
搭建Chunk Server2
  a.安装环境包并创建用户

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.24
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make && make install
  b.复制文件

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.0.21
vim mfshdd.cfg
/data
mkdir /data && chown mfs:mfs /data
  c.启动Chunk服务

/usr/local/mfs/sbin/mfschunkserver start
ps -ef | grep mfs
client挂载MFS文件系统
  a.安装fuse

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.25
NETMASK=255.255.255.0
tar -zxvf fuse-2.9.2.tar.gz -C /usr/src/ && cd /usr/src/fuse-2.9.2
./configure && make && make install
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile
  b.安装MFS客户端
useradd -s /sbin/nologin mfs
tar -zxvf ~/mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
make && make install
  c.挂载MFS文件系统

modprobe fuse      //加载fuse模块到内核
vim /etc/rc.local    //开机自动加载
modprobe fuse
/usr/local/mfs/bin/mfsmount /media -H 192.168.0.21    //挂载
[root@mfs_client ~]# /usr/local/mfs/bin/mfssetgoal -r 1 -H /media/
//更改随机copy的次数
[root@mfs_client ~]# /usr/local/mfs/bin/mfsgetgoal -H /media/
//查看当前copy的次数



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670301-1-1.html 上篇帖子: 笔记:Linux下MooseFS1.6特点、原理图、生产设计 下篇帖子: Redhat5.4 系统上部署 MooseFS分布式文件系统的部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表