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文件恢复