第1章 介绍

写在前面,自己的理解。

对比nfs文件共享系统,其目的都是一样的。nfs的运行过程是客户端先向服务端的rpc服务请求nfs的端口号,然后客户端再根据端口号找到对应的nfs服务,进行读写。

而mfs将nfs服务端的结构再进行细分,mfs的主服务端(master server)仅仅充当一个类似rpcbind的作用,而真正的数据存放在别的主机上(chunk server),客户端向mfs主服务端请求存储位置,主服务端回复客户端数据存放的位置,客户端根据返回的位置寻找对应主机进行读写。

另mfs自带高可用,它还有一个元数据备份服务器(metalogger Server),当主服务端(master server)产生问题时,它可以暂时顶替。

1.1介绍

MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。从其对文件操作的情况看,MooseFS就相当于一个类UNIX文件系统:

1、mfs是一个分层的目录树结构

2、存储支持POSIX标准的文件属性(权限,最后访问和修改时间)

3、支持特殊的文件,如:块设备,字符设备,管道和套接字,链接文件(符号链接和硬链接)

4、支持基于IP地址和密码的方式访问文件系统

1.2特性

1、高可靠性,每一份数据可以设置多个副本(多份数据),并可以存储在不同的主机上

2、高可扩展性,可以很轻松的通过增加主机磁盘容量或增加主机数量来动态扩展整个文件系统的存储量

3、高可容错性,我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依然存放于主机的回收站中,以备误删恢复数据

4、高数据一致性,即便文件被写入/访问时,我们依然可以完成对文件的一致性快照

1.3优缺点

优点:

1、由于MFS是基于GPL发布的,因此完全免费,并且开发和社区都很活跃,资料也非常丰富

2、轻量、易部署、易配置、易维护

3、通用文件系统,不需要修改上层应用就可以使用(那些需要专门 API 的DFS确实有点麻烦)
       4、扩容成本低、支持在线扩容,不影响业务,体系架构可伸缩性极强(官方的case可以扩到70台了!)
       5、体系架构高可用,所有组件无单点故障
       6、文件对象高可用,可设置任意的文件冗余程度(提供比 Raid 10 更高的冗余级别)

7、提供系统负载,将数据读写分配到所有的服务器上,加速读写性能

8、提供诸多高级特性,比如类似Windows的回收站功能、类似JAVA语言的GC(垃圾回收)、快照功能等

9、MooseFS 是 Google Filesystem 的一个 c 实现

10、自带 Web Gui 的监控接口

11、提高随机读或写效率和海量小文件的读写效率(有待进一步证明)

缺点:

1、Master Server 本身的性能瓶颈。MFS的主备架构情况类似于MySQL的主从复制,从可以扩展,主却不容易扩展。短期的对策就是按照业务来做切分。

2、随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大(MFS把文件系统的结构缓存到 Maset Server 的内存中)。根据官方提供的数据,8g对应2500kw的文件数,2亿文件就得64GB内存。短期的对策也是按照业务来做切分。

3、Master server的单点解决方案的健壮性。目前官方自带的是把数据信息从MasterServer同步到MetaloggerServer上,MasterServer一旦出问题MetaloggerServer可以恢复升级为MasterServer,但是需要恢复时间。目前,也可以通过第三方的高可用方案(heartbeat+drbd+moosefs)来解决 Master Server 的单点问题。

4、Metalogger Server 复制元数据的间隔时间较长(可调整)

1.4应用场景

谈及MooseFS的应用场景,其实就是去谈分布式文件系统的应用场景。

1、大规模高并发的数据存储及访问(小文件、大文件),TFS适合小文件(<1M)

2、大规模的数据处理,如日志分析

1.5架构图

整个架构中,主要有四个组件,分别是管理服务器 Master Server、备份服务器Metalogger Server、数据存储服务器 Chunk Server 和 客户端 Client。

管理服务器 Master Server负责所有数据存储服务器的数据存储管理,响应客户端文件的读写请求,收回文件空间以及恢复文件,多存储节点之间的文件复制;

元数据日志服务器 Metalogger Server,对 Master Server  服务器的变化日志文件进行备份,changelog_ml.*.mfs 是备份文件的类型,当 Master Server 出现故障时替换其继续工作,避免 Master Server 的单点故障导致分布式文件系统的不能正常运行;

数据存储服务器chunkserver,服从 Master Server 的安排,定期向 Master Server 发送自己的状态信息,除此之外,还能向客户提供数据存储空间,能够向客户传输数据;

客户端 Client,通过 FUSE 内核接口挂载到数据存储服务器上,在客户端看来使用数据存储服务器上的文件系统和使用本地Unix文件系统是一样的。

组件

作用

管理服务器

Master Server

这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中的每个数据文件的metadata信息,metadata(元数据)信息包括文件(也可以是目录、socket、管道、设备等)的大小、属性、文件位置路径等,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝。很类似lvs负载均衡主服务器,不同的是lvs仅仅根据算法分发请求,而master根据内存里的metadata信息来分发请求。这个master只能有一台处于激活工作的状态。

元数据备份服务器

metalogger  Server

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

数据存储服务器组

Chunk Servers

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

客户机服务器组

Client

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

1.6读写原理

1.6.1读的原理

三角形为master server  矩形是client 圆形是chunk server

①客户端向master server发送请求

②master server告诉客户端数据存放的位置

③客户端向给出的位置即chunkserver 请求数据

④chunk server返回数据

1.6.2写的流程

①客户端向master server发送请求写入数据

②主服务器master查询缓存记录,如果是新文件,则会联系后面的数据服务器创建对应的chunk对象准备存放文件。

③主服务器master把文件实体的位置等相关信息发给client客户端。

④Client客户端访问对应的数据服务器写数据

⑤多个chunk server同步用户写入的数据

⑥同步成功

⑦chunk server返回客户端写入成功的信号

⑧Client客户端回报给主服务器master写入结束

1.7生产环境各组件硬件要求

1.7.1Master Server

由于 Master Server 控制着整个 MooseFS 中的各个组件,并且负责对外提供服务,因此我们一定需要保证 MasterServer 处于非常稳定的状态。比如,针对 Master Server采用双电源双路配置,多块磁盘使用RAID1或RAID10,进行冗余。

前面也提到,Master Server 将所有访问的元数据信息都放在内存当中,提供用户访问。因此,当文件数量增加的时候,内存使用量也会增加。根据官方的数据,100万个文件chunk信息,大概需要300M的内存空间来进行。对于磁盘来讲,Master Server 对磁盘的使用量不是很大,这个取决于所用的文件和chunk块的数目(记录在主元数据文件)以及对文件作出操作的数量(记录在元数据更改日志),一般情况下 20G 可以用来存储信息 2500 万个文件变更记录长达50小时。由此看来,作为Master Server 内存量够大才是重中之重。

总结:双电源双路,raid1或raid10,大内存

1.7.2Metalogger Server

由于需要做管理服务器的高可用备份,所以配置与Master Server一样即可

1.7.3Chunk Server

作为真正存储数据的载体,重点保证磁盘性能即可。需要注意尽量保持个主机之间磁盘大小一致

第2章 mfs部署

2.1主机规划

组件

主机名

IP

管理服务器

Master Server

master

10.0.0.103

元数据备份服务器  Metalogger Server

metalogger

10.0.0.104

数据存储服务器1

Chunk Servers

chunk1

10.0.0.105

数据存储服务器2

Chunk Servers

chunk2

10.0.0.106

客户机服务器

Client

web

10.0.0.107

2.2更新yum源及安装

向包管理器添加相应的密钥(以下两步在所有主机执行)

[root@master ~]# curl"http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS">/etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
添加yum源
[root@master ~]# curl"http://ppa.moosefs.com/MooseFS-3-el6.repo"> /etc/yum.repos.d/MooseFS.repo
master端安装
[root@master ~]# yum install -y moosefs-mastermoosefs-cli moosefs-cgi moosefs-cgiserv
chunk端安装
[root@chunk01 ~]# yum install -ymoosefs-chunkserver
metalogger端安装
[root@metalogger ~]# yum install moosefs-metalogger-y
客户端安装
[root@web ~]# yum install moosefs-client -y

2.3配置

2.3.1配置master端

[root@master mfs]# ll /etc/mfs
total 44
-rw-r--r-- 1 root root 4102 Oct 10 18:45mfsexports.cfg
-rw-r--r-- 1 root root 4057 Aug  2 19:43 mfsexports.cfg.sample
-rw-r--r-- 1 root root 8521 Oct 10 17:49mfsmaster.cfg
-rw-r--r-- 1 root root 8521 Aug  2 19:43 mfsmaster.cfg.sample
-rw-r--r-- 1 root root 1052 Oct 10 17:49mfstopology.cfg
-rw-r--r-- 1 root root 1052 Aug  2 19:43 mfstopology.cfg.sample

这是mfs的三个配置文件

mfsmaster.cfg  :主文件

mfsexports.cfg  :mfs挂载权限设置,参考NFS文件系统中的exports.cfg

mfstopology.cfg   :机架感知

[root@master mfs]# vim mfsexports.cfg(把前面两行没注释的删掉)
10.0.0.0/24       /    rw,alldirs,maproot=0:0  #类似nfs的export配置文件
[root@master mfs]# /etc/init.d/moosefs-master start

2.3.2配置chunk server端

[root@chunk01 ~]# sed -i '71a MASTER_HOST = 10.0.0.103'/etc/mfs/mfschunkserver.cfg
[root@chunk01 ~]# echo "/tmp" >/etc/mfs/mfshdd.cfg  #将/tmp目录作为存放数据的目录
[root@chunk01 ~]# /etc/init.d/moosefs-chunkserverstart这里看一下tmp目录,由于是块状文件,所以数据在chunk端是不可读的。
[root@chunk02 ~]# ls /tmp/
00  08  10  18  20  28  30  38  40  48  50  58  60  68  70  78  80  88  90  98  A0  A8  B0  B8  C0  C8  D0  D8  E0  E8  F0  F8
01  09  11  19  21  29  31  39  41  49  51  59  61  69  71  79  81  89  91  99  A1  A9  B1  B9  C1  C9  D1  D9  E1  E9  F1  F9
02  0A  12  1A  22  2A  32  3A  42  4A  52  5A  62  6A  72  7A  82  8A  92  9A  A2  AA  B2  BA  C2  CA  D2  DA  E2  EA  F2  FA
03  0B  13  1B  23  2B  33  3B  43  4B  53  5B  63  6B  73  7B  83  8B  93  9B  A3  AB  B3  BB  C3  CB  D3  DB  E3  EB  F3  FB
04  0C  14  1C  24  2C  34  3C  44  4C  54  5C  64  6C  74  7C  84  8C  94  9C  A4  AC  B4  BC  C4  CC  D4  DC  E4  EC  F4  FC
05  0D  15  1D  25  2D  35  3D  45  4D  55  5D  65  6D  75  7D  85  8D  95  9D  A5  AD  B5  BD  C5  CD  D5  DD  E5  ED  F5  FD
06  0E  16  1E  26  2E  36  3E  46  4E  56  5E  66  6E  76  7E  86  8E  96  9E  A6  AE  B6  BE  C6  CE  D6  DE  E6  EE  F6  FE
07  0F  17  1F  27  2F  37  3F  47  4F  57  5F  67  6F  77  7F  87  8F  97  9F  A7  AF  B7  BF  C7  CF  D7  DF  E7  EF  F7  FF

2.3.3配置metalogger端

[root@metalogger ~]# vim /etc/mfs/mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 1  #每隔1小时同步一下日志
MASTER_HOST = 10.0.0.103
[root@metalogger ~]# /etc/init.d/moosefs-metaloggerstart

2.3.4客户端配置

[root@web ~]# mfsmount /mnt -H 10.0.0.103
[root@web ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.5G  6.9G 18% /
tmpfs           238M     0  238M  0% /dev/shm
/dev/sda1       190M   40M  141M 22% /boot
10.0.0.103:9421  17G  3.5G   14G 21% /mnt

测试一下

[root@web ~]# dd if=/dev/zero of=/mnt/1.txt bs=1M count=10去chunk01端查看,
[root@chunk01 ~]# tree /tmp/
/tmp/
├── 00
│   └── chunk_0000000000000001_00000001.mfs
├── 01
├── 02
├── 03同时chunk02 也同步了该数据
[root@chunk02 ~]# tree /tmp/
/tmp/
├── 00
│   └── chunk_0000000000000001_00000001.mfs
├── 01
├── 02
├── 03随后我又找了一个客户端 也挂载到/mnt下  也能发现1.txt这个文件
[root@m01 ~]# ll /mnt/
total 10240
-rw-r--r-- 1 root root 10485760 Oct 10 19:51 1.txt

其实搭建起来还是很简单的,重点在于理解mfs服务的原理。

有关原理部分借鉴多个博客,如有侵权请联系删除

转载于:https://blog.51cto.com/lijiahao/1971278

分布式存储---moosefs部署相关推荐

  1. Glusterfs 分布式存储安装部署

    Glusterfs 分布式存储部署 是存储当中可以选择的一种 现在很多虚拟化 云计算都在用软件存储 例如 ceph Glusterfs 等等 今天我们部署一下Glusterfs环境 GlusterFs ...

  2. Kubernetes中分布式存储Rook-Ceph部署快速演练

    最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些.项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整 ...

  3. MFS分布式存储安装部署

    分布式 1.简介 分布式文件系统(Distributed File System) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.简单来说就是把一些分散的(分 ...

  4. 大数据分布式存储的部署模式:分离式or超融合

    数据中心内部系统的核心要求是"稳定可靠",一是指系统在运行过程中有能力提供连续可靠的服务,长时间无故障运行:二是指当故障发生之后,有能力快速定位,及时排查,故障范围不蔓延. 分离式 ...

  5. 分布式存储MooseFS的搭建

    mooseFS是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修 ...

  6. 分布式文件系统MooseFs部署(二)

    metalogger的安装 安装步骤和master一样 创建用户 Useradd  -M –s /sbin/nologin mfs 解压软件 Tar zxf mfs-1.6.20-2.tar.gz 进 ...

  7. Linux集群 分布式存储-MFS部署

    环境准备: 一台mfsmaster192.168.150.128, 一台mfsmetdate192.168.150.129, 两台mfschunkserver 192.168.150.130, 192 ...

  8. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例

    在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...

  9. 某城商行超融合建设:从方案设计到融合部署

     [摘要]本文主要介绍了某城商行基于华为FusionCompute虚拟化+华为FusionStorage分布式存储融合部署的实施方案,其中涵盖了当前现状背景与建设的必要性.FusionStorage存 ...

  10. 分布式ceph存储部署

    文章目录 分布式存储ceph部署 分布式存储ceph部署准备: 1. 安装完操作系统 2. 配置完硬件 项目:分布式存储ceph部署 1.环境准备(一键部署见下文) 2.每台机器均关闭**selinu ...

最新文章

  1. 爬虫基础(一)之概念、作用、分类和流程
  2. [flite源码分析一]常用数据结构cst_val
  3. 网络推广关键词布局仍需网络推广专员时刻“运筹帷幄”
  4. SpringBoot连接Mysql数据库遇到Unable to load authentication plugin ‘caching_sha2_password解决方案
  5. (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功
  6. linux下文件的创建时间、访问时间、修改时间和改变时间
  7. ie浏览器不支持多行隐藏显示省略号
  8. 16.对极几何——极线约束,收敛相机,平行图像平面,两个立体对 测验_2
  9. 创建struct fib_info函数分析
  10. 如何调用华为云api_如何部署模型到ModelArts并远程调用 (五):如何调用在线API服务...
  11. python编程(webpy + gunicorn + nginx部署)
  12. session对象和applicatione对象
  13. STVD ERROR:misplaced local declaration
  14. 7. Nginx 预定义变量
  15. JS前端实现点击按钮生成并下载txt文件
  16. 前后端开发接口文档模板(登录、注册、项目发布与需求发布)
  17. 曼联队选择Tezos作为官方区块链和训练工具包合作伙伴
  18. Timing Check -- signoff corner/view
  19. Bash Shellshock(Bash远程代码执行)漏洞分析及利用思路
  20. 对中国国家气象局进行api数据分析

热门文章

  1. okhttp3.4.1+retrofit2.1.0实现离线缓存
  2. 你应该知道的Linux历史
  3. Java Android客户端开发
  4. Sinevibes Plugins Bundle for Mac(Sinevibes合成器合集)
  5. MAC系统如何连接Windows共享文件?MAC系统连接Win共享文件的方法
  6. iZotope系列音频软件如何卸载操作指南
  7. 误删D盘数据怎么办?推荐使用数据恢复软件EasyRecovery
  8. java 伪造http请求ip地址
  9. for循环,while循环,break跳出循环,continue结束本次循环,exit退出整个脚本
  10. ABAP:SMARTFORMS 之一:数据从程序中传送到Form中