zoukankan      html  css  js  c++  java
  • mfs教程(一)

    对于mfs文件系统也用了半年了,确实不错,最近又翻译了作者的三篇文章,再此一同发上,希望对大家有所帮助。不足之处还请指出,以便完善,谢谢!

    感谢网友nonamexz做了精美的pdf文档 MFS文件系统使用手册.pdf (453.19 KB, 下载次数: 3946)

    MFS文件系统
    官方的网络示意图是这样的:


    MFS文件系统结构:
    包含4种角色:  
            管理服务器managing server (master)
            元数据日志服务器Metalogger server(Metalogger)
            数据存储服务器data servers (chunkservers)  
            客户机挂载使用client computers  

    4种角色作用:
            管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
            元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
            数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
            客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.



    一个具体的实例
    (一)、安装和配置元数据服务(master server)
    1、下载源代码
    http://ncu.dl.sourceforge.net/pr ... 1/mfs-1.6.11.tar.gz
    2、tar zxvf mfs-1.6.11.tar.gz
    3、创建用户 useradd mfs –s /sbin/nologin
    4、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs
    5、make ; make install
    6、配置
    配置文件位于安装目录/usr/local/mfs/etc,需要的配置文件有两个:mfsmaster.cfg和 mfsexports.cfg,
    mfsmaster.cfg是主配置文件,mfsexports.cfg是被挂接目录及权限设置。
    (1)、mfsmaster.cfg的配置
    [root@nas etc]# cp mfsmaster.cfg.dist mfsmaster.cfg
    [root@nas etc]# vi mfsmaster.cfg
    # WORKING_USER = mfs
    # WORKING_GROUP = mfs
    # SYSLOG_IDENT = mfsmaster
    # LOCK_MEMORY = 0
    # NICE_LEVEL = -19
    # EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg
    # DATA_PATH = /usr/local/mfs/var/mfs
    # BACK_LOGS = 50
    # REPLICATIONS_DELAY_INIT = 300
    # REPLICATIONS_DELAY_DISCONNECT = 3600
    # MATOML_LISTEN_HOST = *
    # MATOML_LISTEN_PORT = 9419
    # MATOCS_LISTEN_HOST = *
    # MATOCS_LISTEN_PORT = 9420
    # MATOCU_LISTEN_HOST = *
    # MATOCU_LISTEN_PORT = 9421
    # CHUNKS_LOOP_TIME = 300
    # CHUNKS_DEL_LIMIT = 100
    # CHUNKS_WRITE_REP_LIMIT = 1
    # CHUNKS_READ_REP_LIMIT = 5
    # REJECT_OLD_CLIENTS = 0



    需要注意的是,凡是用#注释掉的变量均使用其默认值,这里我解释一下这些变量:

    #WORKING_USER和WORKING_GROUP:是运行master server的用户和组;
    #SYSLOG_IDENT:是master server在syslog中的标识,也就是说明这是由master serve产生的;
    #LOCK_MEMORY:是否执行mlockall()以避免mfsmaster 进程溢出(默认为0);
    #NICE_LEVE:运行的优先级(如果可以默认是 -19; 注意: 进程必须是用root启动);
    #EXPORTS_FILENAME:被挂接目录及其权限控制文件的存放位置
    #DATA_PATH:数据存放路径,此目录下大致有三类文件,changelog,sessions和stats;
    #BACK_LOGS:metadata的改变log文件数目(默认是 50);
    #REPLICATIONS_DELAY_INIT:延迟复制的时间(默认是300s);
    #REPLICATIONS_DELAY_DISCONNECT:chunkserver断开的复制延迟(默认是3600);
    # MATOML_LISTEN_HOST:metalogger监听的IP地址(默认是*,代表任何IP);
    # MATOML_LISTEN_PORT:metalogger监听的端口地址(默认是9419);
    # MATOCS_LISTEN_HOST:用于chunkserver连接的IP地址(默认是*,代表任何IP);
    # MATOCS_LISTEN_PORT:用于chunkserver连接的端口地址(默认是9420);
    # MATOCU_LISTEN_HOST:用于客户端挂接连接的IP地址(默认是*,代表任何IP);
    # MATOCU_LISTEN_PORT:用于客户端挂接连接的端口地址(默认是9421);
    # CHUNKS_LOOP_TIME :chunks的回环频率(默认是:300秒);
       注:原文为Chunks loop frequency in seconds (default is 300)
    # CHUNKS_DEL_LIMIT :在一个loop设备中可以删除chunks的最大数 (默认:100)
    #REPLICATIONS_DELAY_DISCONNECT chunkserver断开后的复制延时(默认:3600秒)
    # CHUNKS_WRITE_REP_LIMIT:在一个循环里复制到一个chunkserver的最大chunk数目(默认是1)
    # CHUNKS_READ_REP_LIMIT :在一个循环里从一个chunkserver复制的最大chunk数目(默认是5)
    # REJECT_OLD_CLIENTS:弹出低于1.6.0的客户端挂接(0或1,默认是0)
    注意mfsexports访问控制对于那些老客户是没用的


    以上是对master server的mfsmaster.cfg配置文件的解释,对于这个文件不需要做任何修改就可以工作。





    (2)、mfsexports.cfg的配置
    [root@nas etc]# vi mfsexports.cfg  

    #*                      /       ro
    #192.168.1.0/24         /       rw
    #192.168.1.0/24         /       rw,alldirs,maproot=0,password=passcode
    #10.0.0.0-10.0.0.5      /test   rw,maproot=nobody,password=test
    *                       .       rw
    #*                      /       rw,alldirs,maproot=0

    192.168.3.98            /tt     rw,alldirs,maproot=0
    192.168.3.139           /       rw,alldirs,maproot=0
    192.168.3.138           /       rw,alldirs,maproot=0,password=111111

    该文件每一个条目分为三部分:
    第一部分:客户端的ip地址
    第二部分:被挂接的目录
    第三部分:客户端拥有的权限


    地址可以指定的几种表现形式:
           *                  所有的ip地址
           n.n.n.n             单个ip地址
           n.n.n.n/b           IP网络地址/位数掩码
           n.n.n.n/m.m.m.m     IP网络地址/子网掩码
           f.f.f.f-t.t.t.t     IP段

    目录部分需要注意两点:
    / 标识MooseFS 根;
    . 表示MFSMETA 文件系统

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

    7、启动master server
    master server可以单独启动(所谓单独启动就是在没有数据存储服务器(chunkserver)的时候也可以启动,但是不能存储,chunkserver启动后会自动的加入)。安装配置完MFS后,即可启动它。
    执行命令 /usr/local/mfs/sbin/mfsmaster start ,可通过检查如下:
    [root@nas etc]# ps -ef|grep mfs
    mfs      12327     1  0 08:38 ?        00:00:00 /usr/local/mfs/sbin/mfsmaster start
    8、停止master server
    安全停止master server是非常必要的,最好不要用kill。利用mfsmaster –s来安全停止master serve,一旦是用了kill也是有解决方法的,后文有说明。
    9、要经常性的查看系统日志(tail -f /var/log/messages)
    (二)、安装和配置元数据日志服务器(metalogger)
    1、下载源码
    http://ncu.dl.sourceforge.net/pr ... 1/mfs-1.6.11.tar.gz
    2、tar zxvf mfs-1.6.11.tar.gz
    3、创建用户 useradd mfs –s /sbin/nologin
    4、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs
    5、make ; make install
    6、配置
    该服务只有一个配置文件,那就是mfsmetalogger.cfg。
    [root@mail etc]# vi mfsmetalogger.cfg
    # WORKING_USER = mfs
    # WORKING_GROUP = mfs
    # SYSLOG_IDENT = mfsmetalogger
    # LOCK_MEMORY = 0
    # NICE_LEVEL = -19
    # DATA_PATH = /usr/local/mfs/var/mfs
    # BACK_LOGS = 50
    # META_DOWNLOAD_FREQ = 24
    # MASTER_RECONNECTION_DELAY = 5
    MASTER_HOST = 192.168.3.34
    # MASTER_PORT = 9419
    # MASTER_TIMEOUT = 60
    # deprecated, to be removed in MooseFS 1.7
    # LOCK_FILE = /var/run/mfs/mfsmetalogger.lock


    文中的大多数变量不难理解,类似于mfsmaster.cfg中的变量,其中:
    META_DOWNLOAD_FREQ需要说明一下:
    元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back文件。当元数据服务 器关闭或者出故障时,matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件。请特别注意这 个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。
    这个文件中需要修改的是MASTER_HOST变量,这个变量的值是master server的IP地址。
    7、启动metalogger服务
    [root@mail sbin]# ./mfsmetalogger start
    working directory: /usr/local/mfs/var/mfs
    lockfile created and locked
    initializing mfsmetalogger modules ...
    mfsmetalogger daemon initialized properly
    这说明metalogger服务正常启动了。利用命令检查:
    通过进程:
    [root@mail sbin]# ps -ef |grep mfs
    mfs      12254     1  0 15:25 ?        00:00:00 ./mfschunkserver start
    通过检查端口:
    [root@mail sbin]# lsof -i:9419
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE NODE NAME
    mfsmetalo 12292  mfs    7u  IPv4 1395372       TCP mail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED)
    查看日志服务器的工作目录
    [root@mail mfs]# pwd
    /usr/local/mfs/var/mfs
    [root@mail mfs]# ll
    total 8
    -rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.1.mfs
    -rw-r----- 1 mfs mfs 519 Jan 13 15:40 sessions_ml.mfs

    这是运行18小时后:
    [root@mail mfs]# ll
    total 1808
    -rw-r----- 1 mfs mfs      0 Jan 14 08:40 changelog_ml.0.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 23:39 changelog_ml.10.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 22:39 changelog_ml.11.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 21:39 changelog_ml.12.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 20:39 changelog_ml.13.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 19:39 changelog_ml.14.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 18:39 changelog_ml.15.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 13 17:39 changelog_ml.16.mfs
    -rw-r----- 1 mfs mfs   4722 Jan 13 16:39 changelog_ml.17.mfs
    -rw-r----- 1 mfs mfs    249 Jan 13 15:39 changelog_ml.18.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 08:39 changelog_ml.1.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 07:39 changelog_ml.2.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 06:39 changelog_ml.3.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 05:39 changelog_ml.4.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 04:39 changelog_ml.5.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 03:39 changelog_ml.6.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 02:39 changelog_ml.7.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 01:39 changelog_ml.8.mfs
    -rw-r----- 1 mfs mfs   4692 Jan 14 00:39 changelog_ml.9.mfs
    -rw-r----- 1 mfs mfs 915016 Jan 14 09:00 csstats.mfs
    -rw-r----- 1 mfs mfs 777640 Jan 14 08:10 metadata_ml.mfs.back
    -rw-r----- 1 mfs mfs    519 Jan 14 09:16 sessions_ml.mfs

    8、停止metalogger服务
    [root@mail sbin]# ./mfsmetalogger -s
    working directory: /usr/local/mfs/var/mfs
    sending SIGTERM to lock owner (pid:12284)
    waiting for termination ... terminated

    9、如果没有启动metalogger服务
        在master server则会有如下提示信息产生:
       
        tail -f /var/log/messages
        Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!

    (三)、安装配置数据存储服务器(chunkserver)
    1、下载源代码
    http://ncu.dl.sourceforge.net/pr ... 1/mfs-1.6.11.tar.gz
    2、tar zxvf mfs-1.6.11.tar.gz
    3、创建用户 useradd mfs –s /sbin/nologin
    4、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs
    5、make ; make install
    6、配置
    配置文件位于安装目录/usr/local/mfs/etc,需要的配置文件有两个:mfschunkserver.cfg和 mfshdd.cfg,
    mfschunkserver.cf是主配置文件,mfshdd.cfg是服务器用来分配给 MFS使用的空间,最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。
    (1)、mfschunkserver.cfg的配置
    [root@mail etc]# vi mfschunkserver.cfg

    # WORKING_USER = mfs
    # WORKING_GROUP = mfs

    # DATA_PATH = /usr/local/mfs/var/mfs
    # LOCK_FILE = /var/run/mfs/mfschunkserver.pid
    # SYSLOG_IDENT = mfschunkserver

    # BACK_LOGS = 50

    # MASTER_RECONNECTION_DELAY = 30

    MASTER_HOST = 192.168.3.34
    MASTER_PORT = 9420

    # MASTER_TIMEOUT = 60

    # CSSERV_LISTEN_HOST = *
    # CSSERV_LISTEN_PORT = 9422

    # CSSERV_TIMEOUT = 60

    # CSTOCS_TIMEOUT = 60

    # HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg


    文中的大多数变量不难理解,类似于mfsmaster.cfg中的变量,
    其中:  
    MASTER_HOST: 元数据服务器的名称或地址,可以是主机名,也可以是ip地址
            CSSERV_LISTEN_PORT :这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制。
    HDD_CONF_FILENAME: 分配给MFS使用的磁盘空间配置文件的位置。


    (2)、mfshdd.cfg的配置

    [root@mail etc]# more mfshdd.cfg
    /data


    在这里/data是一个给mfs的分区,但在本机上是一个独立的磁盘的挂载目录,用 chown –R mfs:mfs /data 把属主改变为mfs。

    7、启动mfschunkserver  
    执行命令 /usr/local/mfs/sbin/mfschunkserver start ,如果没有意外,mfschunkserver 就应该作为一个守护进程运行起来。是否启动,检查如下:
    [root@nas etc]# ps -ef|grep mfs
    mfs      12327     1  0 08:38 ?        00:00:00 /usr/local/mfs/sbin/ mfschunkserver start
    8、停止mfschunkserver
    停止mfschunkserver,利用mfschunkserver–s来安全停止mfschunkserver。

    (四)、MFS客户端的安装及配置
    由于MFS客户端依赖于fuse,所以要先安装fuse。
    1、        fuse的安装
    (1)、解包 tar zxvf fuse-2.8.1.tar.gz
    (2)、./configure
    (3)、make;make install
    如果所在的系统已经安装了fuse,则跳过这个步骤,高版本的Linux内核已经支持了。
    2、        安装MFS客户端
    (1)、下载源代码
    http://ncu.dl.sourceforge.net/pr ... 1/mfs-1.6.11.tar.gz
    (2)、tar zxvf mfs-1.6.11.tar.gz
    (3)、创建用户 useradd mfs –s /sbin/nologin
    (4)、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs –enable-mfsmount
           说明:在这个过程中,当执行到–enable-mfsmount时可能出现”checking for FUSE… no  configure: error: mfsmount build was forced, but fuse development package is not installed”这样的错误,

    ........
    checking for FUSE... no
    ******************************** mfsmount disabled ********************************
    * fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
    ***********************************************************************************
    ......

    而不能正确安装MFS客户端程序,这是因为环境变量没有设置,先编辑/etc/profile在此文件中加入如下条目:
    export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    然后再利用source命令 /etc/profile使修改生效:source /etc/profile即可,也可直接在命令行中直接执行:
           export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    (5)、make ; make install
    3、挂接MFS文件系统
    (1)、创建挂接点 mkdir /mnt/mfs
    (2)、加载fuse模块到内核:modprobe fuse
    (3)、挂接MFS
    /usr/local/mfs/bin/mfsmount  /mnt/mfs –H 192.168.3.34 –p
    然后在输入密码就可以了
    特别需要注意的是,所有的MFS都是挂接同一个元数据服务器master的IP,而不是其他数据存储服务器chunkserver的IP。
    4、挂接MFSMETA文件系统
    (1)、创建挂接点 mkdir /mnt/mfsmeta
    (2)、挂接MFSMETA
    /usr/local/mfs-old/bin/mfsmount -m /mnt/mfsmeta/  -H 192.168.3.34
    (3)、查看目录内容
    [root@www ~]# ls -R /mnt/mfsmeta
    /mnt/mfsmeta:
    reserved  trash

    /mnt/mfsmeta/reserved:

    /mnt/mfsmeta/trash:
    0000015E|f181  undel

    /mnt/mfsmeta/trash/undel:
    5、查看挂载情况
    通过df命令查看磁盘使用情况来检查是否被挂接成功
    root@bzd mfs]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
                           73G   25G    45G      36%          /
    /dev/sda1             99M   13M    82M      13%          /boot
    none                  247M     0    247M     0%           /dev/shm
    MFS                   45G   204M   45G      1%                   /mnt/mfs
    MFSMETA              72K    72K     0        100%         /mnt/mfsmeta

    利用mount命令查看:
    [root@www ~]# mount
    mfsmeta#192.168.3.34:9421 on /mnt/mfsmeta type fuse (rw,nosuid,nodev,allow_other,default_permissions)
    mfs#192.168.3.34:9421 on /mnt/mfs type fuse (rw,nosuid,nodev,allow_other,default_permissions

    (5)、卸载已挂接的文件系统
    利用Linux系统的umount命令就可以了,例如:
    [root@www ~]# umount /mnt/mfs


    如果出现下列情况:
    [root@www ~]# umount /mnt/mfs
    umount: /mnt/mfs: device is busy
    umount: /mnt/mfs: device is busy
    则说明客户端本机有正在使用此文件系统,可以查明是什么命令正在使用,然后推出就可以了,最好不要强制退出。


    (五)、对mfscgiserv的使用
    Mfscgiserv是用python编写的一个web服务器,它的监听端口是9425,
    可以利用:
           /usr/local/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,chunkserver及master server,客户端的各种操作等等,绝对是个好工具。
         在任何一台装有浏览器的机器上都可以查看:
                              http://192.168.3.34:9425




    基本上就这些了。

  • 相关阅读:
    【Codeforces Round #645 (Div. 2) F】 Tasty Cookie
    【Codeforces Round #645 (Div. 2) E】 Are You Fired?
    【Educational Codeforces Round 88 (Rated for Div. 2) C】 Mixing Water
    20191114-4 Beta发布用户使用报告
    20191114-3 Beta阶段贡献分配
    beta发布
    20191107-1 每周例行报告
    beta 2/2 阶段中间产物提交入口
    beta week 2/2 Scrum立会报告+燃尽图 07
    beta week 2/2 Scrum立会报告+燃尽图 06
  • 原文地址:https://www.cnblogs.com/breg/p/3210437.html
Copyright © 2011-2022 走看看