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

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

版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://sery.blog.51cto.com/10037/147756


由于用户数量的不断攀升 , 我对访问量大的应用实现了可扩展、高可靠的集群部署(即 lvs+keepalived 的方式),但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器 NFS 。在我这个网络环境里, N 个服务器通过 nfs 方式共享一个服务器的存储空间,使得 NFS 服务器不堪重负。察看系统日志,全是 nfs 服务超时之类的报错。一般情况下,当 nfs 客户端数目较小的时候, NFS 性能不会出现问题;一旦 NFS 服务器数目过多,并且是那种读写都比较频繁的操作,所得到的结果就不是我们所期待的。下面是某个集群使用 nfs 共享的示意图:
这种架构除了性能问题而外,还存在单点故障,一旦这个 NFS 服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用 rsync 方式同步数据到另外一个服务器上做 nfs 服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对 nfs 服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系( 1 NFS 服务器,多个 NFS 客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。
 
到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如 lustre,hadoop,Pnfs 等等。我尝试了 PVFS,hadoop,moosefs 这三种应用,参看了 lustre KFS 等诸多技术实施方法,最后我选择了 moosefs (以下简称 MFS )这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法:
1、  实施起来简单。 MFS 的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看 lustre 700 多页的 pdf 文档,让人头昏吧。
2、  不停服务扩容。 MFS 框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注: hadoop 也实现了这个功能。
3、  恢复服务容易。除了 MFS 本身具备高可用特性外,手动恢复服务也是非常快捷的,原因参照第 1 条。
4、  我在实验过程中得到作者的帮助,这让我很是感激。
MFS 文件系统的组成
1、   元数据服务器。在整个体系中负责管理管理文件系统,目前 MFS 只支持一个元数据服务器 master ,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后 MFS 能支持多个 master 服务器,进一步提高系统的可靠性。
2、   数据存储服务器 chunkserver 。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver 之间复制(复制份数可以手工指定,建议设置副本数为 3 )。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。
3、   客户端。使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。
 
元数据服务器安装和配置
元数据服务器可以是 linux, 也可以是 unix, 你可以根据自己的使用习惯选择操作系统 , 在我的环境里 , 我是用 freebsd 做为 MFS 元数据的运行平台。 GNU 源码,在各种类 unix 平台的安装都基本一致。
 
(一)    安装元数据服务
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
6 、编译安装 make ; make install
 
(二)    配置元数据服务
元数据服务器的配置文件是 mfsmaster.cfg, 我在安装 MFS 时指定了前缀,因此这个文件的位置在 /usr/local/mfs/etc/mfsmaster.cfg. 我们打开这个配置文件,看看都有哪些内容:
尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。
     LOCK_FILE = /var/run/mfs/mfsmaster.pid 文件锁所在的位置,它的功能是避免启动多次启动同一个守护进程。由于系统中本来不存在目录 /var/run/mfs ,因此需要手动创建 mkdir /var/run/mfs ,然后更改其属主 chown –R mfs:mfs /var/run/mfs 这样 MFS 服务就能对这个目录有创建 / 写入 mfsmaster.pid 文件的权限了。
     DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分 3 种类型的文件:
这些文件也同样要存储在其他数据存储服务器的相关目录。
     MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver ,即元数据服务器使用 9420 这个监听端口来接受数据存储服务器 chunkserver 端的连接。
     MATOCU_LISTEN_PORT = 9421 元数据服务器在 9421 端口监听,用以接受客户端对 MFS 进行远程挂接(客户端以 mfsmount 挂接 MFS
     其他部分看字面意思都不难理解。还有几个与时间有关的数值,其单位是秒。
这个配置文件,不必做修改就能工作了。
 
(一)    元数据服务器 master 启动
元数据服务器可以单独启动,即使没有任何数据存储服务器( chunkserver )也是能正常工作的,因此当我们安装配置完 MFS 后,即可启动它。执行命令 /usr/local/mfs/sbin/mfsmaster start ,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过 3 个方面来检查一下 MFS master 的运行状况:
(四)、关闭元数据服务器
关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster –s 这种方式,如果直接使用 kill 杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的。
 
数据存储 chunkserver 服务器的安装配置
数据存储服务器 chunkserver 也是可以运行在各种类 unix 平台的,因此不再多说。一个 MFS 环境到底能集群多少服务器,作者的说法是上 PB 容量,个人建议,最好 3 台以上;并且专门用来做存储,不要把它跟 master 搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。
 
(一)、安装数据存储服务器 chunkserver
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
6 、编译安装 make ; make install
 
(二)配置数据存储服务器 chunkserver
数据存储服务器有 2 个配置服务器需要修改,一个是主配置文件 mfschunkserver.cfg , 另一个配置文件是 mfshdd.cfg 。每个服务器用来分配给 MFS 使用的空间最好是一个单独的硬盘或者一个 raid 卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不好,只能用来做实验了。
1 、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg 。下面是修改了的配置文件:
 
 
这个配置文件里,没有注释符号“ # ”就是被修改过的项了,接下来是里面某些项的含义说明:
     MASTER_HOST = 192.168.0.19 元数据服务器的名称或地址,可以是主机名,也可以是 ip 地址,只要数据存储服务器能访问到元数据服务器就行。
     LOCK_FILE = /var/run/mfs/mfschunkserver.pid 与元数据服务器 master 的处理完全相同 .
     CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver, 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制。
     HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给 MFS 使用的磁盘空间配置文件的位置。
2 、修改配置文件 /usr/local/mfs/etc/mfshdd.cfg 。在我的服务器上,只有一个 1T SATA 硬盘,分了一个 800G 容量的分区来做为 MFS 存储服务的组成部分。为了使 mfs 拥有写目录的权限,需要修改目录的属主。我的服务器的分区挂接点是 /data , chown –R mfs:mfs /data 把属主改变。因为我的每个服务器只需贡献一个分区做为 MFS, 因此配置文件只需要如下一行内容就可以了:
(四)    关闭数据存储服务器
跟元数据服务器 master 相似,执行命令 /usr/local/mfs/sbin/mfschunkserver –s , chunkserver 服务就停下来了。为了使系统重启过程能自动启动 chunkserver  服务,可以通过在 /etc/rc.local 文件追加行   /usr/local/mfs/sbin/mfschunkserver start 来达到这个目的( master 的自动重启处理也可同样处理)。


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 使修改生效。
(二)挂接和使用 MFS 文件系统
1 、创建挂接点 mkdir /mnt/mfs
2 、挂接 MFS /usr/local/mfs/bin/mfsmount –h 192.168.0.19 . 注意,所有的 MFS 都是挂接同一个元数据服务器 master, 而不是其他数据存储服务器 chunkserver !
 
一、 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
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 文件系统。
 
破坏性测试
、测试数据存储服务器
我用 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 作者)提供帮助!
 
补充: linux可能需要在执行mfsmount前先加载fuse模块到内核 /sbin/modprobe fuse
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值