网络通信 频道

分布式文件系统MFS 实现存储共享剖析(下)

  编者按:现在,有大量的企业采用共享存储服务器NFS的方式,来对应用数据进行网络存储,但这存在性能瓶颈和单点故障的问题,于是,分布式文件存储管理系统开始流行起来。本文为大家推荐了开源的分布式文件系统MFS,相信对大家有所帮助。

  分布式文件系统MFS(moosefs) 实现存储共享剖析(上)
  分布式文件系统MFS(moosefs) 实现存储共享剖析(中)
  分布式文件系统MFS(moosefs) 实现存储共享剖析(下)

  MFS客户端的安装及配置

  我的生产环境,只有centos和freebsd两种环境,因此下面的描述,只有centos及freebsd挂接MFS文件系统的情形,其他类型的unix系统,待日后尝试。对比前面的操作过程,客户端挂接后使用MFS集群文件系统才是最费时的事情。

  一、 centos作为MFS的客户端。
  (一) 安装MFS客户端
  ◆Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.7.4.tar.gz。
  1、解包 tar zxvf fuse-2.7.4.tar.gz
  2、切换目录 cd fuse-2.7.4.
  3、配置  ./configure
  4、编译安装  make;make install
  如果系统已经安装了fuse,则跳过这个步骤。
  ◆安装MFS客户端程序
  1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。
  export KG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
  如果不执行这个操作,在后面安装MFS的过程中,执行命令
  ./configure --enable-mfsmount时可能出现"checking for FUSE... no  configure: error: mfsmount build was forced, but fuse development package is not installed"这样的错误,而不能正确安装MFS客户端程序。
  2、解包 tar zxvf mfs-1.5.12.tar.gz
  3、切换目录 cd mfs-1.5.12
  4、创建用户 useradd mfs -s /sbin/nologin 
  5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
  6、编译安装 make ; make install
  ◆检查MFS客户端安装的结果。通过查看目录/usr/local/mfs/bin目录的文件,应该发现如下文件:


  
  (二)挂接和使用MFS文件系统
  1、创建挂接点 mkdir /mnt/mfs


  2、挂接MFS /usr/local/mfs/bin/mfsmount -h 192.168.0.19 .注意,所有的MFS都是挂接同一个元数据服务器master,而不是其他数据存储服务器chunkserver !


  3、通过查看磁盘使用情况来检查是否被挂接成功。


  [root@mysql-bk ~]# df -h
  Filesystem            Size  Used Avail Use% Mounted on
  /dev/hda1              19G  2.7G   16G  15% /
  /dev/hda7              51G  180M   48G   1% /backup
  /dev/hdc1             145G  6.4G  131G   5% /data
  /dev/hda5              19G  173M   18G   1% /home
  /dev/hda3              24G  217M   23G   1% /var
  /dev/hda2              29G  1.6G   26G   6% /usr
  tmpfs                 1.7G     0  1.7G   0% /dev/shm
  MFS                   2.5T  256G  2.2T  11% /mnt/mfs
  4、 进入目录/mnt/mfs,上传一个文件,看是否正常?接着在手动用touch 创建一个文件,然后再删除它们,看是否可以正常操作。


  5、 设置文件副本数量,建议以3份为佳。


  设置副本数目
  mfsrsetgoal 3 /mnt/mfs
  查看设置是否如我所愿
  mfsgetgoal /mnt/mfs/serydir/bind-9.4.0.tar.gz
  /mnt/mfs/serydir/bind-9.4.0.tar.gz: 3
  6、设置删除文件后空间回收时间。默认的回收时间为7天(604800秒)
  修改回收时间为10分钟
  mfsrsettrashtime 600 /mnt/mfs
  6、 把挂接命令追加到文件/etc/rc.local,可实现开机自动启动挂接MFS.

  二、 freebsd作为MFS客户端
  Freebsd安装和挂接MFS集群文件系统,比centos操作起来要复杂一些.mfsmount需要依赖fuse,并且需要在内核中加载fusefs模块。

  (一)安装fuse
  1、解包 tar zxvf fuse-2.7.4.tar.gz
  2、切换目录 cd fuse-2.7.4.
  3、配置  ./configure
  4、编译安装  make;make install
  如果系统已经安装了fuse,则跳过这个步骤。

  (二) 安装内核模块fusefs-kmod
  1、执行系统命令sysinstall
     
  2、光标选定Configure,进入下一步。
     
  3、选择"Packages",进入下一步。
     
  4、选择"FTP"作为安装源,进入下一步。
     
  5、选择"kld"后,回车执行默认动作"[OK]",进入下一步选软件包。
     
  6、选择"fusefs-kmod-0.3.9.p1_2",按[OK]返回到第"4"步出现的那个操作界面。这时我们用"Tab"键选中底部右边的"Install",完成安装后,会出现一个安装成功的提示,然后瞬间消失。
  ◆ 加载fusefs模块 kldload /usr/local/modules/fuse.ko .如果加载不成功,请检查是否存在模块文件fuse.ko.
  ◆ 检查fusefs模块是否被加载到内核:
     
  如果没有类似上面馆的输出,就表明fusefs模块没有加载成功。

  (三)安装包 pkg-config:
  1、cd /usr/ports/devel/pkg-config
  2、make install clean

  (四)安装MFS客户端
  1、解包 tar zxvf mfs-1.5.12.tar.gz
  2、切换目录 cd mfs-1.5.12
  3、创建用户 pw useradd mfs -s /sbin/nologin 
  4、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
  5、编译安装 make ; make install
  ◆检查MFS客户端安装的结果。通过查看目录/usr/local/mfs/bin目录的文件,应该发现如下文件:


  

  (五)挂接和使用MFS文件系统
  1、创建挂接点 mkdir /mnt/mfs
  2、挂接MFS /usr/local/mfs/bin/mfsmount -h 192.168.0.19 .注意,所有的MFS都是挂接同一个元数据服务器master,而不是其他数据存储服务器chunkserver !
  3、通过查看磁盘使用情况来检查是否被挂接成功。
  [root@mysql-bk ~]# df -h
  Filesystem                      Size    Used   Avail Capacity  Mounted on
  /dev/ad4s1a                     26G    570M     24G     2%    /
  devfs                          1.0K    1.0K      0B   100%    /dev
  /dev/ad4s1g                     356G    157G    170G    48%    /data
  /dev/ad4s1f                     17G    215M     15G     1%    /home
  /dev/ad4s1d                     28G    1.1G     25G     4%    /usr
  /dev/ad4s1e                     24G    362M     21G     2%    /var
  /dev/fuse0                      2.5T    256G     2.2T    11%  /mnt/mfs
  4、 进入目录/mnt/mfs,我们可以看见前面步骤用centos 上传到分布式文件系统MFS里的文件。
  5、 设置文件副本数量,建议以3份为佳。
  设置副本数目
  mfsrsetgoal 3 /mnt/mfs
  查看设置是否如我所愿
  mfsgetgoal /mnt/mfs/serydir/bind-9.4.0.tar.gz
  /mnt/mfs/serydir/bind-9.4.0.tar.gz: 3
  6、设置删除文件后空间回收时间。默认的回收时间为7天(604800秒)
  修改回收时间为10分钟
  mfsrsettrashtime 600 /mnt/mfs

  (六)自动挂接MFS
  创建文件/etc/rc.local,加入如下内容:.
  #!/bin/sh
  /sbin/kldload /usr/local/modules/fuse.ko
  /usr/local/mfs/bin/mfsmount -h 192.168.0.19
  就能实现开机或重启系统自动挂接MFS文件系统。
 

  是否抗压? 破坏性测试

  一、测试数据存储服务器
  我用5个服务器组成了MFS的存储平台,其中一个是master,其余四个服务器是chunkserver.先停止一个chunkserver服务,然后在某个MFS客户端往挂接点的目录(/mnt/mfs)里复制数据或者创建目录/文件、或者读取文件、或者删除文件,观察操作是否能正常进行。再停止第2个chunkserver,重复执行上述操作;然后再停止第3个服务器,执行类似的文件读些操作。减少chunkserver试验后,我们再来逐步增加chunkserver服务器,然后对MFS执行读写等相关访问操作,检验其正确性。

  通过增减chunkserver服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务。

  二、测试元数据服务器
  元数据服务器最重要的文件在目录 /usr/local/mfs/var/mfs ,MFS每一个数据的变化,都被记录在这个目录的文件里,我们可以通过备份这个目录的全部文件,来保障整个MFS文件系统的可靠性.在正常情况下,元数据服务器的改变日志文件(changelogs) 实时地、自动地复制到所有的数据存储服务器,并且以changelog_csback.*.mfs的形式命名。换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver取得恢复所需要的文件。

  (一)本地测试
  1、停止元数据服务 /usr/local/mfs/sbin/mfsmaster
  2、备份元数据服务器数据 cd /usr/local/mfs/var; tar czvf mfs.tgz mfs
  3、删除目录 mv mfs mfs.bk 或 rm -rf mfs
  4、启动元数据服务 ../sbin/mfsmaster start 启动失败,提示不能初始化数据。
  5、解包 tar zxvf mfs.tgz
  6、执行恢复操作 .. /sbin/mfsmetarestore -a
  7、启动元数据服务 ../sbin/mfsmaster start
  8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

  (二) 迁移测试
  1、 安装新的MFS元数据服务器。
  2、 复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器。
  3、 停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。
  4、 更改新的元数据服务器的ip为原来那个服务器的ip.
  5、 启动新的元数据服务 /usr/local/mfs/sbin/mfsmaster start
  6、 在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

  感谢Pawel Kalinowski (mfs作者)提供帮助!

                                                2009/3/30

0
相关文章