1、有关mfs分布式文件系统的生设计学士学位论文设计总说明当前互联网高速发展,在互联网的众多应用中,视频网站是其中主要应之一。视频文件中央存储是视频网站的视频总库,拥有该视频网站的所有视频文件。以前的存储系统是san + nas 的方式,特点是需要的厂家支持,要用专业的网络设备,专业的人才稀少,设备成本高昂。1TB的存储空间的成本要5000,而现在互联网海量的视屏文件,上EB的存储空间,其主要的收入来自于广告,而版权,带宽是其主要的支出,加上运营,损耗,传统的存储方式成本实在太高,无法使用,于是需要使用低成本,高性能的解决方案。由于科学技术的不断的发展,硬件成本不断的降低,大容量硬盘已经价格低廉,
2、而传统的存储价格没有降低,于是有了利用硬盘价格便宜,用本地磁盘当存储的分布式存储的解决方案,来应对现在的形式。由于中央存储是视频网站后端管理系统视频下发与分发的一个环节,性能要求主要来自于视频网站新视频下发与分发的环节。以每天发布50部视频,每部视频 1G 为例,要求中央存储写性能 20MB/s,以视频网站流媒体节点 6的为例,同时读的性能要120MB/s。稳定性要求是不会因为大流量而宕机。冗余要求每个数据文件至少要有2份拷贝。易用性要求当系统发生故障时能快速的恢复,当存储空间不足时,能够快速的扩容。目录1 绪论 11.1 可靠性 11.1.1 可靠度的重要性 11.1.2 可信性基准程序法
3、11.2 故障注入 21.2.1 故障注入实现方法综述 21.2.2 软件实现的故障注入方法 22 方案综述 32.1 课题思路 32.2 模拟方法选择 32.2.1 故障、错误、失效概念 32.2.2 故障参数选择 33 软件模拟方案生成 43.1 故障、错误分类法及传播模型 43.1.1 ODC故障、错误分类 43.1.2 ODC分类下的数据 43.1.3 故障传播模型 43.2 错误、故障细化分析和模拟 43.2.1 错误类型分析 43.2.2 故障分析基础 43.2.3 赋值故障分析和模拟 43.2.4 控制故障分析和模拟 43.2.5 算法故障分析和模拟 53.2.6 时间/序列故障
4、分析和模拟 53.2.7 接口故障分析和模拟 53.2.8 功能故障分析 53.3 软件故障模拟方案 54 硬件模拟方案生成 64.1 电气级硬件故障 64.2 硬件故障的表征及模拟方案 64.2.1 处理器硬件故障分析和模拟 64.2.2 地址总线硬件故障分析和模拟 64.2.3 内存和数据总线硬件故障分析和模拟 64.3 硬件故障模拟方案 65 结论 8参考文献 9附录 10谢辞 111 分布式文件系统moosefs由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即lvs+keepalived的方式),但仍然有用户反馈访问慢的问题。通过排查各服务器的情况,发现问题
5、的根源在于共享存储服务器NFS。在我这个网络环境里,多个服务器通过nfs方式共享一个服务器的存储空间,使得NFS服务器不堪重负。察看系统日志,全是nfs服务超时之类的报错。一般情况下,当nfs客户端数目较小的时候,NFS性能不会出现问题;一旦NFS服务器数目过多,并且是那种读写都比较频繁的操作,所得到的结果就不是我们所期待的。图8-1为某个集群使用nfs共享的情形: 图1-1 多个应用共享nfs文件系统这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用。尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的
6、性能毫无帮助。基于这样一种需求,我们需要对nfs服务器进行优化或采取别的解决方案。然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了。通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。1.1 关于moosefs到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如lustre,hadoop,Pnfs等等。我尝试了PVFS,hadoop,moosefs这三种应用,参看了lustre、KFS等诸多技术实施方法,最
7、后我选择了moosefs(以下简称MFS)这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法:1、 实施起来简单。MFS的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看lustre 700多页的pdf文档,让人头昏吧。2、 不停服务扩容。MFS框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注:hadoop也实现了这个功能。3、 恢复服务容易。除了MFS本身具备高可用特性外,手动恢复服务也是非常快捷的,原因参照第1条。4、 我在实验过程中得到作者的帮助,这让我很是感激。1.1.1 MFS特性(根据官方网站翻译) 高可靠性(数
8、据能被分成几个副本存储在不同的计算机里)。图8-2展示了这种特性: 图1-2 MFS文件副本存储位置 通过增加计算机或增加新的硬盘动态扩充可用磁盘空间 可以设置删除文件的空间回收时间rootmysql-bk serydir# mfsgettrashtime bind-9.4.0.tar.gz bind-9.4.0.tar.gz: 600 文件被删除10分钟后(600秒),才真正删除文件,回收磁盘空间。 为文件创建快照1.1.2 MFS文件系统的组成MFS分布式文件系统由元数据服务器、元数据日志服务器(也称备份服务器)、数据存储服务器、客户端(用户主机)等几部分组成:元数据服务器。在整个体系中负
9、责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。元数据日志服务器。备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当元数据服务器数据丢失或者损毁,可从日志服务器取得文件进行恢复。数据存储服务器chunkserver。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”
10、越大,可靠性也越高。客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。1.1.3 MFS读写处理过程MFS读取数据分以下4个步骤:1、 客户端向元数据服务器发请求。2、 元数据服务器把所需数据存放的位置(chunk server的ip地址及chunk编号)告知客户端。3、 客户端向已知chunk服务器请求发送数据。4、 客户端取得所需数据。整个读取数据如图1-3所示(图片来源于官方网站www.moosefs.org):图1-3 moosefs读取数据过程数据传输并不通过元数据服务器。这既减轻了元数据服务
11、器的压力,同时也大大增加了整个系统的吞吐能力。在多个客户端读取数据时,读取点(chunk server)有可能被分散到不同的服务器。写入数据的过程比读取数据要复杂一些,它大致分8个步骤:1、 客户端向元数据服务器发送写入请求。2、 元数据服务器与chunk server进行如下交互(这个过程是可选项目,只有当所需的chunks【注1】不存在时才进行这个交互):1 元数据库服务器指示在某些chunk 服务器创建分块chunks.2 Chunk服务器告知元数据服务器,第步的操作成功。3、 元数据服务器告知客户端,你可以在哪个chunk服务器的那个chunks写入数据。4、 向指定的chunk服务器
12、写入数据。5、 与其他chunk服务器进行数据同步。同步的服务器依据设定的副本数而定副本为2,则需同步一个chunk 服务器。6、 Chunk服务器之间同步成功。7、 Chunk服务器告知客户端数据写入成功。8、 客户端告知元数据服务器本次写入完毕。整个写入过程如图1-4所示(图片来源于官方网站www.moosefs.org):图1-4 MFS数据写入过程与读取数据一样,MFS写入数据过程中,数据的传输任然不需要经过元数据服务器。注1chunk server是相对于服务器的;而chunks则是以磁盘分区为对象,一个chunks就是一个MFS磁盘分配单位2 元数据服务器安装和配置元数据服务器可以
13、是linux,也可以是unix,你可以根据自己的使用习惯选择操作系统,在我的环境里,我是用freebsd做为MFS元数据的运行平台。GNU源码,在各种类unix平台的安装都基本一致。2.1.1安装元数据服务1、下载GNU源码wget 2、解包 tar zxvf mfs-1.6.11.tar.gz3、切换目录 cd mfs-1.6.114、创建用户 useradd mfs s /sbin/nologin 5、配置 ./configure -prefix=/usr/local/mfs -with-default-user=mfs -with-default-group=mfs6、编译安装 make
14、 ; make install2.1.2配置元数据服务元数据服务器的配置文件被放置于安装目录/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,看看都有哪些内容:
15、# 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 =
16、*# 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#
17、 LOCK_FILE = /var/run/mfs/mfsmaster.lock尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 权限控制文件的存放位置。DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分3种类型的文件,如图8-5所示:图1-5 mfs文件类型这些文件也同样要存储在其他数据存储服务器的相关目录。
18、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)其他部分看字面意思都不难理解。还有几个与时间有关的数值,
19、其单位是秒。这个配置文件,不必做修改就能工作了。(2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接从模版文件复制而来。这个文件的内容,十分类似NFS服务器的exports文件实际配置时,可参照这个文件的默认行来修改以满足自己的应用需求我的mfsexports.cfg文件的内容为:192.168.93.0/24 / rw,alldirs,mapall=mfs(3)复制文件 cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs 这是一个8字节的文件,为
20、mfs-1.6.x新增项目。2.1.3元数据服务器master启动元数据服务器可以单独启动,即使没有任何数据存储服务器(chunkserver)也是能正常工作的;因此当我们安装配置完MFS后,即可启动它。执行命令 /usr/local/mfs/sbin/mfsmaster start ,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过3个方面来检查一下MFS master的运行状况:1、 检查进程 ,运行结果如图2-6所示:图8-6 检查MFS master进程运行情况2、 检查网络状态,运行结果如图2-7所示:图8-7 MFS master监听端口3、 检查系统日
21、志,输入内容如图2-8所示:图2-8 MFS master启动后的系统日志输入MFS的日志会直接写入系统日志。当我们增加数据存储服务器(chunkserver)或数据存储服务器(chunkserver)处故障时,都能在系统日志找到这些记录。注意,这个日志跟元数据变化日志不是一回事情。2.1.4 关闭元数据服务器关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster s 这种方式(或者执行/usr/local/mfs/sbin/mfsmaster stop)。如果直接使用kill杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当
22、然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的。2.2元数据日志服务器安装和配置元数据日志服务为mfs 1.6以后版本新增的服务,即可以把元数据日志保留在元数据服务器,也可以单独存储。为保证其可靠性,最好单独放置。需要注意的是,源数据日志守护进程跟元数据服务器(master)在同一个服务器上,备份元数据日志的服务器作为它的客户端,从元数据服务器取得日志文件进行备份。2.2.1 安装元数据日志服务器metalogger1、下载GNU源码wget 2、解包 tar zxvf mfs-1.6.11.tar.gz3、切换目录 cd mfs-1.6.114、创建用户 usera
23、dd mfs s /sbin/nologin 5、配置 ./configure -prefix=/usr/local/mfs -with-default-user=mfs -with-default-group=mfs6、编译安装 make ; make install2.3.1元数据日志服务(metalogger)配置该服务仅需要一个配置文件,这里我们只需要从模板文件复制一个,然后稍微加以修改即可,下面是我的某个metalogger 的配置文件:roothynfs-2 etc# more mfsmetalogger.cfg# WORKING_USER = mfs# WORKING_GROUP
24、 = mfs# SYSLOG_IDENT = mfsmetalogger# LOCK_MEMORY = 0# NICE_LEVEL = -19# DATA_PATH = /usr/local/mfs/var/mfs# BACK_LOGS = 50# META_DOWNLOAD_FREQ = 24# MASTER_RECONNECTION_DELAY = 5 MASTER_HOST = 192.168.93.18 MASTER_PORT = 9419# MASTER_TIMEOUT = 60# deprecated, to be removed in MooseFS 1.7# LOCK_FILE
25、 = /var/run/mfs/mfsmetalogger.lock这个配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必须是元数据服务器的主机名或者地址。另外,为方便大家进一步理解,我把配置文件里其他几个项目简单的说明一下:()SYSLOG_IDENT = mfsmetalogger元数据日志服务运行时,在系统日志输出的标识。如图8-9所示:图2-9 metalogger在系统日志输出的字串标识()DATA_PATH = /usr/local/mfs/var/mfs从元数据服务器(master)抓回文件,然后进行存放的路径。()BACK_LOGS = 50存放备份日志的总个数为
26、,超出则轮转。在做元数据恢复时,仅仅需要最近的那个日志文件备份,因此默认的日志个数就足够了,这也保证了日志备份不会写满整个分区。()META_DOWNLOAD_FREQ = 24元数据备份文件下载请求频率。默认为小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back文件。当元数据服务器关闭或者出故障时,matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。2.3.2元数据日志服务(metalogger)运行及关闭、启动过程为:/
27、usr/local/mfs/sbin/mfsmetalogger start working directory: /usr/local/mfs/var/mfslockfile created and lockedinitializing mfsmetalogger modules .mfsmetalogger daemon initialized properly启动过程如果不能跟元数据服务器进行通信的话,系统会给出错误信息。、关闭服务,执行命令/usr/local/mfs/sbin/mfsmetaloggerstop 、检查服务的运行状况。从两个方面看,一个是元数据服务器,另一个是本身的数
28、据生成情况。察看元数据服务器网络连接,可以看见日志服务器连接到元数据服务器的tcp 9419端口。查看日志服务器的工作目录,正常情况应该看见已经有文件生成了(从元数据服务器获取过来的)。可以手动从元数据服务器复制一个日志文件过来比较文件的内容。2.4 数据存储chunkserver服务器的安装配置数据存储服务器chunkserver也是可以运行在各种类unix平台的,因此不再多说。一个MFS环境到底能集群多少服务器,作者的说法是上PB容量,个人建议,最好3台以上;并且专门用来做存储,不要把它跟master搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的
29、安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。2.4.1 安装数据存储服务器 chunkserver1、下载GNU源码wget 2、解包 tar zxvf mfs-1.6.11.tar.gz3、切换目录 cd mfs-1.6.114、创建用户 useradd mfs s /sbin/nologin 5、配置 ./configure -prefix=/usr/local/mfs -with-default-user=mfs -with-default-group=mfs6、编译安装 make ; make install2.4.2 配置数据存储服务器chunkserver数据存储服
30、务器有2个配置服务器需要修改,一个是主配置文件 mfschunkserver.cfg ,另一个配置文件是 mfshdd.cfg。每个服务器用来分配给 MFS使用的空间最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不是个好主意,只能用来做实验了。1、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:#WORKING_USER = mfs#WORKING_GROUP = mfs# DATA_PATH = /usr/local/mfs/var/mfs# LOCK_FILE = /var/run/mfs/mfschunkserver.pid# SYSLOG_IDENT = mfschunkserver# BACK_LOGS = 50# MASTER_RECONNECTION_DELAY = 30MASTER_HOST = 192.168.0.19MASTER_PORT = 9420# MASTER_TIMEOUT = 60# CSSERV_LISTEN_HOST = *# CSSERV_LIS