zoukankan      html  css  js  c++  java
  • centos6.3配置MFS服务器

    一、简介

           MooseFS(Moose File System,mfs)是一种分布式文件系统,它将数据分布在网络中的不同服务器上,支持FUSE(用户空间文件系统Filesystem in Userspace,简称FUSE),客户端挂载后可以作为一个 普通的Unix 文件系统使用MooseFS。
           MooseFS中共有四种角色:主控服务器master server、主控备份服务器metalogger server、存储块服务器chunkserver、客户端主机client。

           主控服务器负责各个存储服务器的管理、文件读写调度、文件空间回收以及恢复、多节点拷贝。
           主控备份服务器负责备份主控服务器的元数据、变化日志文件,文件类型为changelog_ml.*.mfs,以便在主控服务器出问题的时候可以恢复。
           存储块服务器负责提供存储空间,并为客户提供数据传输。
           客户端则通过fuse挂接主控服务器上所管理的存储块服务器,可以像操作本地文件一样操作MooseFS文件系统中的文件。

    二、NFS和MFS比较

    1、NFS的缺陷

         

           NFS虽然使用简单,但当NFS客户端访问量大时,通过NFS方式共享一个服务器的存储空间,使得NFS服务器不堪重负,并且执行读写都比较频繁的操作会出现意外的错误,对于高可靠的集群部署是有挑战的。
              这种架构除了性能问题外还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的性能毫无帮助。

    2、MFS

           分布式文件系统服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。 moosefs分布式文件系统,实施起来简单、不停止服务扩容、恢复服务容易,因为作为共享存储服务器是个不错的选择。
           MooseFS读写流程图:



     MFS的官方网站:http://www.moosefs.org/download.html

    上面有详细的MFS简介和MooseFS分布式文件系统安装向导以及MFS。

    三、详解

    1、获得二进制包

    先将mfs-1.6.25-1.tar.gz重命名为mfs-1.6.25.tar.gz

    #yum install fuse-devel pkgconfig zlib-devel    //build源码包需要的依赖

    #rpmbuild -ta mfs-1.6.25.tar.gz

    会生成6个rpm二进制安装包(其中debuginfo调试时使用):


    也可以通过tar zxvf mfs-1.6.25-1.tar.gz解压,使用./configure、make、make install安装(具体参考安装向导)。

    2、主控服务器master server

    (1)安装

    #rpm -ivh mfs-master-1.6.25-1.x86_64.rpm    //安装

    #rpm -ql mfs-master                //查询安装的文件路径,可以查看所有的安装文件,便于修改

    1. /etc/mfsexports.cfg.dist  
    2. /etc/mfsmaster.cfg.dist  
    3. /etc/mfstopology.cfg.dist  
    4. /usr/sbin/mfsmaster  
    5. /usr/sbin/mfsmetadump  
    6. /usr/sbin/mfsmetarestore  
    7. /usr/share/doc/mfs-master-1.6.25  
    8. /usr/share/doc/mfs-master-1.6.25/NEWS  
    9. /usr/share/doc/mfs-master-1.6.25/README  
    10. /usr/share/doc/mfs-master-1.6.25/UPGRADE  
    11. /usr/share/man/man5/mfsexports.cfg.5.gz  
    12. /usr/share/man/man5/mfsmaster.cfg.5.gz  
    13. /usr/share/man/man5/mfstopology.cfg.5.gz  
    14. /usr/share/man/man7/mfs.7.gz  
    15. /usr/share/man/man7/moosefs.7.gz  
    16. /usr/share/man/man8/mfsmaster.8.gz  
    17. /usr/share/man/man8/mfsmetarestore.8.gz  
    18. /var/lib/mfs  
    19. /var/lib/mfs/metadata.mfs.empty  

    (2)复制样例文件,以得到 master 所需的配置文件

    #cp mfsmaster.cfg.dist mfsmaster.cfg
    #cp mfstopology.cfg.dist mfstopology.cfg
    #cp mfsexports.cfg.dist mfsexports.cfg

           如果我们打算更改这些配置文件中的某些项目的值,则需要打开特定配置文件相关文本行前的注释,然后修改跟随其后的值。因为被注释掉的行,即是 MooseFS 内置的缺省值。

           Mfsmaster.cfg 配置文件包含主控服务器 master 相关的设置,想查看该配置文件更多信息使用命令 man mfsmaster.cfg。

          mfsexports.cfg 指定那些客户端主机可以远程挂接 MooseFS 文件系统,以及授予挂接客户端什么样的访问权限。例如指定只有 192.168.40.x 网段的主机可以以读写模式访问 MooseFS 的整个共享结构资源(/),在配置文件 mfsexports.cfg 文件的第二行改为或添加:

    (注:可以挂在根/目录下的子目录,配置文件加上192.168.40.0/24  /test  rw,alldirs,maproot=0,password=test,注意test目录是在根目录已经创建好的子目录,并且挂载时使用 mfsmount /mnt/client -H mfsmaster -o mfssubfolder=/test -p,否则会出现mfsmaster register error: Permission denied的错误。)

    1. # Allow everything but "meta".  
    2. #*                      /       rw,alldirs,maproot=0  
    3. 192.168.40.0/24 / rw,alldirs,maproot=0  
    4. 192.168.40.0/24 . rw  

          二进制文件 metadata 和文本文件 changelog 将被保存在目录/var/lib/mfs,安 装 master 时,会自动生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFS master 运必须有文件 metadata.mfs,这个文件是从 metadata.mfs.empty 改名而来,运行mfsmaster时该文件会被命名为metadata.mfs.back。只要保证日志文件和元数据文件的安全,即使元数据服务器遭到致命的破坏,也可以通过备份的元数据文件重新部署一套元数据服务器。

    #cd /var/lib/mfs

    #cp metadata.mfs.empty metadata.mfs   //MooseFS master 运行以后,metadata.mfs 文件大小将发生变,不会为空文件。

    (3)绑定主机名 mfsmaster 与 ip (每个节点都需绑定)修改/etc/hosts 文件,以绑定主机名 mfsmaster 与 ip 地址:

    1. 192.168.40.125       mfsmaster  

    (4)安装CGI

            为了监控 MooseFS 当前运行状态,可以安装运行 CGI 监控服务用浏览器查看整个MooseFS 的运行情况。

    #rpm -ivh mfs-cgi-1.6.25-1.x86_64.rpm

    #rpm -ql mfs-cgi

    (5)启动

    #/usr/sbin/mfsmaster start

    会出现问题:

    1. working directory: /var/lib/mfs  
    2. can't create lockfile in working directory: EACCES (Permission denied)  

    主要是没有设置运行用户和运行组,添加用户(安装完成后配置文件没有改动),也可以使用nobody:nobody。

    #groupadd mfs              //添加 mfs 组

    #useradd -g mfs mfs     //新增系统用户mfs

    #chown -R mfs.mfs /var/lib/mfs          //设置文件所属用户和组(也可以直接指定用户和组,不需要重新创建)

    #vim /etc/mfsmaster.cfg

    1.  WORKING_USER = mfs  
    2.  WORKING_GROUP = mfs  
    3. SYSLOG_IDENT = mfsmaster  
    4. LOCK_MEMORY = 0  

    然后正常启动!

    #/usr/sbin/mfscgiserv start

    会打不开网页,这是因为cgi文件没有可执行权限

    #chmod +x /usr/share/mfscgi/*.cgi

    然后启动,在浏览器地址栏输入 http://192.168.40.125:9425 即可查看 master 的运行情况(这时不能看见 chunk server 的数据)。


    3、备份服务器Backup server(metalogger)

    (1)安装

            安装备份服务器metalogger的主机在性能上应该比 master 强大(至少有更多的内存),一旦主控服务器 master 失效,只要导入 changelogs 到元数据文件,备份服务器 metalogger 将能接替发生故障的 master,行使管理服务器的职能。

          备份服务器单独安装,需要安装fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。添加mfs用户和组,也可指定到其他用户,或使用nobody:nobody。

    #rpm -ivh mfs-metalogger-1.6.25-1.x86_64.rpm

    #rpm -ql mfs-metalogger

    #cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

    #vimmfsmetalogger.cfg(不修改会出现Permission denied)

    1. WORKING_USER = mfs  
    2. WORKING_GROUP = mfs  

    接着运行备份服务 mfsmetaloger:

    #usr/sbin/mfsmetalogger start

    在生产环境里应当设置自动启动脚本,以便操作系统重新启动时MooseFSmfsmetalogger 服务也能自动运行。

    4、存储块服务器chunk server

    (1)安装

    若在其他主机上单独安装chunkserver需要安装fuse-devel,并添加mfs用户和组(可指定到其他用户)

    #rpm -ivh mfs-chunkserver-1.6.25-1.x86_64.rpm    //安装

    #rpm -ql mfs-chunkserver               //查询安装的文件路径,可以查看所有的安装文件,便于修改

    (2)准备 chunk server 服务所需的配置文件

    #cp mfschunkserver.cfg.dist mfschunkserver.cfg

    #cp mfshdd.cfg.dist mfshdd.cfg

    #vim /etc/mfschunkserver.cfg (想了解配置文件mfschunkserver.cfg更详细的信息,请查看手册页manmfschunkserver.cfg)

    1. WORKING_USER = mfs  
    2. WORKING_GROUP = mfs  

    (3)建立共享点

          在配置文件 mfshdd.cfg 中,给出了用于客户端挂接 MooseFS 分布式文件系统根分区所使用的共享空间位置。建议在 chunk server 上划分单独的空间新建一个设备挂载点作为储存点专门给 MooseFS 使用,这样做的好处是便于管理剩余空间。

          此处假定要使用两个共享点/mnt/mfschunks1 和/mnt/mfschunks2,在 mfshdd.cfg 加入下面的文本行:

    1. # mount points of HDD drives  
    2. #  
    3. #/mnt/hd1  
    4. #/mnt/hd2  
    5. #etc.  
    6. /mnt/mfschunks1  
    7. /mnt/mfschunks2  

           在启动 chunk server 前,需确保用户 mfs 有权限读写将要被挂接的分区(因为 chunk server 运行时要在此创建一个.lock 的文件)。否则出现以下错误:

    1. hdd space manager: can't create lock file '/mnt/mfschunks1/.lock': EACCES (Permission denied)  
    2. init: hdd space manager failed !!!  

    #chown -R mfs:mfs /mnt/mfschunks1
    #chown -R mfs:mfs /mnt/mfschunks2

    (注:若是单独与master的机器,还需执行chown -R mfs:mfs /var/lib/mfs和修改/etc/hosts添加192.168.40.125mfsmaster。)

    (4)开始启动 chunk server
    #/usr/sbin/mfschunkserver start

    再通过浏览器访问 http://192.168.40.125:9425就可以看到 MooseFS 系统的全部信息,包括主控 master 和存储服务 chunkserver 。

    (5)MooseFS chunk 以独占方式使用专门磁盘分区

           在上述操作过程中不需要这部分的内容,此部分是在实际应用环境下,将chunk server用专门磁盘分区作为设备挂载点,这样做是不要的,便于管理剩余空间,因为MooseFS 并不考虑其剩余空间能被另作他用。

           如果没有单独创建文件系统的条件,可以在文件中创建一个文件系统,在此准备两个 2GB 的文件(文件位于目录/var/lib/mfs/下,也可以放在其他目录下),并在其上创建文件系统,把他们格式化为 ext3,分别挂接在/mnt/mfschunks1 和/mnt/mfschunks2。

           操作步骤:挂接第一个文件系统

    1、创建镜像文件mfschunks1

    #dd if=/dev/zero of=/var/lib/mfs/mfschunks1 bs=1024 count=1 seek=$((2*1024*1024-1))

    2、创建文件系统

    ##mkfs -t ext3 /var/lib/mfs/mfschunks1

    3、创建挂接点

    #mkdir -p /mnt/mfschunks1

    4、挂接文件系统

    #mount -t ext3 -o loop /var/lib/mfs/mfschunks1 /mnt/mfschunks1

    挂接第二个文件系统的步骤与上面相同,#mount -t ext3 -o loop /var/lib/mfs/mfschunks2 /mnt/mfschunks2

    在启动 chunk server 前,需确保用户 mfs 有权限读写将要被挂接的分区(因为 chunk server 运行时要在此创建一个.lock 的文件):

    #chown -R mfs:mfs /mnt/mfschunks1

    #chown -R mfs:mfs /mnt/mfschunks2

    5、客户端主机client

           为了挂接基于 MooseFS 分布式文件,客户端主机必须安装 FUSE 软件包( fuse 版本号至少
    2.6,推荐使用版本号大于 2.7.2 的 fuse),#yum install fuse。

    安装客户端软件 mfsmount:

    #rpm -ivh mfs-client-1.6.25-1.x86_64.rpm

    (客户端若单独安装,需要安装fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。)

    #cp /etc/mfsmount.cfg.dist /etc/mfsmount.cfg

    假定客户端的挂接点是/mnt/mfs,将以下面的指令来使用 MooseFS 分布式共享文件系统:
    1、 创建挂接点
    #mkdir -p /mnt/mfs
    2、开始挂接操作
    #/usr/bin/mfsmount /mnt/mfs -H mfsmaster

    有时会出现mfsmaster register error: Permission denied:

    是因为mfsmaster的配置文件和挂载目录 不一致的原因,vim /etc/mfsexports.cfg

    1. # Allow everything but "meta".  
    2. #*                      /       rw,alldirs,maproot=0  
    3. 192.168.40.0/24 /test rw,alldirs,maproot=0  

           master的挂载配置文件中允许挂载的目录是/test,若用户#mfsmount/mnt -H mfsmaster(不加-o mfssubfolder-子文件夹,默认是挂载/)挂载根/目录会挂载不上,可以修改mfsexports.cfg配置文件为/,再进行挂在就没问题了。

    1. 192.168.40.0/24 / rw,alldirs,maproot=0  

    # /usr/sbin/mfsmaster restart

    有时挂载目录有内容,提示error in fuse_mount,可以使用 -o nonempty选项挂载。

    # mfsmount /mnt/mfs -H mfsmaster -o nonempty

    3、挂载meta文件系统

    首先保证mfsexports.cfg文件中加入:

    1. # Allow "meta".  
    2. *       .       rw  

    然后执行:

    #mfsmount -m /mnt/mfs -H mfsmaster

    可以不挂载MFS META文件系统,挂载该系统主要是为了恢复被误删除的文件。

    4、查看分区

    执行命令 df -h | grep mfs 检查分区情况(或使用mount):

    1. mfsmaster:9421        102G  256K  102G   1% /mnt/mfs  


    6、使用

    (1)备份

    #cd /mnt/mfs

    #mkdir dir1

    #mkdir dir2


    默认mfs将储存的文件只储存在一个节点上(master选取的)。


    设置储存在储存块dir2上的文件储存在两个节点上,做一个备份,系统会自动将数据同步到选定的节点上,这样达到里备份的效果。

    因master和trunk服务器在同一台机器上,即便设定了 goal=2 来到达保存两个副本但看到的只是一个副本而已,尽管有两个trunk挂在点,但它只是一个 chunk server。

    设置文件副本数量,一般以3份为佳。

    #mfssetgoal -r 3 /mnt/mfs
    #mfsgetgoal /mnt/mfs/
    #/mnt/mfs:  3

    (2)设置删除文件的空间回收时间

     #mfsgettrashtime dir2/passwd

    dir2/passwd: 86400

    #mfssettrashtime 300 /mnt/mfs

     获取删除dir2/passwd后在回收站中保存的时间,防止用户误删,这个数字不能设置的太高也不能太低,一般设置为300(5分钟)。

    (3)查看目录信息

    #mfsdirinfo -H /mnt/mfs

    (4)数据恢复

          二进制文件 metadata 和文本文件 changelog 将被保存在目录/var/lib/mfs

           执行数据恢复操作,其命令为:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs 恢复成功后再执行启动新的master服务操作。可参看数据恢复的例子:http://blog.ztrix.me/blog/2012/05/13/restore-mfs-metadata/

    (5)停止 MooseFS

    为了安全停止 MooseFS 集群,建议执行如下的步骤:
    在所有客户端用 unmount 命令先卸载文件系统(本例将是: umount /mnt/mfs)
    停止 chunk server 进程: /usr/sbin/mfschunkserver stop
    停止 metalogger 进程: /usr/sbin/mfsmetalogger stop
    停止主控 master server 进程: /usr/sbin/mfsmaster stop

    (6)简单使用脚本(配置启动)

    使用者可根据具体使用环境进行修改调试:

    1. #!/bin/bash  
    2. if [ $# -ne 1 ] ; then  
    3.     echo "please input:./moosefs.sh mfsmaster"  
    4.     exit 1  
    5. fi  
    6. if [ "$UID" -ne 0 ]; then  
    7.     echo "you are not root"  
    8.     exit 2  
    9. fi  
    10.   
    11. ALLOW_IP_RANGE="192.168.40.0/24"  
    12. MASTERIP="192.168.40.125"  
    13.   
    14. start_mfsmaster()  
    15. {  
    16.     echo "------start_mfsmaster------"  
    17.     cd /etc  
    18.     cp mfsmaster.cfg.dist mfsmaster.cfg  
    19.     cp mfstopology.cfg.dist mfstopology.cfg  
    20.     cp mfsexports.cfg.dist mfsexports.cfg  
    21.     chown -R nobody:nobody /var/lib/mfs  
    22.     cd /var/lib/mfs  
    23.     cp metadata.mfs.empty metadata.mfs  
    24.   
    25. cat >> /etc/mfsexports.cfg <EOF  
    26.     $ALLOW_IP_RANGE       /        rw,alldirs,maproot=0  
    27.     $ALLOW_IP_RANGE       .        rw  
    28. EOF  
    29.     echo "$MASTERIP      mfsmaster" >> /etc/hosts  
    30.     #sed -i '$a192.168.40.125    mfsmaster' /etc/hosts  
    31.     /usr/sbin/mfsmaster start  
    32.     /usr/sbin/mfsmaster test &>> start.log  
    33. }  
    34. start_mfsmetalogger()  
    35. {  
    36.     echo "------mfsmetalogger------"  
    37.     cd /etc  
    38.     cp mfsmetalogger.cfg.dist mfsmetalogger.cfg  
    39.     chown -R nobody:nobody /var/lib/mfs  
    40.     grep "mfsmaster" /etc/hosts &> /dev/null  
    41.     if [ $? -eq 0 ]; then  
    42.         echo "$MASTERIP      mfsmaster" >> /etc/hosts  
    43.     fi  
    44.     usr/sbin/mfsmetalogger start  
    45.     /usr/sbin/mfsmetalogger test &>> start.log  
    46. }  
    47. start_mfschunkserver()  
    48. {  
    49.     echo "------mfschunkserver------"  
    50.     cd /etc  
    51.     cp mfschunkserver.cfg.dist mfschunkserver.cfg  
    52.     cp mfshdd.cfg.dist mfshdd.cfg  
    53.     chown -R nobody:nobody /var/lib/mfs  
    54. cat >> /etc/mfsexports.cfg <EOF  
    55.     /mnt/mfschunks1  
    56.     /mnt/mfschunks2  
    57. EOF  
    58.     chown -R nobody:nobody /mnt/mfschunks1  
    59.     chown -R nobody:nobody /mnt/mfschunks2  
    60.   
    61.     grep "mfsmaster" /etc/hosts &> /dev/null  
    62.     if [ $? -eq 0 ]; then  
    63.         echo "$MASTERIP      mfsmaster" >> /etc/hosts  
    64.     fi  
    65.     /usr/sbin/mfschunkserver test &>> start.log  
    66. }  
    67. start_mfsclient()  
    68. {  
    69.     echo "------mfsclient------"  
    70.     cd /etc  
    71.     cp /etc/mfsmount.cfg.dist /etc/mfsmount.cfg  
    72.   
    73.     grep "mfsmaster" /etc/hosts &> /dev/null  
    74.     if [ $? -eq 0 ]; then  
    75.         echo "$MASTERIP      mfsmaster" >> /etc/hosts  
    76.     fi  
    77.   
    78.     mkdir -p /mnt/mfs  
    79.     /usr/bin/mfsmount /mnt/mfs -H mfsmaster  
    80.     /usr/bin/mfsmount -m /mnt/mfs -H mfsmaster  
    81.   
    82.     mkdir /mnt/mfs/sharedata  
    83.     mkdir /mnt/mfs/sharefile  
    84.     /usr/bin/mfssetgoal -r 3 /mnt/mfs  
    85.     /usr/bin/mfssettrashtime 300 /mnt/mfs  
    86. }  
    87. stop_mfs()  
    88. {  
    89.     result=`df -h | grep mfsmaster | awk -F" " '{print $6}'`  
    90.     OLD_IFS="$IFS"   
    91.     IFS=" "   
    92.     array=($result)   
    93.     IFS="$OLD_IFS"  
    94.     for element in ${arr[@]}  
    95.     do  
    96.         umount $element  
    97.     done  
    98.     /usr/sbin/mfschunkserver stop  
    99.     /usr/sbin/mfsmetalogger stop  
    100.     /usr/sbin/mfsmaster stop  
    101. }  
    102. main()  
    103. {  
    104.     case "$1" in  
    105.     mfsmaster)  
    106.         start_mfsmaster;;  
    107.     mfsmetalogger)  
    108.         start_mfsmetalogger;;  
    109.     mfschunkserver)  
    110.         start_mfschunkserver;;  
    111.     start_mfsclient)  
    112.         start_mfsclient;;  
    113.     *)  
    114.         echo "please input:./moosefs.sh mfsmaster or mfsmetalogger or mfschunkserver or mfsclient"  
    115.     esac   
    116. }  
    117. main $1  

    四、总结

    (1)使用configre、make、make install的方式可以参考官方文档,具体参数和配置都给的很详细,官方网站http://www.moosefs.org/download.html

    (2)集群部署还需要进一步强化,数据恢复及其他关于MooseFS的内容以后会更新。

    (3)MooseFS 命令的使用方法:http://www.moosefs.org/reference-guide.html#using-moosefs

    (4)上述的安装包和参考文档已上传到csdn上,需要下载的可以点击http://download.csdn.net/detail/taiyang1987912/8229595

    (5)MooseFS使用还有很多的细节,本人也不能面面俱全,若有更好的思路请与本人练习,邮箱aoyang888@qq.com,在此先感谢。

  • 相关阅读:
    HDU_1016——素环问题DFS
    什么是REST?以及RESTful的实现
    WebApi系列~基于RESTful标准的Web Api
    理解RESTful架构
    国内技术管理人员批阅google的“春运交通图”项目
    项目质量量化考核建议
    设计模式在交易系统中的应用
    修改Chrome临时文件位置
    百度员工离职总结:如何做个好员工?
    Firebird数据库系统的开发团队
  • 原文地址:https://www.cnblogs.com/kabi/p/5684335.html
Copyright © 2011-2022 走看看