1  分布式文件系统mfs(moose file system)

1.1mfs文件系统的组成

1元数据服务器。在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。

2元数据日志服务器。备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当元数据服务器数据丢失或者损毁,可从日志服务器取得文件进行恢复。

3数据存储服务器chunkserver。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的磁盘空间越大,可靠性也越高。

4客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。

1.1.1元数据服务器安装和配置(master

  正式环境为oel5.8所有mfs子系统及客户端均在192.168.1.0段内。

     Mfs主机:192.168.1.237

     Mfs备机:192.168.1.236

     Keepalived虚拟VIP 192.168.1.239

     Mfs存储(chunkserver:   (前端NGINX-M192.168.1.134

                              (前端NGINX-S192.168.1.36

(文件服务器NEW-WEB192.168.1.238

Mfs客户端:(后端TOMCAT1192.168.1.233

(后端TOMCAT2192.168.1.234

(前端NGINX-M192.168.1.134

(前端NGINX-S192.168.1.36

Moosefs版本为moosefs-2.0.72-1.tar.gz

              Fuse版本为fuse-2.8.4.tar.gz

              

安装前先查看文件描述,ulimit –n,最好设置的大点,

          vim /etc/security/limits.conf

          * hard nofile 50000

* softnofile 50000

(一)安装master方法一:编译安装

我们现在192.168.1.237192.168.1.236上分别安装好mfsmaster

可以到http://www.moosefs.org/download.html下载mfs各版本,鉴于服务器python环境为2.4.3,需要升级为python2.7.5可以较好的支持mfscgiserv

1、下载moosefs安装包

2、解包 tar -zxvf moosefs-2.0.72-1.tar.gz

3、切换目录 cd moosefs-2.0.72

4、创建用户 useradd mfs -s /sbin/nologin

5、配置 ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

  注意:在编译过程中可能会出现*************"checkingfor FUSE... no  configure: error:mfsmount build was forced, but fuse development package is notinstalled"*******************可以不用管它,因为只是客户端挂接master

6、编译安装 make ; make install

(二)安装mfsmaster方法二:yum安装

  如果你的系统的yum源已经升级到最新的,我们可以使用yum来安装moosefs2.0.72,

首先我们获取moosefsrpm-gpg-key:

# curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS"> /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

在系统中导入rpm-gpg-key:

# rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

然后我们获取moosefs2.0.72yum源:

# curl"http://ppa.moosefs.com/MooseFS-stable-el5.repo" >/etc/yum.repos.d/MooseFS.repo

最后我们就可以以yum的方式来安装:

   Mfsmaster:     # yum install moosefs-master moosefs-climoosefs-cgi moosefs-cgiserv

   Chunkservers:  # yum install moosefs-chunkserver

   Metaloggers:   # yum install moosefs-metalogger

   Clients:       # yum install moosefs-client

启动mfsmastermfschunkserver:

      # servicemoosefs-master start

#service moosefs-chunkserver start

关于版本升级更新,在更新前应该做好metadata元数据的备份。

(三)配置元数据服务

元数据服务器的配置文件被放置于安装目录/usr/local/mfs/etc。与mfs-1.5.12版本不同的是:moosefs-2.0.72版安装完成只有模版文件,较之旧版的mfs,配置选项增加了几项可调控的选项,还增加了很多注释说明,其后缀形如mfsmaster.cfg.dist。为了使mfs master正常工作,需要两个配置文件mfsmaster.cfgmfsexports.cfg,前者为主配置文件,后者为权限控制文件(mfs客户端挂接时使用)。

1)主配置文件mfsmaster.cfg,可直接从模版文件拷贝而来,打开这个配置文件/usr/local/mfs/etc/mfsmaster.cfg,看看都有哪些内容:

# WORKING_USER = mfs       运行master server 的用户

# WORKING_GROUP = mfs        运行master server 的用户组

# SYSLOG_IDENT =mfsmaster     master server syslog中的标识,说明是由master serve 产生的

# LOCK_MEMORY = 0          是否执行mlockall()以避免mfsmaster 进程溢出(默认为0

# NICE_LEVEL = -19          运行的优先级,如果可以默认是-19;

# FILE_UMASK = 027               创建文件的UMASK

EXPORTS_FILENAME= /usr/local/mfs/etc/mfsexports.cfg  被挂接目录权限配置文件

DATA_PATH =/usr/local/mfs/var/mfs   数据存放路径,此目录下大致有三类文件,changelogsessionsstats;三种类型文件。

#BACK_LOGS = 50     metadata 的改变log 文件数目(默认是50)  这里虽然默认值是50,但是在使用unison同步后,会额外的产生一个changlog.0.mfs的日志文件,unison部分会做说明。

#BACK_META_KEEP_PREVIOUS = 1,就是在/usr/local/mfs/var/mfs目录中metadata文件保存的数量为1。如果有多余的metadata文件,它会自动在原来名称后加后缀。

#CHANGELOG_PRESERVE_SECONDS = 1800  默认每隔1800秒变化的记录保存在内存中

#MISSING_LOG_CAPACITY = 100000    默认有100000个丢失chunks将存储在master

#REPLICATIONS_DELAY_INIT = 300    延迟复制的时间(默认是300s

# REPLICATIONS_DELAY_DISCONNECT= 3600  chunkserver 断开的复制延迟时间(默认是3600);

# MATOML_LISTEN_HOST =*  metalogger 监听的IP 地址(默认是*,代表任何IP)

# MATOML_LISTEN_PORT =9419   metalogger 监听的端口地址(默认是9419)

# MATOCS_LISTEN_HOST =*   用于chunkserver 连接的IP 地址(默认是*,代表任何IP);

# MATOCS_LISTEN_PORT =9420  用于chunkserver 连接的端口地址(默认是9420);

#CHUNKS_LOOP_MAX_CPS = 100000  块循环不检查块每秒钟超过给定的数字(100000)chunks

# CHUNKS_LOOP_TIME =300  chunks 的回环频率(默认是:300 秒);原文:在几秒钟内循环次数

#CHUNKS_SOFT_DEL_LIMIT = 10  chunk删除一个chunkserver上的块数量

#CHUNKS_HARD_DEL_LIMIT = 25 chunk删除一个chunkserver上的块数量

#CHUNKS_WRITE_REP_LIMIT = 2,1,1,4   最大数量的块复制到一个chunkserver,第一个限制是比较危险的块(块只有一个副本);第二个限制是undergoal(块的拷贝数量低于指定的目标);第三个限制是平衡与周围空间使用服务器之间的算术平均数;第四个限制是其他服务器之间的平衡(极低或极高的空间使用情况);这里mfs官方建议是第一个数字大于等于第二,第二大于或等于第三,第四大于或等于第三,即(第一个限制 > = 第二个限制 > = 第三个限制< = 第四个限制)

#CHUNKS_READ_REP_LIMIT = 10,5,2,5   最大数量的块复制到一个chunkserver

这个限制组和上面的写入的限制差不多,关系数量应该在写一样的限制,即(第一个限制 > = 第二个限制 > = 第三个限制< = 第四个限制)

这里做下说明:上面这两个选项,是可以控制fsmchunkserver复制速度的,可以定义在一个循环里复制到一个chunkserver 的最大chunk数目

#CS_HEAVY_LOAD_THRESHOLD = 100 chunkserver负载值默认100

#CS_HEAVY_LOAD_RATIO_THRESHOLD = 5.0 , chunkserver负荷阈值率(默认值为5.0,每当chunkserver负载比先前指定的阈值高并且这一比率高于平均负载,然后chunkserver切换到“grace(优雅)”模式)

#CS_HEAVY_LOAD_GRACE_PERIOD = 900   定义了多久chunkservers仍将以优雅模式工作(以秒为单位).

#ACCEPTABLE_PERCENTAGE_DIFFERENCE = 1.0 chunkservers空间使用的百分比最大不同(默认是1.0;有效值:1.0 -10.0)

#PRIORITY_QUEUES_LENGTH = 1000000,优先队列的长度(濒危,undergoal等块-应该首先处理块,默认值是1000000)

# MATOCL_LISTEN_HOST =* 用于客户端挂接连接的IP 地址(默认是*,代表任何IP)

# MATOCL_LISTEN_PORT =9421  用于客户端挂接连接的端口地址(默认是9421);

# SESSION_SUSTAIN_TIME = 86400   多久来维持一个断开连接的客户机会话(以秒为单位,默认是86400 = 1)

# QUOTA_TIME_LIMIT = 604800   #在多少秒内的软配额(默认是604800 -7)                            

尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。

EXPORTS_FILENAME= /usr/local/mfs/etc/mfsexports.cfg 权限控制文件的存放位置。

DATA_PATH= /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分3种类型的文件:

 

                           

2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接从模版文件复制而来。这个文件的内容,十分类似NFS服务器的exports文件.实际配置时,可参照这个文件的默认行来修改以满足自己的应用需求.我的mfsexports.cfg文件的内容为:

192.168.1.0/24          .      rw      这个“.”表示mfsmeta,就是我们下面挂接的垃圾回收站。

192.168.1.0/24          /       rw,alldirs,maproot=0  挂接到mfs的根目录。

这种格式需要说明一下:

第一部分:客户端的ip 地址

第二部分:被挂接的目录

第三部分:客户端拥有的权限

 

              第二部分说明

              /      标识MooseFS

             

              第三部分详细说明

              ro 只读模式共享

rw 读写的方式共享

alldirs 允许挂载任何指定的子目录

maproot映射为root,还是指定的用户(0表示ROOT

password 指定客户端密码

3)复制元数据文件

cp/usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

这是一个8字节的文件,为mfs-1.6.x以上新增项目。

(四)元数据服务器master启动

元数据服务器可以单独启动,即使没有任何数据存储服务器(chunkserver)也是能正常工作的,因此当我们安装配置完MFS后,即可启动它。执行命令 /usr/local/mfs/sbin/mfsmasterstart(如果启动过程报错,先检查配置文件,cp/usr/local/mfs/etc/mfsmaster.cfg.dist /usr/local/mfs/etc/mfsmaster.cfg,同理,mfsexport.cfg.dist也是一样的。我们最好对/usr/local/mfs,整体重新chown -R mfs.mfs/usr/local/mfs一下)如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过3个方面来检查一下MFS master的运行状况:

先看启动过程:

查看master系统日志tail -f /var/log/messages

 

MFS的日志会直接写入系统日志。当我们增加数据存储服务器(chunkserver)或数据存储服务器(chunkserver)处故障时,都能在系统日志找到这些记录。注意,这个日志跟元数据变化日志不是一回事情。

启动:/usr/local/mfs/sbin/mfscgiserv  此时就可以通过http://192.168.1.237:9425 web监控界面查看到mfs使用情况了。
停止:kill掉进程就可以了。

(五)、关闭元数据服务器

关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster  stop这种方式(之前使用1.6.x版本是支持-s停止的,新版不支持),如果直接使用kill杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的。

1.1.2、元数据日志服务器安装和配置

元数据日志服务为mfs 1.6以后版本新增的服务,即可以把元数据日志保留在元数据服务器,也可以单独存储。为保证其可靠性,最好单独放置。需要注意的是,源数据日志守护进程跟元数据服务器(master)在同一个服务器上,备份元数据日志的服务器作为它的客户端,从元数据服务器取得日志文件进行备份。

()安装元数据日志服务器metalogger

说明:由于正式环境中,我们没有metalogger日志服务器,因为考虑到metalogger延时太大,这里只做简洁介绍:

1、下载moosefs2.0.72

2、解包tar -zxvfmoosefs-2.0.72-1.tar.gz

3、切换目录 cd moosefs-2.0.72

4、创建用户 useradd mfs -s /sbin/nologin

5、配置 ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装 make ; make install

(二)元数据日志服务(metalogger)配置

该服务仅需要一个配置文件,这里我们只需要从模板文件复制一个,然后稍微加以修改即可,下面是我的某个metalogger 的配置文件:配置前面几项是个master是一样的。

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfsmetalogger

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

 

#DATA_PATH = /usr/local/mfs/var/mfs    数据存放路径

 

#BACK_LOGS = 50            metadata 的改变log 文件数目(默认是50)

#META_DOWNLOAD_FREQ = 24  元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back 文件。当元数据服务器关闭或者出故障时,matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。

 

# MASTER_RECONNECTION_DELAY = 5   重新连接master延时时间

 

MASTER_HOST = 192.168.1.239  (这里我们先填写为虚拟VIP地址)

MASTER_PORT = 9419

 

#MASTER_TIMEOUT = 60    可能是用于下载mfs.back文件重试时间

      这个配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必须是元数据服务器的主机名或者ip地址。另外,为方便大家进一步理解,我把配置文件里其他几个项目简单的说明一下:

(1)  SYSLOG_IDENT= mfsmetalogger 元数据日志服务运行时,在系统日志输出的标识,下面给出一段系统日志:

(2)DATA_PATH= /usr/local/mfs/var/mfs 从元数据服务器(master)抓回文件,然后进行存放的路径。

(3)BACK_LOGS= 50 存放备份日志的总个数为50,超出50则轮转。在做元数据恢复时,仅仅需要最近的那个日志文件备份,因此默认的日志个数就足够了,这也保证了日志备份不会写满整个分区。

(三)元数据日志服务(metalogger)运行及关闭

1、启动过程为:

/usr/local/mfs/sbin/mfsmetalogger start

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ...

mfsmetalogger daemon initialized properly

启动过程如果不能跟元数据服务器进行通信的话,系统会给出错误信息。

2、关闭服务,执行命令/usr/local/mfs/sbin/mfsmetalogger stop

3、检查服务的运行状况。从两个方面看,一个是元数据服务器,另一个是本身的数据生成情况。

  • 察看元数据服务器网络连接,可以看见日志服务器连接到元数据服务器的tcp 9419端口。

  • 查看日志服务器的工作目录,正常情况应该看见已经有文件生成了(从元数据服务器获取过来的)。可以手动从元数据服务器复制一个日志文件过来比较文件的内容。                                   

  • 、数据存储chunkserver服务器的安装配置

我们在这里说一下chunkserver具体安装环境:安装chunkserver前需要在(前端NGINX-M192.168.1.134和(前端NGINX-S192.168.1.36上安装fuse模块,因为这两台机器同时兼顾mfs客户端。省的下面重复安装。192.168.1.238上不需要安装fuse,所以编译选项中不需要加入--enable-mfsmount参数。

Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.8.4.tar.gz

Fuse下载地址:http://heanet.dl.sourceforge.net/project/fuse/fuse-2.X/

1、解包 tar zxvf fuse-2.8.4.tar.gz

2、切换目录 cd fuse-2.8.4

3、配置 ./configure

4、编译安装 makemake install

如果系统已经安装了fuse,则跳过这个步骤。

安装MFS客户端程序

1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。

exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

一个MFS环境到底能集群多少服务器,最好3台以上;并且专门用来做存储。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。

(一)、安装数据存储服务器chunkserver

1、下载mfs安装包

2、解包 tar -zxvf moosefs-2.0.72-1.tar.gz

3、切换目录 cd moosefs-2.0.72

4、创建用户 useradd mfs -s /sbin/nologin

5配置./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --enable-mfsmount  --disable-mfsmaster

6、编译安装 make ; make install

(二)配置数据存储服务器chunkserver

数据存储服务器有2个配置需要修改,一个是主配置文件mfschunkserver.cfg ,另一个配置文件是 mfshdd.cfg。每个服务器用来分配给 MFS使用的空间最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不是个好主意,只能用来做实验了。

1、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:

# WORKING_USER = mfs

# WORKING_GROUP = mfs

#SYSLOG_IDENT = mfschunkserver       chunkserversyslog中的标识,说明是chunkserver产生

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

 

# DATA_PATH = /usr/local/mfs/var/mfs

 

# MASTER_RECONNECTION_DELAY = 5

 

# BIND_HOST = *本地地址用于主连接(默认是*,即默认本地地址)

 

MASTER_HOST = 192.168.1.239

MASTER_PORT = 9420

# WORKERS_MAX = 150    # WORKERS_MAX_IDLE = 40  最大数量的活跃值和闲置的的最大数量

# MASTER_TIMEOUT = 60    连接MASTER的超时时间

# CSSERV_LISTEN_HOST = *      数据复制服务器地址

# CSSERV_LISTEN_PORT = 9422

# HDD_CONF_FILENAME =/usr/local/mfs/etc/mfshdd.cfg

# HDD_TEST_FREQ = 10    循环测试连接时间

    # HDD_LEAVE_SPACE_DEFAULT = 256MiB  chunkserver硬盘保留的默认空间

# IP address to listen for client (mount)connections (* means any)

# CSSERV_LISTEN_HOST = *

 

# CSSERV_LISTEN_PORT = 9422  监听客户端连接端口

# MASTER_TIMEOUT = 10

 

这个配置文件里,没有注释符号“#”就是被修改过的项了,

2、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。为了使mfs拥有写目录的权限,需要修改目录的属主。我的服务器的分区挂接点是/databak/chunkserverdata/ , chown -Rmfs:mfs /databak/chunkserverdata/ 把属主改变。因为我的每个服务器只需贡献一个分区做为MFS,因此配置文件只需要如下一行内容就可以了:

这里我们指定chunkserver存储空间大小:

/databak/chunkserverdata/ 440GiB   就是chunkserver这个机器真实存在的目录

这个文件默认情况下有好几行,有好几种空间配置方式:

  • /mnt/hd1   hd1下所有的可用空间作为存储

  • */mnt/hd2   指定这个盘为故障盘

  • /mnt/hd3 -5GiB 使用整块硬盘,但是最大保留5GiB的可用空间

  • /mnt/hd4 1.5TiB 使用整块硬盘,但是分配给chunkserver1.5TiB

(三)启动数据存储服务器chunkserver

在数据存储服务器chunkserver执行命令/usr/local/mfs/sbin/mfschunkserver start 启动数据存储守护进程.通过以下几种方式来检查chunkserver的运行状态.

1查看进程 ps aux | grep mfschunkserver

2查看网络状态,正常情况下应该看见9422处于监听状态,如果有其他数据存储服务器chunkserver在同一个元数据服务器master管理下运行的话,应该能看见其他chunkserver跟本机的连接情况:netstat -ant

3,查看元数据服务器的系统日志,可以看见新增的数据存储服务器chunkserver被加入。tail -f /var/log/messages

(四)关闭数据存储服务器

跟元数据服务器master相似,执行命令/usr/local/mfs/sbin/mfschunkserver stop , chunkserver服务就停下来了。为了使系统重启过程能自动启动chunkserver 服务,可以通过在/etc/rc.local文件追加行 /usr/local/mfs/sbin/mfschunkserver start 来达到这个目的(master的自动重启处理也可同样处理)。

1.1.4mfsclient客户端的安装及配置

一、 MFS的客户端安装

(一)安装MFS客户端

我们上面已经安装了两个客户端了,下面只给(后端TOMCAT1192.168.1.233和(后端TOMCAT2192.168.1.234安装fuse就可以了。

注意:使用mfsmount必须安装FUSE模块,全称filesystem-userspace,如果系统内核版本低于2.6.20,会无法加载fuse.ko的模块,那么这就需要编译升级内核。

Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.8.4.tar.gz

Fuse下载地址:http://heanet.dl.sourceforge.net/project/fuse/fuse-2.X/

1、解包 tar zxvf fuse-2.8.4.tar.gz

2、切换目录 cd fuse-2.8.4

3、配置 ./configure

4、编译安装 makemake install

如果系统已经安装了fuse,则跳过这个步骤。

安装MFS客户端程序

1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。

exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

如果不执行这个操作,在后面安装MFS的过程中,执行命令

./configure--enable-mfsmount时可能出现"checking forFUSE... no  configure: error: mfsmountbuild was forced, but fuse development package is not installed"这样的错误,而不能正确安装MFS客户端程序。

2、解包 tar zxvf moosefs-2.0.72-1.tar.gz

3、切换目录 cd mfs-2.0.72

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目录的文件,应该发现如下文件:[root@localhostnmxxt /]# ll/usr/local/mfs/bin/

total560

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsappendchunks -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfscheckfile -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsdeleattr-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsdirinfo-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsfileinfo-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsfilerepair -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsgeteattr -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsgetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsgettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsmakesnapshot -> mfstools

-rwxr-xr-x1 mfs mfs 385463 May 13 17:44 mfsmount

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsrgetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsrgettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsrsetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsrsettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsseteattr-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfssetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfssettrashtime -> mfstools

-rwxr-xr-x1 mfs mfs    137 May 13 17:44 mfssnapshot

-rwxr-xr-x1 mfs mfs 171919 May 13 17:44 mfstools

二、挂接和使用MFS文件系统

1、创建挂接点 mkdir /usr/xxtsrc/mfs

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

[root@localhostmnt]# /usr/local/mfs/bin/mfsmount -H 192.168.1.237 /usr/xxtsrc/mfs

mfsmasteraccepted connection with parameters: read-write,restricted_ip ; root mapped toroot:root

3、通过使用df -h查看磁盘使用情况来检查是否被挂接成功。下图是挂接的虚拟VIP地址

三、挂接和使用meta文件系统(垃圾箱)

1CLIENT端挂载MFS

首先需要说明一下mfsmount的常用的参数:

-H    masterIP地址

-P    客户端挂接master端的端口(如果master端的挂接端口已经改变)

-p    客户端挂接master需要的密码,该密码在master端的mfsexports.cfg文件中。

-S    挂载MASTER端根目录下的子目录,前提是必须通过挂载根目录后,创建相应的子目录,才可以挂载

-m    用于挂载mfsmeta文件系统,配合垃圾箱功能使用,默认挂载点是/mnt/mfsmeta该目录没有,需要自己创建。

-w    用于改变默认挂载点。

具体使用方法:

1: /usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfs -H 192.168.1.237 -p

2: /usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfs -H 192.168.1.237 -S /test -p

3: /usr/local/mfs/bin/mfsmount  /usr/xxtsrc mfsmeta -H192.168.1.237 -p –m

4: /usr/local/mfs/bin/mfsmount -w /usr/xxtsrc/mfsmeta-test  -H192.168.1.237 -p -m

2、垃圾箱恢复意外删除的文件

通过加入-m这个参数挂载mfsmeta文件系统时,必须在MASTER端的mfsexports.cfg里,必须打开如下内容的注释:

例如我的mfsexports.cfg配置文件是这样的

192.168.1.0/24           .       rw

192.168.1.0/24          /       rw,alldirs,maproot=0

在客户端直接执行

/usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfsmeta -H 192.168.1.237 -m

注意:

  1. a)        /usr/xxtsrc/mfsmeta这个目录不需要执行chown -R mfs.mfs,直接在ROOT用户下创建该目录即可

  2. b)       在这个目录下进行恢复意外删除文件的时候,必须使用ROOT账户进行操作。

  3. c)        原来的位置下不能有一个已存在的与被删文件同名的文件,否则恢复不会成功。

  4. d)       用一个-m的选项这样可以挂接一个辅助的文件系统MFSMETA,这么做的目的是对于意外的从MooseFS卷上删除文件或者是为了释放磁盘空间而移动的文件

进行恢复。使用该命令后只是执行了恢复性的操作,并不是客户端挂接master的操作,这个点要分清。

恢复具体流程

  1. a)      执行完上述命令后,会在/mnt/mfsmeta生成reservedtrash 出现这两个目录

  2. b)     trash下,有一个undel的目录,还有一些被删除的816进制命名的目录,并且以"|"作为目录符号,再加上被删除文件名字。(如果文件名字大于系统支持的255最大长度时,将从左到右进行裁剪,直到满足255

规则:00000009|11代表删除的文件。

0000002E|123|txt 代表123目录下txt文件,如果123目录被一起删除,恢复的时候123这个目录也会被一同恢复出来。

  1. c)      如果想恢复文件,把00000009|1该文件移动到/mnt/mfsmeta/trash/undel下,文件即可恢复。

  2. d)     reserved这个目录的作用是针对那些已被彻底删除但目前正被打开着的文件。

3、垃圾箱相关设定

垃圾箱文件保留期默认是1天,86400

查看垃圾箱保留期时间

/usr/local/mfs/bin/mfsgettrashtime/mnt/mfs

执行效果:

/mnt/mfs: 86400

/usr/local/mfs/bin/mfssettrashtime

设置垃圾箱保留期

/usr/local/mfs/bin/mfssettrashtime3600 /mnt/mfs

执行效果:

/mnt/mfs:

inodes with trashtime changed:                        3

inodes with trashtime not changed:                    0

inodes with permission denied:                        0

参数说明:

-r 表示递归修改这个目录下所有文件属性,不带-r表示修改本级目录。

如果将时间设置为0,表示不启用垃圾箱功能。

查看文件设置拷贝份数

/usr/local/mfs/bin/mfsgetgoal/mnt/mfs/123/123

执行效果

/mnt/mfs/123/123: 2

查看文件拷贝具体信息

/usr/local/mfs/bin/mfscheckfile /mnt/mfs/123/123

执行效果

   /mnt/mfs/123/123:

2 copies: 1 chunks

查看文件拷贝具体信息

/usr/local/mfs/bin/mfsfileinfo/mnt/mfs/123/123

执行效果

/mnt/mfs/123/123:

 chunk 0:000000000000001D_00000001 / (id:29 ver:1)

      copy 1:192.168.1.1:9422

          copy 2:192.168.9.5:9422

注:

  1. a)      一个文件数据长度为零,并且也没有对此文件设置为0份拷贝的时候,这个文件查看拷贝信息的时候,会出现如下:/mnt/mfs/123/123:(通俗一点说,就是空文件无法获取到信息的。

 

查看目录具体信息,等同于du  -sh

/usr/local/mfs/bin/mfsdirinfo/mnt/mfs

执行效果

/mnt/mfs:

 inodes:                         3              文件总数

 directories:                    2          目录数

 files:                          1        文件数

chunks:                         1             块数

 length:                         31            文件大小总和

 size:                        70656            块长度总和

       realsize:                   141312        磁盘空间的使用包括所有的拷贝

 

设置文件拷贝份数

       /usr/local/mfs/bin/mfssetgoal 2/mnt/mfs

       执行效果

       /mnt/mfs:

 inodes with goal changed:                        3

 inodes with goalnot changed:                     0

 inodes withpermission denied:                    0

 

参数说明

-r 表示递归修改这个目录下所有文件属性,不带-r表示修改本级目录。

注:

  1. a)      拷贝份数尽量和chunkserver这个服务的数量保持一致,比较易于管理,数据额安全性也得到保障。

  2. b)     上面这个命令产生的效果是:改变当前目录的属性,如果当前目录下已经存在一些文件,这些已存在文件的拷贝属性不会发生变化,只有新建的文件才会按照新的拷贝属性进行复制。

  3. c)      递归修改这个目录下所有文件的拷贝份数属性后,所有文件的拷贝份数的变化需要一定的时间才会发生变化。

 

Client端大文件传输过程中,强制拔下master主机电源,造成master非法关闭,使用mfsmaster -a修复后,master日志报告有坏块:

Jan 19 17:22:17 ngmaster mfsmaster[3250]: chunkserver hasnonexistent chunk (000000000002139F_00000001), so create it for future deletion

Jan 19 17:22:18 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F creation status: 20

Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk000000000002139F has only invalid copies (1) - please repair it manually

Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk000000000002139F_00000001 - invalid copy on (192.168.5.232 - ver:00000000)

Jan 19 17:26:43 ngmaster mfsmaster[3250]: currentlyunavailable chunk 000000000002139F (inode: 135845 ; index: 23)

Jan 19 17:26:43 ngmaster mfsmaster[3250]: * currentlyunavailable file 135845: blog.xxx.cn-access_log200904.tar.gz

Client端使用mfsfilerepair修复

/usr/local/mfs/bin/mfsfilerepairblog.xxx.cn-access_log200904.tar.gz

blog.xxt.cn-access_log200904.tar.gz:

chunks not changed: 23

chunks erased: 1

chunks repaired: 0

查看master日志,发现:

Jan 19 17:30:17 ngmaster mfsmaster[3250]: chunk hasn'tbeen deleted since previous loop - retry

Jan 19 17:30:17 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F deletion status: 13

Jan 19 17:35:16 ngmaster mfsmaster[3250]: chunk hasn'tbeen deleted since previous loop - retry

Jan 19 17:35:16 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F deletion status: 13

Client端执行以下操作后,master不再报告相关信息:

mv blog.xxt.cn-access_log200904.tar.gzblog.xxt.cn-access_log200905.tar.gz

 

1、快照

mfsmakesnapshot

       /usr/local/mfs/bin/mfsmakesnapshot/mnt/mfs/123/tmp2  /mnt/mfs/111/

此命令是一个CP的过程,会自动将tmp2这个文件cp111目录下。也可以针对一个目录来操作。

mfsappendchunks

/usr/local/mfs/bin/mfsappendchunks/mnt/mfs/111/shot/mnt/mfs/123/123 /mnt/mfs/123/tmp2

1个以上的源文件做成一个包,这里是将123tmp2这两个文件的块追加到shot的块文件中。

注:

源和目标必须都属于mfs体系,即不能将mfs体系中的文件快照到其他文件系统。

1.2mfs子系统测试

破坏性测试

一、测试数据存储服务器

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

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

二、测试元数据服务器

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

(一)本地测试

1、停止元数据服务 /usr/local/mfs/sbin/mfsmaster stop

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/mfsmaster  -a

8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

(二)迁移测试

1安装新的MFS元数据服务器。

2从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制备份文件 metadata.mfs.back到新的元服务器目录(metadata.mfs.back需要定时备份).

3从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器。

4停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。

5更改新的元数据服务器的ip为原来那个服务器的ip.

6执行数据恢复启动操作,其命令为:mfsmaster -a

8MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

1.3mfsclient读写测试

这块的误差受局域网硬件和网络的影响,在测试环境中,效果不太理想,基本是用dd命令执行写入的

测试写入:

timedd if=/dev/zero of=/mnt/mfs/1.img bs=1M count=5000

5242880000bytes (5.2 GB) copied, 70.9792 seconds, 73.9 MB/s

timedd if=/dev/zero of=/mnt/mfs/1.img bs=100K count=10000

1024000000bytes (1.0 GB) copied, 12.9659 seconds, 79.0 MB/s

测试读取:

timedd if=/mnt/mfs/1.old of=/dev/null

5242880000bytes (5.2 GB) copied, 35.99 seconds, 146 MB/s

同时测试读写:

timedd if=/mnt/mfs/1.img of=/mnt/mfs/1.old  bs=1M

102400000bytes (102 MB) copied, 1.39368 seconds, 73.5 MB/s

测试删除:

timerm –rf *

real    0m0.828s

user    0m0.000s

sys     0m0.788s