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

[经验分享] MooseFS 分布式文件介绍+部署 MFS

[复制链接]

尚未签到

发表于 2019-2-1 09:18:45 | 显示全部楼层 |阅读模式
  

  官网:http://www.moosefs.org
  1、MooseFS是什么
  一个类MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,然而对于访问MFS的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,从其对文件系统的情况看MooseFS就相当于UNIX的文件系统(ext3、ext4、nfs):
  a.mfs是一个分层的目录树结构
  b.存储支持POSIX标准的文件属性(权限,最后访问和修改时间)
  c.支持特殊的文件。如:块设备,字符设备,管道、套接字、链接文件(符合链接、硬链接)
  

  2、MooseFS的特性
  a.高可靠性,每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上
  b.高可扩展性,可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
  c.高可容错性,我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
  d.高数据一致性,即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照
  

  3、MooseFS的优点
  a.轻量、易配置、易维护
  b.易于扩展,支持在线扩容。不影响业务
  c.开发活跃,社区也活跃,资料丰富
  d.以文件系统方式展示:如存图片,虽然存储在chunkserver上的数据是二进制文件,但是在挂载mfs的client端仍旧以图片文件形式展示,便于数据备份
  e.硬盘利用率高。测试需要较大磁盘空间
  f.可设置删除的空间回收时间,避免误删除文件丢失就恢复不及时影响业务
  g.系统负载,即数据读写分配到所有的服务器上
  h.可设置文件备份的副本数量,一般建议3份,未来硬盘容量也要是存储单份的容量的三倍
  4、MooseFS的缺点
  a.master目前是单点(虽然会把数据信息同步到备份服务器,但是恢复需要时间,因此,会影响上线,针对这个问题,可以通过drbd+heartbeat方案或者drbd+inotify方案解决),master和backup之间的同步,类似mysql的主从不同。但是现在master的单点已经修复了
  b.master服务器对主机的内存要求略高
  c.默认metalogger复制元数据时间较长(可调整)
  

  5、MooseFS系统应用场所
  1.大规模高并发的线上数据存储及访问(小文件,大文件都适合)
  2.大规模的数据处理,如日志分析,小文件强调性能不用HDFS。
  有大多的应用不适合分布式文件系统,不建议大家为了使用而使用。
  尽量在前端加cache应用,而不是一味的 扩充文件系统
  

  6、MooseFS结构及原理
  MFS组件
  

  管理服务器managing server简称(master):
  这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的metadata信息,metadate(元数据)信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等,很类似lvs负载均衡的主服务器,不同的是lvs仅仅根据算法分发请求,而master根据内存里的metadata信息来分发请求,内存的信息会被实时写入到磁盘,这个master只能由一台处于激活的状态
  

  云数据备份服务器Metadata backup servers(简称metalogger或backup):
  这个组件的作用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog_ml.*.mfs。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作。这类似mysql主从同步,只不过它不像mysql从库那样在本地应用数据,而只是接受主服务器上文写入时记录的文件相关的metadata信息,这个backup,可以有一台或多台,它很类似lvs从负载均衡服务器
  

  数据存储服务器组data servers(chunk servers)简称data:
  这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份。这有点类似lvs集群的RS节点
  

  客户机服务器组(client servers)简称client:
  这个组件就是挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的metadata信息,然后根据得到的metadata信息,访问数据服务器读取或写入文件实体,mfs客户端通过fuse mechanism实现挂载mfs文件系统的,因此,只有系统支持fuse,就可以作为客户端访问mfs整个文件系统,所谓的客户端并不是网站的用户,而是前端访问文件系统的应用服务器,如web
  

  ========================================
  管理服务器——MASTER SERVER
  元数据日志服务器——Metalogger
  数据存储服务器——CHUNK SERVER
  客户端——CLIENT
  

  4种角色作用如下:
  

  管理服务器:有时也称为元数据服务器,负责管理各个数据存储服务器,调度文件读写,回收文件空间以及恢复多节点拷贝。
  

  元数据日志服务器:负责备份管理服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在管理服务器出问题时接替其进行工作。元数据日志服务器是mfsl.6以后版本新增的服务,可以把元数据日志保留在管理服务器中,也可以单独存储在一台服务器中。为保证数据的安全性和可靠性,建议单独用一台服务器来存放元  数据日志。需要注意的是,元数据日志守护进程跟管理服务器在同一个服务器上,备份元数据日志服务器作为它的客户端,从管理服务器取得日志文件进行备份。
  

  数据存储服务器是真正存储用户数据的服务器。在存储文件时,首先把文件分成块,然后将这些块在数据存储服务器之间互相复制。同时,数据存储服务器还负责连接管理服务器,听从管理服务器调度,并为客户提供数据传输。数据存储服务器可以有多个,并且数量越多,可靠性越高,MFS可用的磁盘空间也越大。
  

  客户端通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,使共享的文件系统和使用本地Linux文件系统的效果看起来是一样的。
  ========================================
  

  7、MooseFS版本选择
  a、高稳定性要求
  根据前面mfs的原理流程,我们知道管理服务器(master)是MooseFS的最主要的角色,而且是单点,因此master服务器的配置应该尽可能的稳定,例如:
  双电源分别接A、B两路电,机柜的的,尽量不要放在一个机柜上。
     多块磁盘使用raid1或raid10,进行冗余,也可选择raid5
  
  b、资源性要求
  ====================================
  MooseFS ,master设备配置建议
  内存
  对于master服务器来说,资源型要求就是内存大小,为了整个系统访问更快,mfs会把所以访问的元数据metadada信息放在内存中提供用户访问,因此,当文件数量增加时,内存使用量就会增加,根据官方说法,处理一百万个文件chunkserver,大概需要300M的内存空间
  据此,推算如果未来要出来1个亿的文件chunkserver,大概需要30G内存空间
  硬盘:
  硬盘驱动器所需的大小,取决于所用的文件和数据块的数目(主元数据文件)上的文件(源数据更改日志)作出的操作上的数量,例如20G的空间,用于存储信息2500万的文件变更记录保存长达50小时
  ====================================
  MooseFS backup设备配置建议
  MooseFS Metalogger只是收集MooseFS主服务器的源数据(文件更改的信息的变化)备份,因此对硬件的要求不应该高于主服务器的配置,从硬盘上需要大约和主服务器相同的磁盘空间。
  如果确定在主服务器失败后,要启动Metalogger顶替主服务器的话,那么Metalogger服务器至少应该有相同数量的内存和硬盘作为主要主服务器。在生产中我们可以用其他的,如drbd或inotify的同步工具来替代器内部log同步
  ====================================
  MooseFS dataserver 设备配置建议
  MooseFS dataserver是存储数据的真正载体,因此,硬盘的性能较为关键,对于普通的业务,可以选择多块raid5,也可以选择raid10或raid0,建议所以的dataserver的硬盘大小一致比较好,虽然dataserver可以和其他业务公用同一台server,但不建议这样混搭
  ====================================
  虚拟环境搭建准备重点
  内存可以给256M。如果可以建议给512
  可以增大磁盘分区设备,也可以不增加,我们每个服务器增加一个单独的2G大小的虚拟磁盘,用于数据存储,其中,主服务器和备份服务器虚拟磁盘用于drbd及inotify数据同步
  mfs数据服务器的存储地点,可以是单独的服务器、磁盘、分区、目录。至少建议以分区为单位
  操作系统的硬盘空间10G,单独磁盘2G,数据存储
  

  操作系统:centos6.5 支持fuse
  环境准备
  两块硬盘  10G + 2G
  服务
  mfs master  eth0 10.0.0.3 mfs主服务器
  mfs backup eth0 10.0.0.4 mfs备份服务器
  data server01 eth0 10.0.0.5mfs数据存放服务器
  data server01 eth0 10.0.0.6mfs数据存放服务器
  data server01 eth0 10.0.0.7mfs数据存放服务器
  mfs clienteth010.0.0.8mfs客户端服务器
  mfs vip  eth0:0 10.0.0.100VIP初始化绑定在mfs主服务器上面
  资源不够,可以把master 和data1、backup和data2.client和data3.绑定在一起
  

软件下载mfs
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-1.tar.gz#更改yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum install tree -y
grep keepcache /etc/yum.conf
sed -i 's/keepcache=0/keepcache=1/g' /etc/yum.conf
grep keepcache /etc/yum.conf
#关闭selinux:
setenforce 0         #临时生效
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config  #永久生效
##关闭防火墙
/etc/init.d/iptables stop
chkconfig iptables off
chkconfig --list iptables
#时间同步
/usr/sbin/ntpdate pool.ntp.org
echo '#time sync by lvnian at 2010-2-1'>>/var/spool/cron/root
echo '*/10 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1'>>/var/spool/cron/root
crontab -l
#设置hosts文件
cp /etc/hosts /etc/hosts.bak
sed -i '$a 10.0.0.3 MASTER' /etc/hosts
sed -i '$a 10.0.0.4 BCAKUP' /etc/hosts
sed -i '$a 10.0.0.5 DATA1' /etc/hosts
sed -i '$a 10.0.0.6 DATA2' /etc/hosts
sed -i '$a 10.0.0.7 DATA3' /etc/hosts
sed -i '$a 10.0.0.8 CLIENT' /etc/hosts
sed -i '$a 10.0.0.100 mfsmaster.etiantian.org' /etc/hosts
cat /etc/hosts
上面的五步在每台服务器都要操作
====================================================================  

  #修改主机名(根据不同的服务器,修改不同的主机名)
hostname MASTER
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=MASTER' /etc/sysconfig/network
logout
########################################################
hostname BCAKUP
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=BCAKUP' /etc/sysconfig/network
logout
########################################################
hostname DATA1
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=DATA1' /etc/sysconfig/network
logout
########################################################
hostname DATA2
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=DATA2' /etc/sysconfig/network
logout
########################################################
hostname DATA3
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=DATA3' /etc/sysconfig/network
logout
########################################################
hostname CLIENT
cp /etc/sysconfig/network /etc/sysconfig/network.bak
sed -i -e '/HOSTNAME=/d' -e '1aHOSTNAME=CLIENT' /etc/sysconfig/network
logout
########################################################  

  ##VIP的配置
  #在工作中,可以用keepalived或者heartbeat启用vip。在这里。我先用ifconfig在master服务器中配置。
ifconfig eth0:100 10.0.0.100/24 up
ifconfig eth0:100
------------------------------------------------
[root@MASTER ~]# ifconfig eth0:100 10.0.0.100/24 up
[root@MASTER ~]# ifconfig eth0:100
eth0:100  Link encap:Ethernet  HWaddr 00:0C:29:A7:2F:91  
          inet addr:10.0.0.100  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
[root@MASTER ~]#
------------------------------------------------
到这来部署前的准备工作才算完成
========================================================  

  

  ###开始部署
  

  1、安装主服务器mfs master
  当我们安装主服务器mfs master时,由于我们的目的是安装主服务器,因此在配置的过程中(./configure),可以选择加参数取消安装chunk server(使用--disable-mfschunkserver)以及mfs 客户端(使用--disable-mfsmount)的参数,当然了,我们也可以不加相关的disable参数,安装了不去启动也可以的。为了统一所以服务器的安装步骤,减低安装的复杂性,我们统一了一套安装步骤,适合master backup data服务器,但不适合client服务器。安装主控服务器master的具体步骤如下:
mkdir -p /home/lvnian/tools && cd /home/lvnian/tools
groupadd mfs
useradd -g mfs mfs -s /sbin/nologin
rz -y
yum install zlib-devel -y
#yum install fuse*        #如果不作为mfs的客户端,可以不用这个参数,只是mfs客户端需要fuse模块,其他的都不需要
tar xf mfs-1.6.27-1.tar.gz
cd mfs-1.6.27
./configure --prefix=/application/mfs-1.6.27  --with-default-user=mfs \
--with-default-group=mfs
make && make install
ln -s /application/mfs-1.6.27 /application/mfs
ll /application/
====================================================
安装成功最后的页面:
make[2]: Leaving directory `/home/lvnian/tools/mfs-1.6.27'
make[1]: Leaving directory `/home/lvnian/tools/mfs-1.6.27'
[root@MASTER mfs-1.6.27]# ln -s /application/mfs-1.6.27 /application/mfs
[root@MASTER mfs-1.6.27]# ll /application/
total 4
lrwxrwxrwx. 1 root root   23 Nov 11 10:13 mfs -> /application/mfs-1.6.27
drwxr-xr-x. 6 root root 4096 Nov 11 10:12 mfs-1.6.27
[root@MASTER mfs-1.6.27]#
[root@MASTER mfs-1.6.27]# ll /application/mfs/
total 16
drwxr-xr-x. 3 root root 4096 Nov 11 10:12 etc
drwxr-xr-x. 2 root root 4096 Nov 11 10:12 sbin
drwxr-xr-x. 4 root root 4096 Nov 11 10:12 share
drwxr-xr-x. 3 root root 4096 Nov 11 10:12 var
[root@MASTER mfs-1.6.27]#
====================================================
configure出现下面问题:
checking for FUSE... no
******************************** mfsmount disabled ********************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************
checking for fuse_version in -lfuse... no
checking for zlibVersion in -lz... no
configure: error: zlib development library not found
[root@MASTER mfs-1.6.27]#
问题解决:
yum install zlib-devel -y
====================================================  编译参数说明:
====================================================
选项 作用
--disable-mfsmaster 不创建成管理服务器(用于纯节点的安装)
--disable-mfschunkserver不创建成数据存储服务器
--disable-mfsmount 不创建mfsmount和mfstools(如果用开发包安装,会默认创建这两者)
--enable-mfsmount 确定安装mfsmount和mfstools
--prefix=DIRECTORY 锁定安装目录(默认是/usr/local)
--sysconfdir=DIRECTORY 选择配置文件目录(默认是${prefix}/etc)
--localstatedir=DIRECTORY选择变量数据目录(默认是${prefix}/var,MFS元数据被存储在MFS的子目录下,默认是${prefix}/var/mfs)
--with-default-user 运行守护进程的用户,如果配置文件中没有设定用户,默认为nobody的用户
--with-default-group=GROUP运行守护进程的用户组,如果配置文件中没有设定用户组,默认为nobody的用户组
====================================================  

  

  mfs目录结构说明:
[root@MASTER mfs-1.6.27]# ll /application/mfs/
total 16
drwxr-xr-x. 3 root root 4096 Nov 11 10:12 etc       ##这是mfs的配置文件目录
drwxr-xr-x. 2 root root 4096 Nov 11 10:12 sbin      ##这是mfs的命令路径,如果你还有bin目录,证明你激活了mfs 客户端的功能。
drwxr-xr-x. 4 root root 4096 Nov 11 10:12 share      ##mfs的帮助文件目录
drwxr-xr-x. 3 root root 4096 Nov 11 10:12 var        ##mfs数据及日志目录,如:metadata的数据
[root@MASTER mfs-1.6.27]#
提示:
etc和var需要备份
你可以用tree具体看看mfs下都有什么
[root@MASTER mfs]# ll /application/mfs/etc/mfs
total 28
-rw-r--r-- 1 root root  572 Sep  9 11:53 mfschunkserver.cfg.dist
-rw-r--r-- 1 root root 4060 Sep  9 11:53 mfsexports.cfg.dist  
-rw-r--r-- 1 root root   57 Sep  9 11:53 mfshdd.cfg.dist
-rw-r--r-- 1 root root 1047 Sep  9 11:53 mfsmaster.cfg.dist    ##主配置文件,如果要使用的时候,把.dist去掉即可
-rw-r--r-- 1 root root  449 Sep  9 11:53 mfsmetalogger.cfg.dist
-rw-r--r-- 1 root root  404 Sep  9 11:53 mfsmount.cfg.dist
-rw-r--r-- 1 root root 1123 Sep  9 11:53 mfstopology.cfg.dist
[root@MASTER mfs]#  

  

  

  配置主服务器mfs master
  主服务器mfs master的配置文件位于安装目录/application/mfs下的etc目录。所有的模板文件都是以dist为扩展名结尾,如果我们需要使用则把.dist取得即可。
  

  ###启用master的两个配置文件
  和master相关的配置文件有俩。分别是mfsexports.cfg和mfsmaster.cfg。故启用
cd /application/mfs/etc/mfs
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg  ###主配置文件 mfsmaster 暂时不需要改
  mfsmaster.cfg的配置文件继续参考《mfsmaster.cfg配置文件解析》
  ###配置 mfsexports
cat >mfsexports.cfglvnian.txt
[root@CLIENT mfs]# for n in `seq 10 `;do cp /bin/cat $n ;done
[root@CLIENT mfs]# ls
1  10  2  3  4  5  6  7  8  9  lvnian.txt
[root@CLIENT mfs]#
============================================================
[root@CLIENT mfs]
分别看maste端和backup的changelog.0.mfs 在添加内容前后的变化
cat  /application/mfs/var/mfs/changelog.0.mfs
cat /application/mfs/var/mfs/changelog_ml.0.mfs
同时分别看三个data的下面内容在添加内容前后的变化
find /mfsdata/ -type f  ####这样就完成部
  日后用的时候就器多个客户端,都挂载好,需要写数据,读数据就往这里读和写就可以了
  

  

  

  

  





运维网声明 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-670292-1-1.html 上篇帖子: 试用分布式存储MooseFS 下篇帖子: moosefs2.0-安装(3)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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