分布式文件系统MFS(moosefs)实现存储共享
作者:田逸([email protected]) from: [url]http://net.it168.com/a2009/0403/270/000000270867.shtml[/url]
由于用户数量的不断攀升
,
我对访问量大的应用实现了可扩展、高可靠的集群部署(即
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
平台的安装都基本一致。
(一)
安装元数据服务
1
、下载
GNU
源码
wget [url]http://www.moosefs.com/files/mfs-1.5.12.tar.gz[/url]
2
、解包
tar zxvf mfs- 1.5.12 .tar.gz
3
、切换目录
cd mfs- 1.5.12
4
、创建用户
useradd mfs �Cs /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 �CR 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 �Cs
这种方式,如果直接使用
kill
杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过
mfsmetastore
来恢复的。
数据存储
chunkserver
服务器的安装配置
数据存储服务器
chunkserver
也是可以运行在各种类
unix
平台的,因此不再多说。一个
MFS
环境到底能集群多少服务器,作者的说法是上
PB
容量,个人建议,最好
3
台以上;并且专门用来做存储,不要把它跟
master
搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。
(一)、安装数据存储服务器
chunkserver
1
、下载
GNU
源码
wget [url]http://www.moosefs.com/files/mfs-1.5.12.tar.gz[/url]
2
、解包
tar zxvf mfs- 1.5.12 .tar.gz
3
、切换目录
cd mfs- 1.5.12
4
、创建用户
useradd mfs �Cs /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 �CR mfs:mfs /data
把属主改变。因为我的每个服务器只需贡献一个分区做为
MFS,
因此配置文件只需要如下一行内容就可以了:
(四)
关闭数据存储服务器
跟元数据服务器
master
相似,执行命令
/usr/local/mfs/sbin/mfschunkserver �Cs , chunkserver
服务就停下来了。为了使系统重启过程能自动启动
chunkserver
服务,可以通过在
/etc/rc.local
文件追加行
/usr/local/mfs/sbin/mfschunkserver start
来达到这个目的(
master
的自动重启处理也可同样处理)。