Moosefs分布式存储

 

MFS文件系统结构:

包含4种角色:

管理服务器managing server (master)

元数据日志服务器Metalogger server(Metalogger)

数据存储服务器data servers (chunkservers)

客户机挂载使用client computers

 

各种角色作用:

1. 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复

2. 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为

changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作。

3. 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。

4. 客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地unix文件系统使用一样的效果。

MFS部署:

主机环境:RHEL6.0 selinux and iptables disabled

Master:192.168.0.11

Metalogger: 192.168.0.76

Chunkserver: 192.168.0.76 192.168.0.79

Client: 192.168.0.75

软件下载:www.moosefs.org

首先在主机11上安装gcc make rpm-build(用来生成rpm软件包)fuse-devel zlib-devel

#yum install gcc make rpm-build fuse-devel zlib-devel -y

之后去网站或者服务器下载mfs最新的软件包mfs-1.6.26.tar.gz

lftp 192.168.0.254->cd pub/docs/mfs->get mfs-1.6.26.tar.gz(lftp需要安装,没有服务器请去官网下载)

使用rpm解压成rpm包

#rpmbuild -tb mfs-1.6.26.tar.gz

#cd /root/rpmbuild/RPMS/x86_64

#ls

会产生如下rpm包

mfs-cgi-1.6.26-1.x86_64.rpm

mfs-master-1.6.26-1.x86_64.rpm

mfs-chunkserver-1.6.26-1.x86_64.rpm mfs-metalogger-1.6.26-1.x86_64.rpm

mfs-client-1.6.26-1.x86_64.rpm

主控服务器 Master server 安装:

# yum localinstall -y mfs-master-1.6.26-1.x86_64.rpm mfs-cgi-1.6.26-1.x86_64.rpm

#cd /etc/

#cp mfsmaster.cfg.dist mfsmaster.cfg

此文件中凡是用#注释掉的变量均使用其默认值,基本不需要就可以工作,所以不需要修改。

# cp mfsexports.cfg.dist mfsexports.cfg

# vi mfsexports.cfg

192.168.0.0/24        /        rw,alldirs,maproot=0

##客户端的ip地址        被挂接的目录        客户端拥有的权限##

# cd /var/lib/mfs

# cp metadata.mfs.empty metadata.mfs

# chown nobody /var/lib/mfs(由于mfsmaster.cfg中的user=nobody)

# ll -d /var/lib/mfs

drwxr-xr-x. 2 nobody root 4096 Aug 26 14:00 /var/lib/mfs/

修改

# vi /etc/hosts文件,增加下面的行:

192.168.0.11 mfsmaster

之后启动mfsmaster

#mfsmaster start

working directory: /var/lib/mfs

lockfile created and locked

initializing mfsmaster modules ...

loading sessions ... file not found

if it is not fresh installation then you have to restart all active mounts !!!

exports file has been loaded

mfstopology configuration file (/etc/mfstopology.cfg) not found - using defaults

loading metadata ...

create new empty filesystemmetadata file has been loaded

no charts data file - initializing empty charts

master <-> metaloggers module: listen on *:9419

master <-> chunkservers module: listen on *:9420

main master server module: listen on *:9421

mfsmaster daemon initialized properly

出现上面表示成功

 

# mfscgiserver启动CGI监控服务

lockfile created and locked

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)

在浏览器地址栏输入 http://192.168.0.11:9425 即可查看 master 的运行情况

 

存储块服务器 Chunk servers 安装:

# yum localinstall -y mfs-chunkserver-1.6.26-1.x86_64.rpm

*/lvs  openssh-clietns

#rpm -ivh mfs-chunkserver-1.6.26-1.x86_64.rpm

#rpm -ql mfs-chunkserver(查看安装目录)

#cd /etc/

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

#cp mfshdd.cfg.dist mfshdd.cfg

#vi /etc/hosts

192.168.0.11    mfsmaster

#fdisk -cu /dev/vda

全部默认回车,创建一个LVM分区/dev/vda4

#partx -a

#df -h

#pvcreate /dev/vda4

#pvs

#vgcreate vg0_desktop79 /dev/vda4

#vgs

#lvcreate -L 2G -n data1 vg0_desktop79

#lvs

#mkfs.ext4  /dev/vg0_desktop79/data1

#mkdir /mnt/mfschunks1

#mount  /dev/vg0_desktop79/data1 /mnt/mfschunks1/

#df -h

#ll -d /mnt/mfschunks1/

#chown -R nobody:nobody /mnt/mfschunks1/

#mkdir /var/lib/mfs/

#chown nobody:nonody /var/lib/mfs

#ll -d /var/lib/mfs/

#vi /etc/mfshdd.cfg

/mnt/mfschunks1

#mfschunkserver start

#cd

#ls

#scp mfs-chunkserver-1.6.26-1.x86_64.rpm desktop76:

#lvextend -L +500M /dev/vg0_desktop79/data1

#resize2fs /dev/vg0_desktop79/data1

#df -h

#mfschunkserver reload

现在再通过浏览器访问 http://192.168.0.11:9425/ 应该可以看见这个 MooseFS系统的全部信息,包括主控master和存储服务chunkserver 。


在存储块服务器desktop76上同样操作以上部分,挂在点为/mnt/mfschunks2

数据为/dev/vg0_desktop76/data2,其他同上。

客户端 desktop75 client 安装:

# yum localinstall -y mfs-client-1.6.26-1.x86_64.rpm

# cd /etc

# cp mfsmount.cfg.dist mfsmount.cfg

# vi mfsmount.cfg

定义客户端默认挂载

/mnt/mfs

#vi /etc/hosts

192.168.0.11 mfsmaster

#mkdir /mnt/mfs

# mfsmount

# df -h

...     mfsmaster:9421     2729728  0  2729728  0%  /mnt/mfs

 

MFS测试:

在MFS挂载点下创建两个 目录,并设置其文件保存的副本数:

# cd /mnt/mfs

# mkdir dir1 dir2

# mfssetgoal -r 2 dir2/

设置在dir2中保存的文件有两个副本,默认是一个

dir2/:

inodes with goal changed:    1

inodes with goal not changed:    0

inodes with permission denied:    0

拷贝同一个文件到两个目录

# cp /etc/passwd dir1

# cp /etc/passwd dir2

查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

copy 1: 192.168.0.79:9422

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 192.168.0.76:9422

copy 2: 192.168.0.79:9422

 

关闭mfschunkserver2后再查看文件信息

 

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

no valid copies !!!

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 192.168.0.76:9422

启动mfschunkserver2后,文件回复正常。

 

恢复误删文件

 

# rm -f dir1/passwd

 

# mkdir /mnt/mfsmeta

 

# mfsmount -m /mnt/mfsmeta/ -H mfsmaster

 

# cd /mnt/mfsmeta/trash

 

# mv 00000004\|dir1\|passwd undel/

 

到dir1目录中可以看到passwd文件恢复