本篇为大家分享一下关于MooseFS的相关知识,以及简单的安装配置介绍。MooseFS是一种分布式文件系统,它通过四个节点服务器来进行整个分布式文件系统的正常运作,包括管理服务器,元数据日志服务器,存储服务器和客户端挂载。本章将通过实验环境为大家介绍整个集群的运行原理以及工作方式。如有更多方案或者简介,欢迎多多交流!
1、管理服务器(master-server):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
2、元数据日志服务器(changelog-server): 负责备份master服务器的变化,(一般情况下可以和管理服务器放在一起)文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
3、数据存储服务器(chunk-server):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
4、客户端(clients): 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.
MFS文件系统的读写原理
MFS分布式文件系统搭建
系统环境:
RHEL6.4 selinux is disabled iptables is flush
一、yum 源定义,用来解决软件包的依赖性问题
# cat yum.repo [base] name=yum baseurl=ftp://192.168.2.234/pub/RHEL6.4 gpgcheck=0 [HA] name=ha baseurl=ftp://192.168.2.234/pub/RHEL6.4/HighAvailability gpgcheck=0 [lb] name=LB baseurl=ftp://192.168.2.234/pub/RHEL6.4/LoadBalancer gpgcheck=0 [Storage] name=St baseurl=ftp://192.168.2.234/pub/RHEL6.4/ResilientStorage gpgcheck=0 [SFS] name=FS baseurl=ftp://192.168.2.234/pub/RHEL6.4/ScalableFileSystem gpgcheck=0
二、主机解析准备
# cat /etc/hosts 192.168.2.88 node1 mfsmaster 192.168.2.89 node2 192.168.2.90 node3 192.168.2.82 node4 192.168.2.85 node5 实验将用node1作为master-server node3和node4作为chunk-server node5作为clients 所有节点必须有以上准备
三、安装准备
#yum install rpm-build gcc make fuse-devel zlib-devel -y 安装编译环境使用的依赖(其实安装过程中会提示安装) #rpmbuild -tb mfs-1.6.27.tar.gz 将gz包构建成rpm包的方式 注意:包的格式很重要(只支持大的版本) ## ls /root/rpmbuild/RPMS/x86_64/ 生成的rpm包 mfs-cgi-1.6.27-2.x86_64.rpm mfs-client-1.6.27-2.x86_64.rpm mfs-cgiserv-1.6.27-2.x86_64.rpm mfs-master-1.6.27-2.x86_64.rpm mfs-chunkserver-1.6.27-2.x86_64.rpm mfs-metalogger-1.6.27-2.x86_64.rpm
1.master-server安装:
# yum localinstall mfs-cgi-1.6.27-2.x86_64.rpm mfs-master-1.6.27-2.x86_64.rpm mfs-cgiserv-1.6.27-2.x86_64.rpm -y
可以用cgi进行页面监控:
master-server:主要文件和目录 /var/lib/mfs mfs数据目录 metadata.mfs mfs启动文件 /etc/mfs 主目录(存储配置文件) mfsmaster.cfg mfs主配置文件(定义相关参数,用户、组等设定) mfsexports.cfg mfs被挂接目录及其权限控制文件 mfstopology.cfg 定义 MFS 网络拓扑结构的文件
配置文件默认不需要修改就可以使用:
#chown -R nobody /var/lib/mfs 注意给数据目录以mfs的权限 # mfsmaster 启动mfs #mfsmaster stop 关闭mfs #netstat -antlpe(mfsmaster开启三个端口:客户端连接9421端口,监听9422端口;数据节点9420端口) #/usr/share/mfscgi #chmod +x *.cgi 给所有的cgi页面可执行权限(以便与在web下查看状态) # mfscgiserv ------- -》启动cgi监控 http://192.168.2.88:9425/ 查看mfs监控信息
2.chunk-server安装配置(node3 and node4)
#rpm -ivh mfs-chunkserver-1.6.27-2.x86_64.rpm #cd /etc/mfs/ #cp mfschunkserver.cfg.dist mfschunkserver.cfg # cp mfshdd.cfg.dist mfshdd.cfg # vim mfshdd.cfg 存储文件 /mnt/chunk 真正存储的目录(将客户端/mnt/mfs的文件存储)
#mkdir /mnt/chunk #mkdir /var/lib/mfs #chown nobody /var/lib/mfs/ #chown nobody /mnt/chunk # mfschunkserver 启动mfs服务器(注意,mfsmaster的解析必须到位) #l. 产生一个隐藏锁文件 .mfschunkserver.lock 3.clients端的安装与配置; # yum localinstall mfs-client-1.6.27-2.x86_64.rpm #cp mfsmount.cfg.dist mfsmount.cfg #vim mfsmount.cfg 修改master和分布式目录/mnt/mfs #mkdir /mnt/mfs #mfsmounts 执行客户端挂载 mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root 挂载成功 # df 查看挂载设备 mfsmaster:9421 6714624 0 6714624 0% /mnt/mfs # ll -d /mnt/mfs/ 挂载后自动读写 drwxrwxrwx 2 root root 0 Jun 8 10:29 /mnt/mfs/ 测试:MFS测试: # mkdir hello{1,2} # ls hello1 hello2 # mfsdirinfo hello1/ hello1/: inodes: 1 directories: 1 files: 0 chunks: 0 length: 0 size: 0 realsize: 0 # mfssetgoal -r 3 hello1/ 设置备份次数 hello1/: inodes with goal changed: 1 inodes with goal not changed: 0 inodes with permission denied: 0 # mfsgetgoal hello1/ 查看文件备份数 hello1/: 3 # mfsgetgoal hello2 hello2: 1 #cp /etc/fstab hello1/ # cp /etc/passwd hello2/ # mfsfileinfo /hello/fstab 查看文件具体信息 fstab: chunk 0: 000000000000000B_00000001 / (id:11 ver:1) copy 1: 192.168.2.82:9422 copy 2: 192.168.2.90:9422 # mfscheckfile passwd 测试存储关系: # mfsfileinfo fstab fstab: chunk 0: 000000000000000B_00000001 / (id:11 ver:1) copy 1: 192.168.2.90:9422 [root@node5 hello1]# mfsfileinfo ../hello2/passwd ../hello2/passwd: chunk 0: 000000000000000C_00000001 / (id:12 ver:1) no valid copies !!! 客户端:误删除文件(不小心删除/mnt/mfs/hello*/passwd) # mfsmount -m /mnt/test/ -H mfsmaster 恢复目录挂载到mfsmaster上 mfsmaster accepted connection with parameters: read-write,restricted_ip # mount #cd /mnt/test/ ## mfscheckfile passwd # mv 00000005\|hello2\|passwd undel/ 直接恢复到之前的mfs目录中 # umount /mnt/meta/ mfschunk-server可以自动检测客户端的配置文件: # mfschunkserver stop 在客户端重新拷贝文件, #cp /etc/inittab /mnt/mfs/hello1 #mfsgetgoal hello1/fstab 查看文件份数 #mfsgetgoal hello1/inittab # mfsfileinfo inittab 刚开始只有一个chukserver,只能保存一份 开启chunkserver #mfschunkserver # mfsfileinfo inittab 查看文件的备份数,恢复成chunkserver的数 inittab: chunk 0: 0000000000000006_00000001 / (id:6 ver:1) copy 1: 192.168.2.184:9422 copy 2: 192.168.2.185:9422
注意:
在mfsmaster中,正常运行时,数据文件为metadata.mfs.back。
当主机出现故障,数据文件会保存成metadata.mfs。
使用非正常关闭,(kill -9 pid) 数据文件将不会恢复:
# mfsmetarestore -a- 非正常启动后会丢失metadata.mfs文件,必须恢复一下
然后重新启动mfsmaster(mfsmaster启动必须有metadata.mfs文件)。