MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双击同步(一)

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

1.1、mfs文件系统的组成

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-M)192.168.1.134

(前端NGINX-S)192.168.1.36

(文件服务器NEW-WEB)192.168.1.238

Mfs客户端:(后端TOMCAT1)192.168.1.233

(后端TOMCAT2)192.168.1.234

(前端NGINX-M)192.168.1.134

(前端NGINX-S)192.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.237和192.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,

首先我们获取moosefs的rpm-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.72的yum源:

# 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

启动mfsmaster和mfschunkserver:

# 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.cfg及mfsexports.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   数据存放路径,此目录下大致有三类文件,changelog,sessions和stats;三种类型文件。

#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-M)192.168.1.134和(前端NGINX-S)192.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、编译安装 make;make 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       chunkserver在syslog中的标识,说明是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.4、mfsclient客户端的安装及配置

一、 MFS的客户端安装

(一)安装MFS客户端

我们上面已经安装了两个客户端了,下面只给(后端TOMCAT1)192.168.1.233和(后端TOMCAT2)192.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、编译安装 make;make 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目录的文件,应该发现如下文件:[[email protected] /]# 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 !

[[email protected]]# /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    master的IP地址

-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生成reserved和trash 出现这两个目录
  2. b)     在trash下,有一个undel的目录,还有一些被删除的以8位16进制命名的目录,并且以"|"作为目录符号,再加上被删除文件名字。(如果文件名字大于系统支持的255最大长度时,将从左到右进行裁剪,直到满足255)

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

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这个文件cp到111目录下。也可以针对一个目录来操作。

    mfsappendchunks

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

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

    注:

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

    1.2、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.*.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

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

    1.3、mfsclient读写测试

    这块的误差受局域网硬件和网络的影响,在测试环境中,效果不太理想,基本是用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

    时间: 2024-10-10 06:39:06

    MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双击同步(一)的相关文章

    MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机同步(三)

    3.Unison双向同步工具配置 3.1.Unison简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点: 1.跨平台使用: 2.对内核和用户权限没有特别要求: 3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略: 4.只要是能连通的两台主机,就可以运行unison,可以

    MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机器同步(二)

    .moosefs+keepalived双机高可用 2.1.部署环境及思路 2.1.1.环境 192.168.1.237  keepalived (MASTER)  mfsmaster   mfscgiserv 192.168.1.236  keepalived (Slave)      mfschuckserver  mfsclient 192.168.1.239  虚拟VIP 2.1.2.原理 mfsmaster的故障恢复在1.6.5版本后可以由mfsmetalogger产生的日志文件 cha

    Centos7 下实现 memcached + keepalived 高可用群集

    memcached + keepalived 高可用群集 memcached介绍 Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据.很多网站通过使用 Memcached提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站.Memcached是典型的C/S架构,因此需要安装 Memcached服务端与 MemcachedAPI客户端. Memcached服务端是用C语言编写的,而

    Memcached+magent实现主从同步 +keepalived高可用群集

    Memcached+magent实现主从同步 +keepalived高可用群集 简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 实验部署 主机名称 IP地址 主要服务软件 memcach

    Keepalived高可用集群应用场景与配置

    1.Keepalived单实例主备模式集群方案 这是最简单的模式,不只考虑高可用集群,先不考虑后方的Nginx负载均衡集群,即后端的服务器集群,参考下面的图示: 其对应的Keepalived核心配置如下: lb01 global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_serv

    Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

    Keepalived 高可用ipvs和nginx服务

    Keepalived 高可用ipvs和nginx服务 ============================================================================ 概述: ============================================================================ 回顾: Virtual Server(虚拟服务器):  1.配置参数: ★虚拟服务器的配置格式: virtual_server I

    nginx+keepalived高可用

    nginx+keepalived高可用 1.环境如下 lb-01:192.168.75.136/24  nginx+keepalived-master lb-02:192.168.75.137/24  nginx+keepalived-backup VIP:192.168.75.135/24   rs-01:192.168.75.133/24 apache rs-02:192.168.75.13424 apache lb操作系统centos7.rs操作系统ubuntu14.04 2.lb-01/

    keepalived 高可用配置实例

    keepalived 高可用配置单/双 主模型 安装环境  准备2台主机  网络模式 :nat AU   192.168.16.8 (master)       AU1  192.168.16.11(backup) (1)  yum install keepalived -y      service keepalived start       ps -ef ( 2 )   cd /etc/keepalived      cp keepalived.conf keepalived.conf.b