分布式文件系统MFS(moosefs)实现存储共享(第二版)
作者:田逸(sery@163.com)
由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即
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特性(根据官方网站翻译)
★ 高可靠性(数据能被分成几个副本存储在不同的计算机里)
★ 通过增加计算机或增加新的硬盘动态扩充可用磁盘空间
★ 可以设置删除文件的空间回收时间
[root@mysql-bk serydir]# mfsgettrashtime bind-9.4.0.tar.gz
bind-9.4.0.tar.gz: 600
文件被删除10 分钟后(600 秒),才真正删除文件,回收磁盘空间。
★ 为文件创建快照
MFS文件系统的组成
1、 元数据服务器。在整个体系中负责管理管理文件系统,目前MFS 只支持一个元数据服
务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS
能支持多个master 服务器,进一步提高系统的可靠性。
2、 元数据日志服务器。备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs。
当元数据服务器数据丢失或者损毁,可从日志服务器取得文件进行恢复。
3、 数据存储服务器chunkserver。真正存储用户数据的服务器。存储文件时,首先把文件分
成块,然后这些块在数据服务器chunkserver 之间复制(复制份数可以手工指定,建议
设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,
可靠性也越高。
4、 客户端。使用MFS 文件系统来存储和访问的主机称为MFS 的客户端,成功挂接MFS
文件系统以后,就可以像以前使用NFS 一样共享这个虚拟性的存储了。
元数据服务器安装和配置
元数据服务器可以是linux,也可以是unix,你可以根据自己的使用习惯选择操作系统,在我的
环境里,我是用freebsd 做为MFS 元数据的运行平台。GNU 源码,在各种类unix 平台的安装
都基本一致。
(一) 安装元数据服务
1、下载GNU 源码
wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
2、解包 tar zxvf mfs-1.6.11.tar.gz
3、切换目录 cd mfs-1.6.11
4、创建用户 useradd mfs –s /sbin/nologin
5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、编译安装 make ; make install
(二) 配置元数据服务
元数据服务器的配置文件被放置于安装目录/usr/local/mfs/etc。与mfs-1.5.12 版本不同的是:
mfs-1.6.x 版安装完成只有模版文件,其后缀形如mfsmaster.cfg.dist。为了使mfs master 正常
工作,需要两个配置文件mfsmaster.cfg 及mfsexports.cfg,前者为主配置文件,后者为权限控
制文件(mfs 客户端挂接时使用)。
( 1 ) 主配置文件mfsmaster.cfg, 可直接从模版文件拷贝而来, 打开这个配置文件
/usr/local/mfs/etc/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
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmaster.lock
尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然
后明确指定其取值。接下来说明一下其中一些项目的含义。
◆ EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 权限控制文件的存放位
置。
◆ DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这
些数据都包括哪些呢?进目录看看,大致分3 种类型的文件:
这些文件也同样要存储在其他数据存储服务器的相关目录。
◆ MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver,即元数据服务器
使用9420 这个监听端口来接受数据存储服务器chunkserver 端的连接。
◆ MATOML_LISTEN_PORT = 9419 MATOML---master to metalogger,用于备份元数据
服务器的变化日志。注:Mfs-1.5.12 以前的版本没有这个项目。
◆ MATOCU_LISTEN_PORT = 9421 元数据服务器在9421 端口监听,用以接受客户端
对MFS 进行远程挂接(客户端以mfsmount 挂接MFS)
◆ 其他部分看字面意思都不难理解。还有几个与时间有关的数值,其单位是秒。
这个配置文件,不必做修改就能工作了。
(2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接从模版文件复制而来。这个文件的内
容,十分类似NFS 服务器的exports 文件.实际配置时,可参照这个文件的默认行来修改以
满足自己的应用需求.我的mfsexports.cfg 文件的内容为:
192.168.93.0/24 / rw
(3)复制文件
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
这是一个8 字节的文件,为mfs-1.6.x 新增项目。
转载于:https://blog.51cto.com/bobwu/531790