zoukankan      html  css  js  c++  java
  • 分布式文件系统之MooseFS----介绍

           前一段公司因为nfs存储的问题,做了一段时间的调研。最终虽然有nfs高可用方案(nfs+drbd+heartbeat),但是在nfs故障切换的时候会出现 2 分钟左右的延时。这样子。。。就开始了对分布式文件系统的调研选型。也就是这样,有了本系列的博文。

           针对 MooseFS 预计会有 3 篇博文,分为介绍、部署、深入。本篇博文主要介绍 MooseFS 。

    一、简述

    1、介绍

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

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

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

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

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

    2、特性

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

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

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

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

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

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

    4、应用场景

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

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

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

    5、使用现状

           针对 MooseFS 在全球的使用情况,我在国内的一篇论文上挖了一张图。图片如下,在该图中标记为驯鹿的就是 Moosefs 的使用者所在区域。从图中可以看出,它在中国、欧洲以及北美都拥有了大量的用户,正是有了广泛的用户基础,才能使得mfs特性能够快速的迭代和进步。

    wKioL1S-G8mi7IpqAALojpL2UZ0261.jpg

    MooseFS官方的使用情况链接:http://www.moosefs.org/who-is-using-moosefs.html

    二、组成

    1、架构图

    wKioL1SulSPRwhESAAInaVmZaEE454.jpg

           整个架构中,主要有四个组件,分别是管理服务器 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文件系统是一样的。

           下面再针对这4个组件进行更详细的介绍!

    2、四个组件

    组件名称 组件作用

    管理服务器

    Managing Server

    简称Master Server 

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

    元数据备份服务器

    Metadata backup servers

    简称metalogger Server

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

    数据存储服务器组

    Data Servers

    简称Chunk Servers

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

    客户机服务器组

    Client

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

    三、原理

        MooseFS是一个文件系统,因此其最主要的工作就是文件的读写流程,即 MooseFS的主要的两大工作过程。

    1、MooseFS的读文件流程:

           首先要了解的是它的读过程。如下图所示:

    wKiom1SulMLzDCnlAAEwaJH26ME157.jpg

           图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。整个读过程有以下四个步骤:

            1、首先client客户端访问主服务器master,获取文件实体的位置等相关信息

            2、主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端

            3、Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者 chunk servers)

            4、存储实体数据的服务器(data servers或者 chunk servers)把对应的数据返回给Client客户端

            从上图,我们还可以看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的作用,而数据的返回时由不同的数据服务器直接返回给请求的客户端,这样的模式可以极大的减轻主服务器的系统及网络瓶颈,增加了整个系统的吞吐,很像LVS的DR模式的负载均衡的分发和数据传输的情况。

    2、MooseFS的写文件流程:

               相对于读文件,MooseFS的写文件流程较为复杂,如图所示:

    wKioL1SulZrAKHD6AAGZ1raekhw377.jpg

             图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。

             整个写过程要分为下面八个步骤:

            1、Client客户端访问主服务器master,请求写入数据

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

            3、数据服务器返回创建对应的chunk对象成功给主服务器

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

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

            6、数据服务器之间进行数据同步,互相确认成功

            7、数据服务器返回成功写入信息给Client客户端

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


    OK!

    以上就是 MooseFS 的简单介绍,希望能对51博友有所帮助!

     

    本文出自 “Not Only Linux” 博客,请务必保留此出处http://nolinux.blog.51cto.com/4824967/1600890

           上篇博文对 MooseFS 的结构,组件和特性做了相关介绍。那么,本篇博文自然就是如何去部署实施 MooseFS 这样一个分布式文件系统喽。

           废话不多说,下面就是整个部署流程!

    1、架构规划

           由于在整个MooseFS的架构中,默认是一台 Master,一台 Metalogger ,三台 Chunk Servers。因此,在本次实施规划当中,我们就使用5台虚拟机来进行整个架构的实施部署。

           其中 IP地址 的规划情况如下:

    元数据服务器     mfs-master-1             172.16.100.2
    备份服务器       mfs-metalogger           172.16.100.4
    数据存储服务器   mfs-chunkserver-1        172.16.100.5
    数据存储服务器   mfs-chunkserver-2        172.16.100.6
    数据存储服务器   mfs-chunkserver-3        172.16.100.7

           由于这次测试空闲服务器不够,因此采用了虚拟机进行测试(好蛋疼)。但是在实际生产环境中,针对每个组件的服务器选型问题,还是必须要注意的。这里提供如下几条建议:

    1、Master Server

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

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

    2、Metalogger Server

           在 MooseFS 的设计中,虽然 Metalogger Server 只是用来收集 MooseFS 主服务器的元数据(文件更改的信息的变化)的备份,对硬件的要求不应该高于主服务器的备份。但是需要注意的是,如果在Master Server没有做高可用的情况下,主服务器宕机之后,我们是需要启用Metalogger Server 来顶替主服务器的。因此,从这方面考虑,Metalogger Server 至少也是和 Master Server 的配置相同的,这点切记!

    3、Chunk Server

           针对 Chunk Server,它是真正存储数据的载体。因此,我们对它的要求就简单粗暴了很多,只要保障硬盘的性能即可。如果是普通的业务,可以选择多块盘做RAID5即可,当然RAID0或RAID10都是可以的。

           需要注意的是,由于 MooseFS 的默认负载均衡算法的问题,我建议所有 Chunk Server 的磁盘大小保持一致。这样子,我们才能保证 MooseFS 在使用过程中,各个 Chunk 节点的数据使用量是大致一致的。否则,磁盘容量大的 Chunk Server 使用量会加大,而磁盘容量小的 Chunk Server 的使用量会变小。切记,切记!

           当然,如果公司员工有能力的话,也可以对 MooseFS 的负载均衡算法中每次对carry 变量的增加算法这一部分进行改进,来避免默认算法的缺点,使存储数据能够均衡分布在各个 Chunk Server 上。

    2、部署 Master Server

    1、编译参数介绍

           我们已经知道 MooseFS是由 4 个组件组成的,但是 MooseFS 提供的安装包却只有一个,因此针对每个组件的不同设置,都需要我们在编译之前的配置阶段进行配置,比如安装 Master Server 的时候,我们需要使用 --disable-mfschunkserver和--disable-mfsmount参数;安装 Chunk Server 的时候,我们需要使用 --disable-mfsmaster 参数;安装 Client 时,我们需要使用--disable-mfsmaster和--disable-mfschunkserver参数;如果是安装 Metalogger Server ,我们使用和安装 Master Server时的参数一样即可。

           下面,在部署 Master Server 之前,在详细介绍下 MooseFS 安装包的几个关键的配置参数:

    --disable-mfsmaster                  # 不创建成管理服务器(用于纯节点的安装)
    --disable-mfschunkserver             # 不创建成数据存储chunkserver服务器 
    --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                 # 运行守护进程的用户组,如果配置文件中没有设定用户组,默认为nogroup用户组

    2、安装 Master Server

           当我们安装主服务器mfs master时,由于我们的目的是安装主服务器,因此在配置过程中(./configure),可以选择加参数取消安装 Chunk server(使用--disable-mfschunkserver)以及 MooseFS 客户端(使用--disable-mfsmount)。

           下面,我俩出安装 MooseFS 主控服务器 Master Server 的详细步骤:

    [root@mfs-master-1 ~]# yum install zlib-devel -y
    [root@mfs-master-1 ~]# groupadd -g 1000 mfs
    [root@mfs-master-1 ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs
    [root@mfs-master-1 ~]# cd /usr/local/src
    [root@mfs-master-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
    [root@mfs-master-1 src]# tar zxf mfs-1.6.27-5.tar.gz
    [root@mfs-master-1 src]# cd mfs-1.6.27
    [root@mfs-master-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount
    [root@mfs-master-1 mfs-1.6.27]# make
    [root@mfs-master-1 mfs-1.6.27]# make install
    [root@mfs-master-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs [root@mfs-master-1 mfs-1.6.27]# ll -d /usr/local/mfs lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27
    [root@mfs-master-1 mfs-1.6.27]# cd

    这里再补一份快捷操作命令:

    yum install zlib-devel -y
    groupadd -g 1000 mfs;useradd -u 1000 -g mfs mfs -s /sbin/nologin
    cd /usr/local/src && wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
    tar zxf mfs-1.6.27-5.tar.gz && cd mfs-1.6.27
    ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
    make && make install
    ln -s /usr/local/mfs-1.6.27 /usr/local/mfs
    ll -d /usr/local/mfs 
    cd

           以上就是 MooseFS 的 Master Server 的安装过程。Master Server 安装成功以后,会在安装目录 /usr/local/mfs-1.6.27 下生成几个目录文件。其中etc目录为mfs配置文件目录,里面有很多默认配置文件样例(结尾后缀为*.dist),后续我们将借用这些样例作为 MFS 服务器的目标配置文件。

           这里来看下每个目录的用途:

    [root@mfs-master-1 ~]# ll /usr/local/mfs/ 
    total 16 
    drwxr-xr-x. 3 root root 4096 Dec 29 00:10 etc                   # MFS 的配置文件目录,里面放了很多模板文件 
    drwxr-xr-x. 2 root root 4096 Dec 29 00:10 sbin                 # MFS 命令路径

    drwxr-xr-x. 4 root root 4096 Dec 29 00:10 share               # MFS 帮助文件目录
    drwxr-xr-x. 3 root root 4096 Dec 29 00:10 var                   # MFS 数据及日志目录,例如:metadata 数据

    提示:etc和var需要备份。

    注意:

           etc和var目录里面存放的是配置文件和MFS的数据结构信息,因此请及时做好备份,防止灾难损毁。后面做了 Master Server双机之后,就可以解决这个问题。

    3、配置 Master Server

           上面简单看了 MooseFS 的目录结构,其中 Master Server 的配置文件是位于/MooseFS根目录/etc 目录下。在该目录下有很多模板配置文件,包括 Master,Metalogger、ChunkServer等,有关 Master 的配置文件主要有两个,一个是 mfsmaster.cfg,另一个是 mfsexports.cfg。其中,mfsmaster.cfg 是主配置文件,mfsexports.cfg 用来指定那些客户端主机可以远程挂载 MooseFS 文件系统以及赋予挂载客户端什么样的访问权限。

           现在,我们去掉 Master 相关的两个配置文件的注释。

           需要注意的是,这里一定要使用 cp,而不是 mv。这样,在操作之前保留原文件,一方面方便更改后对比变化,另一方面也修改出错后的回滚。

           下面列出配置步骤以及每个配置文件的详解!

    [root@mfs-master-1 ~]# /usr/local/mfs/etc/mfs
    [root@mfs-master-1 mfs]# cp mfsexports.cfg.dist mfsexports.cfg 
    [root@mfs-master-1 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
    这里我们先来看下主配置文件mfsmaster.cfg
    [root@mfs-master-1 ~]# cat /usr/local/mfs/etc/mfs/mfsmaster.cfg 
    # WORKING_USER = mfs         # 运行 master server 的用户
    # WORKING_GROUP = mfs        # 运行 master server 的组
    # SYSLOG_IDENT = mfsmaster   # 是master server在syslog中的标识,也就是说明这是由master serve产生的
    # LOCK_MEMORY = 0            # 是否执行mlockall()以避免mfsmaster 进程溢出(默认为0)
    # NICE_LEVEL = -19           # 运行的优先级(如果可以默认是 -19; 注意: 进程必须是用root启动)
    # EXPORTS_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfsexports.cfg   # 被挂载目录及其权限控制文件的存放路径
    # TOPOLOGY_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfstopology.cfg # mfstopology.cfg文件的存放路径
    # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs # 数据存放路径,此目录下大致有三类文件,changelog,sessions和stats;
    # BACK_LOGS = 50             # metadata的改变log文件数目(默认是 50)
    # BACK_META_KEEP_PREVIOUS = 1     # metadata的默认保存份数(默认为1)
    # REPLICATIONS_DELAY_INIT = 300   # 延迟复制的时间(默认是300s)
    # REPLICATIONS_DELAY_DISCONNECT = 3600   # chunkserver断开的复制延迟(默认是3600)
    # MATOML_LISTEN_HOST = *          #  metalogger监听的IP地址(默认是*,代表任何IP)
    # MATOML_LISTEN_PORT = 9419       # metalogger监听的端口地址(默认是9419)
    # MATOML_LOG_PRESERVE_SECONDS = 600
    # MATOCS_LISTEN_HOST = *          # 用于chunkserver连接的IP地址(默认是*,代表任何IP)
    # MATOCS_LISTEN_PORT = 9420       # 用于chunkserver连接的端口地址(默认是9420)
    # MATOCL_LISTEN_HOST = *          # 用于客户端挂接连接的IP地址(默认是*,代表任何IP)
    # MATOCL_LISTEN_PORT = 9421       # 用于客户端挂接连接的端口地址(默认是9421)
    # CHUNKS_LOOP_MAX_CPS = 100000    # chunks的最大回环频率(默认是:100000秒)
    # CHUNKS_LOOP_MIN_TIME = 300      # chunks的最小回环频率(默认是:300秒)
    # CHUNKS_SOFT_DEL_LIMIT = 10      # 一个chunkserver中soft最大的可删除数量为10个
    # CHUNKS_HARD_DEL_LIMIT = 25      # 一个chuankserver中hard最大的可删除数量为25个
    # CHUNKS_WRITE_REP_LIMIT = 2      # 在一个循环里复制到一个chunkserver的最大chunk数目(默认是1)
    # CHUNKS_READ_REP_LIMIT = 10      # 在一个循环里从一个chunkserver复制的最大chunk数目(默认是5)
    # ACCEPTABLE_DIFFERENCE = 0.1     # 每个chunkserver上空间使用率的最大区别(默认为0.01即1%)
    # SESSION_SUSTAIN_TIME = 86400    # 客户端会话超时时间为86400秒,即1天
    # REJECT_OLD_CLIENTS = 0          # 弹出低于1.6.0的客户端挂接(0或1,默认是0)
    
    # deprecated: 
    # CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead 
    # LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile

    下面附上官方地址:http://moosefs.com/Content/Downloads/moosefs-users-manual.pdf

           该配置文件默认全部都为注释。mfs官方默认这样规定的,每一个注释的配置都是mfs此项配置的默认值。其实,我们linux中很多配置文件的设计风格都是这样子的,比如sshd_config.如果打算更改这些配置文件中某些项的参数,只需要取消注释,并且更改对应的参数即可。

           针对master来讲,mfsmaster.cfg的默认配置无需更改即可投入使用。

           下面,就是权限控制配置文件mfsexports.cfg。

           该配置文件制定了哪些客户端可以远程挂接MFS文件系统,以及授予挂载客户端什么样的访问权限。例如,我们制定只有172.16.0.0/24网段的主机可以读写模式访问MFS的整个共享结构资源(/)。在配置文件mfsexports.cfg中写入如下信息即可。

    [root@mfs-master-1 ~]# cat /usr/local/mfs/etc/mfs/mfsexports.cfg
    *            /         rw,alldirs,mapall=mfs:mfs,password=redhat
    *            .          rw          # 如果需要使用 moosefs的回收站功能,请开启此行。如果不使用,关闭即可

    这里,我列出该文件的配置规范:

           mfsexports.cfg 文件中,每一个条目就是一个配置规则,而每一个条目又分为三个部分,其中第一部分是mfs客户端的ip地址或地址范围,第二部分是被挂载的目录,第三个部分用来设置mfs客户端可以拥有的访问权限。

    第一部分:mfs客户端的ip地址或地址范围

    地址可以指定的几种表现形式:

        *                  所有的 I P 地址
        n.n.n.n            单个 I P 地址
        n.n.n.n/b          I P 网络地址/位数掩码
        n.n.n.n/m.m.m.m    I P 网络地址/子网掩码
        f.f.f.f-t.t.t.t    I P 段

    第二部分:被挂载的目录

    目录部分需要注意两点:

        /       标识MooseFS根
        .       表示MFSMETA文件系统

    第三部分:设置mfs客户端可以拥有的访问权限

    权限部分:

        ro        只读模式共享
        rw        读写模式共享
        alldirs   允许挂载任何指定的子目录
        maproot   映射为root,还是指定的用户
        password  指定客户端密码

           OK,以上两个配置文件配置完毕之后,我们还需要注意一个文件。在 Master Server 首次安装之后,会在 /usr/local/mfs/var/mfs/ 目录下生成一个名为 metadata.mfs.empty 的元数据metadata文件,该文件默认是为空的。(当你整个MooseFS配置好之后,它就有数据了)

           Master Server 的运行必须有metadata.mfs,而这个文件就是从metadata.mfs.empty更名而来的。当然,这个更名操作需要我们自己手动来完成。操作如下:

    [root@mfs-master-1 mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

    4、启动 Master Server

           在 MooseFS 的架构中,Master Server 是不依附于其它几个组件的,它可以单独启动。但是需要注意,其它组件必须要等 Master Server 起来之后才能启动!切记!!!

           在通过上面的简单配置之后,我们就可以启动 Master Server 了!

          下面列出启动和检查过程。

    [root@mfs-master-1 mfs]# /usr/local/mfs/sbin/mfsmaster start    # 启动mfs主服务器
    working directory: /usr/local/mfs-1.6.27/var/mfs 
    lockfile created and locked 
    initializing mfsmaster modules ... 
    loading sessions ... file not found 
    if it is not fresh installation then you have to restart all active mounts !!! 
    exports file has been loaded 
    mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - using defaults 
    loading metadata ... 
    create new empty filesystemmetadata file has been loaded 
    no charts data file - initializing empty charts 
    master <-> metaloggers module: listen on *:9419 
    master <-> chunkservers module: listen on *:9420 
    main master server module: listen on *:9421 
    mfsmaster daemon initialized properly

    下面进行检查,针对 Master Server 的启动检查主要有3个方面,第一看进程,第二看端口,第三看日志

    [root@mfs-master-1 ~]# ps -ef|grep mfs                            # 查看进程是否正常
    mfs 28867 19:44 ? 00:00:00 /etc/ha.d/resource.d/mfsmaster start 
    root 29087 26249 19:48 pts/00:00:00 grep mfs
    [root@mfs-master-1 ~]# netstat -lnt |grep 94                    # 查看端口看是否起来
    tcp 0.0.0.0:9419 0.0.0.0:* LISTEN 
    tcp 0.0.0.0:9420 0.0.0.0:* LISTEN 
    tcp 0.0.0.0:9421 0.0.0.0:* LISTEN

    开启 master 的日志情况

    [root@mfs-master-1 ~]# tailf /var/log/messages     # 观察 Master Server 启动时的日志变化
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: set gid to 1000
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: set uid to 1000
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: sessions have been loaded
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: exports file has been loaded
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - network topology not defined
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: stats file has been loaded
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: master <-> metaloggers module: listen on *:9419
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: master <-> chunkservers module: listen on *:9420
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: main master server module: listen on *:9421
    Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: open files limit: 5000

    5、停止 Master Server

             Master Server 服务和其它普通服务不一样,它千万不能使用 kill -9 去强制杀掉进程。每次非正常关闭服务,都需要使用 MooseFS 自带的恢复工具进行数据恢复,非常悲剧。因此,安全的关闭 Master Server 是非常重要。

    [root@mfs-master-1 ~]# /usr/local/mfs/sbin/mfsmaster stop 
    sending SIGTERM to lock owner (pid:29112) waiting for termination ... terminated
    [root@mfs-master-1 ~]# tailf /var/log/messages    # 观察 Master Server 关闭时的日志变化
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29113]: set gid to 1000
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29113]: set uid to 1000
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: terminate signal received
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: main master server moduleclosing *:9421
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: master <-> chunkservers moduleclosing *:9420
    Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: master <-> metaloggers moduleclosing *:9419

    6、扫尾操作

    a、配置环境变量

            为了方便操作 MooseFS,我们需要把他的sbin目录加入到系统的PATH变量中去。

    [root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile 
    [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile 
    [root@mfs-metalogger ~]# tail -2 /etc/profile # add moosefs to the path variable PATH=/usr/local/mfs/sbin/:$PATH
    [root@mfs-metalogger ~]# source /etc/profile

    b、配置开机自启动

            开机自启动的目的,这里就不多解释了。

    [root@mfs-metalogger ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local 
    [root@mfs-metalogger ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local 
    [root@mfs-metalogger ~]# tail -2 /etc/rc.local 
    # Configure the metalogger service startup 
    /usr/local/mfs/sbin/mfsmetalogger start

    以上,就是 Master Server 部署的全部操作。

    3、部署 Metalogger Server

    1、安装 Metalogger Server

           前面已经介绍了,Metalogger Server 是 Master Server 的备份服务器。因此,Metalogger Server 的安装步骤和 Master Server 的安装步骤相同。并且,最好使用和 Master Server 配置一样的服务器来做 Metalogger Server。这样,一旦主服务器master宕机失效,我们只要导入备份信息changelogs到元数据文件,备份服务器可直接接替故障的master继续提供服务。

           这里仅列出安装步骤:

    [root@mfs-metalogger-1 ~]# yum install zlib-devel -y
    [root@mfs-metalogger-1 ~]# groupadd -g 1000 mfs
    [root@mfs-metalogger-1 ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
    [root@mfs-metalogger-1 ~]# cd /usr/local/src
    [root@mfs-metalogger-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
    [root@mfs-metalogger-1 src]# tar zxf mfs-1.6.27-5.tar.gz
    [root@mfs-metalogger-1 src]# cd mfs-1.6.27
    [root@mfs-metalogger-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount
    [root@mfs-metalogger-1 mfs-1.6.27]# make
    [root@mfs-metalogger-1 mfs-1.6.27]# make install
    [root@mfs-metalogger-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
    [root@mfs-metalogger-1 mfs-1.6.27]# ll -d /usr/local/mfs 
    lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27
    [root@mfs-metalogger-1 mfs-1.6.27]# cd

    2、配置 Metalogger Server

           虽然,Metalogger Server 的安装步骤和 Master Server 一样,但是配置文件肯定是有所差别的。这里将介绍,如何配置Metalogger Server。

    [root@mfs-metalogger ~]# cd /usr/local/mfs/etc/mfs/ 
    [root@mfs-metalogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
    [root@mfs-metalogger mfs]# ll mfsmetalogger.cfg 
    -rw-r--r--. 1 root root 423 Dec 28 23:55 mfsmetalogger.cfg
    [root@mfs-metalogger mfs]# cat mfsmetalogger.cfg 
    # WORKING_USER = mfs 
    # WORKING_GROUP = mfs 
    # SYSLOG_IDENT = mfsmetalogger 
    # LOCK_MEMORY = 0 
    # NICE_LEVEL = -19 
    # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs 
    # BACK_LOGS = 50 
    # BACK_META_KEEP_PREVIOUS = 3 
    # META_DOWNLOAD_FREQ = 24           # 元数据备份文件下载请求频率,默认为24小时,即每个一天从元数据服务器下载一个metadata.mfs.back文件。当元数据服务器关闭或者出故障时,metadata.mfs.back文件将小时,那么要恢复整个mfs,则需要从metalogger服务器取得该文件。请注意该文件,它与日志文件在一起,才能够恢复整个被损坏的分布式文件系统。
    # MASTER_RECONNECTION_DELAY = 5 
    MASTER_HOST = 172.16.100.1       # 这里是需要连接的 mfs master server 的地址
    
    #MASTER_PORT = 9419                      # 这里是需要连接的 mfs master server 的端口
    # MASTER_TIMEOUT = 60 
    # deprecated, to be removed in MooseFS 1.7 
    # LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

           这个文件中需要修改的是MASTER_HOST变量,这个变量的值是 Master Server 的 IP 地址。如果对 Master Server 做了 host 解析也可以不改任何内容。

           这里需要将它修改为如下参数:

    MASTER_HOST = 172.16.100.1       # 这里是需要连接的 mfs master server 的地址

    3、启动 Metalogger Server

    启动 Metalogger Server 之前,一定要确保 Master server 的服务是正常启动的。

    [root@mfs-metalogger ~]# nc -w 172.16.100.2 -z 9419   # 从输出可以看到,Master Server 已经正常启动
    Connection to 172.16.100.2 9419 port [tcp/*] succeeded!
    [root@mfs-metalogger ~]# /usr/local/mfs/sbin/mfsmetalogger start  # 启动 Metalogger Server
    working directory: /usr/local/mfs-1.6.27/var/mfs 
    lockfile created and locked 
    initializing mfsmetalogger modules ... 
    mfsmetalogger daemon initialized properly
    [root@mfs-metalogger ~]# netstat -lantp|grep metalogger     # 查看进程 
    tcp 172.16.100.4:50193 172.16.100.1:9419 ESTABLISHED 17201/mfsmetalogger
    [root@mfs-metalogger ~]# tailf /var/log/messages        # 开启 Metalogger Server 时的日志情况
    Dec 30 16:44:25 localhost mfsmetalogger[17275]: set gid to 1000
    Dec 30 16:44:25 localhost mfsmetalogger[17275]: set uid to 1000
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: connecting ...
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: open files limit: 5000
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: connected to Master
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: metadata downloaded 2461B/0.002353s (1.046 MB/s)
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: changelog_0 downloaded 0B/0.000001s (0.000 MB/s)
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: changelog_1 downloaded 0B/0.000001s (0.000 MB/s)
    Dec 30 16:44:26 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.001027s (0.533 MB/s)
    Dec 30 16:44:28 localhost kernel: nfs: server 172.16.100.3 not responding, timed out
    去 Master Server 上进行检查:
    [root@mfs-master-1 ~]# netstat -lantp|grep 9419 
    tcp 0.0.0.0:9419 0.0.0.0:* LISTEN 25665/mfsmaster 
    tcp 172.16.100.1:9419 172.16.100.4:50194 ESTABLISHED 25665/mfsmaster

           我们可以看到Metalogger Server已经和Master Server的9419端口建立了长连接

           另外,在上面的日志中,我们可以看到他在下载一些文件,这些文件就是之前介绍过的Master Server上的文件,我们可以在以下目录看到这些文件。

    [root@mfs-metalogger ~]# ll /usr/local/mfs/var/mfs/ 
    total 8 
    -rw-r-----. 1 mfs mfs 0 Dec 30 16:26 changelog_ml_back.0.mfs 
    -rw-r-----. 1 mfs mfs 0 Dec 30 16:26 changelog_ml_back.1.mfs 
    -rw-r-----. 1 mfs mfs 2461 Dec 30 16:26 metadata_ml.mfs.back 
    -rw-r-----. 1 mfs mfs 547 Dec 30 16:27 sessions_ml.mfs

    最后,在贴出 Metalogger Server 运行时的日志输出情况:

    [root@mfs-metalogger ~]# tailf /var/log/messages 
    Dec 30 16:45:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000842s (0.650 MB/s)
    Dec 30 16:46:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000428s (1.278 MB/s)
    Dec 30 16:47:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000551s (0.993 MB/s)
    Dec 30 16:48:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.001091s (0.501 MB/s)
    Dec 30 16:49:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000471s (1.161 MB/s)

    4、关闭 Metalogger Server

    [root@mfs-metalogger ~]# /usr/local/mfs/sbin/mfsmetalogger stop 
    sending SIGTERM to lock owner (pid:17201) 
    waiting for termination ... terminated
    [root@mfs-metalogger ~]# tailf /var/log/messages          # 停止 Metalogger Server 时的日志情况   
    Dec 30 16:43:42 localhost mfsmetalogger[17272]: set gid to 1000
    Dec 30 16:43:42 localhost mfsmetalogger[17272]: set uid to 1000
    Dec 30 16:43:42 localhost mfsmetalogger[17271]: terminate signal received
    此时 Master Server 上会有提示:
    [root@mfs-master-1 ~]# tailf /var/log/messages
    Dec 31 10:56:28 mfs-master-1 mfsmaster[25665]: connection with ML(172.16.100.4) has been closed by peer

     

    5、扫尾操作

    a、配置全局变量

    [root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile 
    [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile 
    [root@mfs-metalogger ~]# tail -2 /etc/profile 
    # add moosefs to the path variable 
    PATH=/usr/local/mfs/sbin/:$PATH
    [root@mfs-metalogger ~]# source /etc/profile

    b、配置开机自启动

    [root@mfs-metalogger ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local 
    [root@mfs-metalogger ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local 
    [root@mfs-metalogger ~]# tail -2 /etc/rc.local 
    # Configure the metalogger service startup 
    /usr/local/mfs/sbin/mfsmetalogger start

    4、部署 Chunk Servers

    1、安装 Chunk Servers

           数据存储服务器也被称为 Chunk Server。在 MooseFS 文件系统中,每个 Chunk Server 的配置是完全相同的。因此,这里我们仅以一台 Chunk Server 的安装为例进行演示,其它两台的安装步骤这里不再复述。

    [root@mfs-chunkserver-1 ~]# yum install zlib-devel -y
    [root@mfs-chunkserver-1 ~]# groupadd -g 1000 mfs
    [root@mfs-chunkserver-1 ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
    [root@mfs-chunkserver-1 ~]# cd /usr/local/src
    [root@mfs-chunkserver-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
    [root@mfs-chunkserver-1 src]# tar zxf mfs-1.6.27-5.tar.gz
    [root@mfs-chunkserver-1 src]# cd mfs-1.6.27
    [root@mfs-chunkserver-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfsmaster --disable-mfsmount
    [root@mfs-chunkserver-1 mfs-1.6.27]# make
    [root@mfs-chunkserver-1 mfs-1.6.27]# make install
    [root@mfs-chunkserver-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
    [root@mfs-chunkserver-1 mfs-1.6.27]# ll -d /usr/local/mfs 
    lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27
    [root@mfs-chunkserver-1 mfs-1.6.27]# cd

    2、配置 Chunk Servers

           配置 Chunk Server 需要两个配置文件,分别是 mfschunkserver.cfg 和 mfshdd.cfg 。其中,mfschunkserver.cfg 是主配置文件,而 mfshdd.cfg 是服务器用来分配给 MFS 使用的空间的配置文件,最好是一个单独的磁盘或者一个raid卷,最低要求是一个分区。

           在每个mfs chunk server 上的配置及操作如下:

    [root@mfs-chunkserver-1 ~]# cd /usr/local/mfs/etc/mfs/ 
    [root@mfs-chunkserver-1 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg 
    [root@mfs-chunkserver-1 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
    [root@mfs-chunkserver-1 mfs]# grep -v '^$' mfschunkserver.cfg 
    # WORKING_USER = mfs 
    # WORKING_GROUP = mfs 
    # SYSLOG_IDENT = mfschunkserver 
    # LOCK_MEMORY = 0 
    # NICE_LEVEL = -19 
    # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs 
    # MASTER_RECONNECTION_DELAY = 5 
    # BIND_HOST = * 
    # MASTER_HOST = mfsmaster 
    # MASTER_PORT = 9420 
    # MASTER_TIMEOUT = 60 
    CSSERV_LISTEN_HOST = 172.16.100.1    # 该地址为 Master Server 的IP地址或者主机名
    
    CSSERV_LISTEN_PORT = 9422   # 该端口用于与其它chunk server之间的通信,主要是数据复制
    
    # HDD_CONF_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfshdd.cfg 
    # HDD_TEST_FREQ = 10 
    # deprecated, to be removed in MooseFS 1.7 
    # LOCK_FILE = /var/run/mfs/mfschunkserver.lock 
    # BACK_LOGS = 50 
    # CSSERV_TIMEOUT = 5

           在常规的使用过程中,我们只需要修改一个 CSSERV_LISTEN_HOST参数,将该参数设置为我们 Master Server 的IP地址或者主机名即可。

    配置mfshdd.cfg主配置文件

           mfshdd.cfg该文件用来设置你将 Chunk Server 的哪个目录共享出去给 Master Server进行管理。当然,虽然这里填写的是共享的目录,但是这个目录后面最好是一个单独的分区。分区的相关操作,这里就不占篇幅了。

    [root@mfs-chunkserver-1 ~]# cat /usr/local/mfs/etc/mfs/mfshdd.cfg 
    /mfsdata

    3、启动 Chunk Server

           和 Metalogger Server 一样,在启动 chunk servers之前,必须要先确保 Master Server 的服务是正常启动的,否则启动会报错。

    [root@mfs-chunkserver-1 ~]# nc -w 172.16.100.2 -z 9420 
    Connection to 172.16.100.2 9420 port [tcp/*] succeeded!
    [root@mfs-chunkserver-1 ~]# /usr/local/mfs/sbin/mfschunkserver start 
    working directory: /usr/local/mfs-1.6.27/var/mfs 
    lockfile created and locked 
    initializing mfschunkserver modules ... 
    hdd space manager: path to scan: /mfsdata/ 
    hdd space manager: start background hdd scanning (searching for available chunks) 
    main server module: listen on *:9422 
    stats file has been loaded 
    mfschunkserver daemon initialized properly
    [root@mfs-chunkserver-1 ~]# netstat -lantp|grep 9420 
    tcp 172.16.100.5:59486 172.16.100.1:9420 ESTABLISHED 7825/mfschunkserver
    [root@mfs-chunkserver-1 ~]# tailf /var/log/messages            # 启动 Chunk Server 时的日志变化
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: set gid to 1000
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: set uid to 1000
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: hdd space manager: folder /mfsdata/ will be scanned
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: main server module: listen on *:9422
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: connecting ...
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: stats file has been loaded
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: open files limit: 10000
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: connected to Master
    Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: scanning folder /mfsdata/: complete (0s)
    Dec 30 19:05:43 mfs-chunkserver-1 mfschunkserver[7825]: testing chunk: /mfsdata/D0/chunk_00000000000000D0_00000001.mfs
    Dec 30 19:05:53 mfs-chunkserver-1 mfschunkserver[7825]: testing chunk: /mfsdata/CD/chunk_00000000000000CD_00000001.mfs

    查看 Master Server 上的变化:

    [root@mfs-master-1 ~]# tailf /var/log/messages       # 启动 Chunk Server 时的Master Server 的日志变化
    Dec 31 11:31:47 mfs-master-1 mfsmaster[26053]: chunkserver register begin (packet version: 5) ip: 172.16.100.5, port: 9422
    Dec 31 11:31:47 mfs-master-1 mfsmaster[26053]: chunkserver register end (packet version: 5) ip: 172.16.100.5, port: 9422, usedspace: 0 (0.00 GiB), totalspace: 0 (0.00 GiB)
    [root@mfs-master-1 ~]# netstat -lantp|grep 9420 
    tcp 0.0.0.0:9420 0.0.0.0:* LISTEN 26053/mfsmaster 
    tcp 172.16.100.1:9420 172.16.100.5:59486 ESTABLISHED 26053/mfsmaster 
    tcp 172.16.100.1:9420 172.16.100.7:41816 ESTABLISHED 26053/mfsmaster 
    tcp 172.16.100.1:9420 172.16.100.6:39261 ESTABLISHED 26053/mfsmaster

    4、关闭 Chunk Server

    [root@mfs-chunkserver-1 ~]# /usr/local/mfs/sbin/mfschunkserver stop 
    sending SIGTERM to lock owner (pid:7068) 
    waiting for termination ... terminated
    [root@mfs-chunkserver-1 ~]# tailf /var/log/messages
    Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7884]: set gid to 1000
    Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7884]: set uid to 1000
    Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7859]: terminate signal received
    Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7859]: closing *:9422
    [root@mfs-master-1 ~]# tailf /var/log/messages
    Dec 31 11:35:16 mfs-master-1 mfsmaster[26053]: connection with CS(172.16.100.5) has been closed by peer
    Dec 31 11:35:16 mfs-master-1 mfsmaster[26053]: chunkserver disconnected ip: 172.16.100.5, port: 9422, usedspace: 1186041856 (1.10 GiB), totalspace: 8022986752 (7.47 GiB)

    5、扫尾操作

    a、配置全局变量

    [root@mfs-chunkserver-1 ~]# echo '# add moosefs to the path variable' >> /etc/profile 
    [root@mfs-chunkserver-1 ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile 
    [root@mfs-chunkserver-1 ~]# tail -2 /etc/profile 
    # add moosefs to the path variable 
    PATH=/usr/local/mfs/sbin/:$PATH
    [root@mfs-chunkserver-1 ~]# source /etc/profile

    b、配置开机自启动

    [root@mfs-chunkserver-1 ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local 
    [root@mfs-chunkserver-1 ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local 
    [root@mfs-chunkserver-1 ~]#tail -2 /etc/rc.local 
    # Configure the metalogger service startup 
    /usr/local/mfs/sbin/mfsmetalogger start

    5、部署 Client

    1、安装 FUSE

           由于 MFS 文件系统客户端的挂载依赖于 FUSE 工具,因此需要先安装 FUSE 工具。

    官方注解:

    mfsmount requires FUSE to work; FUSE is available on several operating systems: Linux, FreeBSD, OpenSolaris and MacOS X, with the following notes:

    • In case of Linux a kernel module with API 7.8 or later is required (it can be checked with dmesgcommand - after loading kernel module there should be a line fuse init (API version 7.8)). It is available in fuse package 2.6.0 (or later) or in Linux kernel 2.6.20 (or later). Due to some minor bugs, the newer module is recommended (fuse 2.7.2 or Linux 2.6.24, although fuse 2.7.x standalone doesn't contain getattr/write race condition fix).

    • In case of FreeBSD we recommed using fuse-freebsd (https://github.com/glk/fuse-freebsd) which is a successor to fuse4bsd.

    • For MacOSX we recommend using OSXFUSE (http://osxfuse.github.com/), which is a successor to MacFUSE and has been tested on MacOSX 10.6 and 10.7.

    因此,安装之前,我们需要先查看内核支持情况。如果已经支持了,并且版本也达到要求之后,就无须安装FUSE了。

    [root@mfs-client ~]# lsmod|grep fuse 
    fuse 73530 2

    如果你的系统版本内核中没有支持FUSE或者版本不够,那么可以使用下面的方式进行安装,这里推荐使用 2.8.5 版本。

    a、安装fuse

    [root@mfs-client src]# wget http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz
    [root@mfs-client src]# tar zxf fuse-2.9.3.tar.gz 
    [root@mfs-client src]# cd fuse-2.9.3 
    [root@mfs-client fuse-2.9.3]# ls 
    [root@mfs-client fuse-2.9.3]# ./configure 
    [root@mfs-client fuse-2.9.3]# make && make install
    [root@mfs-client fuse-2.9.3]#cd ..

    b、调整环境变量

    [root@mfs-client src]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' > /etc/profile
    [root@mfs-client src]# tail -1 /etc/profile 
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

    c、加载fuse模块到内核并配置开机自启

    [root@mfs-client mfs-1.6.27]# lsmod |grep fuse 
    [root@mfs-client mfs-1.6.27]# modprobe fuse 
    [root@mfs-client mfs-1.6.27]# lsmod |grep fuse 
    fuse 73530 0 
    [root@mfs-client mfs-1.6.27]# echo 'modeprobe fuse' >> /etc/sysconfig/modules/fuse.modules 
    [root@mfs-client mfs-1.6.27]# cat /etc/sysconfig/modules/fuse.modules 
    modeprobe fuse 
    [root@mfs-client mfs-1.6.27]# chmod 755 /etc/sysconfig/modules/fuse.modules2、安装 mfsmount
    [root@mfs-client ~]# yum install zlib-devel -y
    [root@mfs-client ~]# groupadd -g 1000 mfs
    [root@mfs-client ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
    [root@mfs-client ~]# cd /usr/local/src
    [root@mfs-client src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
    [root@mfs-client src]# tar zxf mfs-1.6.27-5.tar.gz
    [root@mfs-client src]# cd mfs-1.6.27
    [root@mfs-client mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
    [root@mfs-client mfs-1.6.27]# make
    [root@mfs-client mfs-1.6.27]# make install
    [root@mfs-client mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
    [root@mfs-client mfs-1.6.27]# ll -d /usr/local/mfs 
    lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27
    [root@mfs-client mfs-1.6.27]# ll /usr/local/mfs/ 
    total 20 
    drwxr-xr-x. 2 root root 4096 Dec 28 16:41 bin            # bin 目录下是客户端的命令
    drwxr-xr-x. 3 root root 4096 Dec 28 16:41 etc 
    drwxr-xr-x. 2 root root 4096 Dec 28 16:41 sbin 
    drwxr-xr-x. 4 root root 4096 Dec 28 16:41 share 
    drwxr-xr-x. 3 root root 4096 Dec 28 16:41 var

    3、从客户端上挂载mfs文件系统

    a、创建数据目录挂载点

    [root@mfs-client mfs-1.6.27]# mkdir /mfsdata 
    [root@mfs-client mfs-1.6.27]# chown -R mfs.mfs /mfsdata 
    [root@mfs-client mfs-1.6.27]# ll -d /mfsdata 
    drwxr-xr-x. 2 mfs mfs 4096 Dec 28 16:44 /mfsdata

    b、挂载mfs文件系统

    由于我们之前设置了需要密码验证才能挂载成功,因此这里会提示我们需要输入密码

    [root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 
    mfsmaster register error: Password is needed
    [root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -p       # 使用 -p 后面,下面会提示输入密码 
    MFS Password: 
    mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to root:root 
    [root@mfs-client mfs-1.6.27]# df -h 
    Filesystem Size Used Avail Use% Mounted on 
    /dev/sda3 18G 949M 16G 6% / 
    tmpfs 491M 491M 0% /dev/shm 
    /dev/sda1 194M 28M 157M 15% /boot 
    172.16.100.1:9421 22G 22G 0% /mfsdata

    4、挂载后本地写入文件测试

    写入测试前,我们查看下主和备服务器的元数据文件及变化日志文件。

    [root@mfs-client mfs-1.6.27]# cd /mfsdata/
    [root@mfs-client mfsdata]# touch a 
    [root@mfs-client mfsdata]# echo redhat > a 
    [root@mfs-client mfsdata]# cat a 
    redhat 
    [root@mfs-client mfsdata]# rm -rf a 
    [root@mfs-client mfsdata]# ls

    在客户端写入完成之后,我们可以来观察一下 Master Server 端的变化

    [root@mfs-master-1 mfs]# cat changelog.0.mfs 
    1: 1419799640|SESSION():2 
    2: 1419799701|SESSION():3 
    3: 1419799756|CREATE(1,a,f,420,1000,1000,0):2 
    4: 1419799756|ACQUIRE(2,3) 
    5: 1419799756|ATTR(2,420,1000,1000,1419803408,1419803408) 
    6: 1419799759|LENGTH(2,0) 
    7: 1419799759|WRITE(2,0,1):1 
    8: 1419799759|LENGTH(2,7) 
    9: 1419799759|UNLOCK(1) 
    10: 1419799760|ACCESS(2) 
    11: 1419799761|RELEASE(2,3) 
    12: 1419799762|UNLINK(1,a):2 
    13: 1419799763|ACCESS(1)

    我们再来查看一下,Metalogger Server 端的变化:

    [root@mfs-metalogger ~]# cd /usr/local/mfs/var/mfs/
    [root@mfs-metalogger mfs]# cat changelog_ml.1.mfs 
    0: 1419799516|SESSION():1 
    1: 1419799640|SESSION():2 
    2: 1419799701|SESSION():3 
    3: 1419799756|CREATE(1,a,f,420,1000,1000,0):2 
    4: 1419799756|ACQUIRE(2,3) 
    5: 1419799756|ATTR(2,420,1000,1000,1419803408,1419803408) 
    6: 1419799759|LENGTH(2,0) 
    7: 1419799759|WRITE(2,0,1):1 
    8: 1419799759|LENGTH(2,7) 
    9: 1419799759|UNLOCK(1) 
    10: 1419799760|ACCESS(2) 
    11: 1419799761|RELEASE(2,3) 
    12: 1419799762|UNLINK(1,a):2 
    13: 1419799763|ACCESS(1)


    5、扫尾操作

    a、配置环境变量

    [root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile 
    [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/bin/:$PATH' >> /etc/profile 
    [root@mfs-metalogger ~]# tail -2 /etc/profile 
    # add moosefs to the path variable 
    PATH=/usr/local/mfs/bin/:$PATH
    [root@mfs-metalogger ~]# source /etc/profile

    b、配置客户端开机自动挂载

           如果需要Client能够在开机的时候自动挂载,我们就需要自动把密码传递进去。mfsmount自带了-o参数,我们可以把密码配置在其后来实现开机自动挂载。

    [root@mfs-client mfs-1.6.27]# umount /mfsdata/ 
    [root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat 
    mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to root:root 
    [root@mfs-client mfs-1.6.27]# df -h 
    Filesystem Size Used Avail Use% Mounted on 
    /dev/sda3 18G 949M 16G 6% / 
    tmpfs 491M 0 491M 0% /dev/shm 
    /dev/sda1 194M 28M 157M 15% /boot 
    172.16.100.1:9421 22G 0 22G 0% /mfsdata
    [root@mfs-client mfs-1.6.27]# echo 'Moosefs boot automatically mount' >> /etc/rc.local
    [root@mfs-client mfs-1.6.27]# echo '/usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat' >> /etc/rc.local
    [root@mfs-client mfs-1.6.27]# tailf -2 /etc/rc.local
    Moosefs boot automatically mount
    /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat

    OK!

           以上就是 MooseFS 的部署流程,希望能对51博友有所帮助。针对 MooseFS 更深一步的研究,比如 MooseFS的特性,MooseFS 的日常管理维护以及 MooseFS 的监控和灾难恢复等等,我将会放在下一篇博文中去说。

    本文出自 “Not Only Linux” 博客,请务必保留此出处http://nolinux.blog.51cto.com/4824967/1601385

    https://my.oschina.net/guol/blog/40604

    https://www.oschina.net/p/moosefs

  • 相关阅读:
    【转】卡特兰数四个公式(简单)
    【基础算法-ST表】入门 -C++
    【题解】[Nwerc 2006]escape -C++
    C#高级编程第11版
    C#高级编程第11版
    C#高级编程第11版
    C#高级编程第11版
    C#高级编程第11版
    109th LeetCode Weekly Contest Knight Dialer
    109th LeetCode Weekly Contest Number of Recent Calls
  • 原文地址:https://www.cnblogs.com/findumars/p/6533767.html
Copyright © 2011-2022 走看看