官网部署参考
分布式存储,突破单机上的磁盘空间不足
一.mfs简介
(一)MFS 特性:
1.Free(GPL)
2.通用文件系统,不需要修改上层应用就可以使用
3.可以在线扩容,体系架构可伸缩性极强
4.部署简单
5.高可用,可设置任意的文件冗余程度(提供比 raid1+0 更高的冗余级别,而绝对不会影响读或写的性能,只会加速!)
6. 可回收在指定时间内删除的文件( “ 回收站 ” 提供的是系统级别的服务,不怕误操作了,提供类似 oralce 的闪回等高级 dbms 的即时回滚特性!)
7.提供 netapp,emc,ibm 等商业存储的 snapshot 特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)
8.google filesystem 的一个 c 实现
9.提供 web gui 监控接口
10.提高随机读或写的效率
11.提高海量小文件的读写效率
(二).可能的瓶颈:
1.master 本身的性能瓶颈。mfs 系统 master 存在单点故障如何解决
2.体系架构存储文件总数的可遇见的上限。(mfs 把文件系统的结构缓存到 master 的内存中,文件越多,master 的内存消耗越大,8g 对应 2500w 的文件数,2 亿文件就得 64GB 内存 )。master 服务器 CPU 负载取决于操作的次数,内存的使用取决于文件和文件夹的个数。
(三)MFS 读写原理
原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬盘和网络的吞吐量越好,整个系统的性能也就会越好
二.MFS 部署
主机环境:RHEL6.0 selinux and iptables disabled
Master:server1
Chunkserver: server2 3
Client: 真机
(一).mfs master 安装
server1
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
vim /etc/yum.repos.d/MooseFS.repo #修改下gpgcheck=0
yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y
/etc/mfs/mfsmaster.cfg #此文件中凡是用#注释掉的变量均使用其默认值,基本不需要修改就可以工作,根据实际情况再看
/etc/mfs/mfsexports.cfg #访问控制
systemctl start moosefs-master #启动 master server
systemctl start moosefs-cgiserv.service #cgi监控
所有节点的mfsmaster解析做一下
vim /etc/hosts
172.25.2.1 server1 mfsmaster
scp /etc/hosts server2:/etc/hosts
scp /etc/hosts 172.25.2.250:/etc/hosts
scp /etc/hosts server3:/etc/hosts
源做一下
scp /etc/yum.repos.d/MooseFS.repo server2:/etc/yum.repos.d/
scp /etc/yum.repos.d/MooseFS.repo server3:/etc/yum.repos.d/
(二).存储块服务器 Chunk servers 安装
server2
yum install moosefs-chunkserver -y
添加外部磁盘
fdisk /dev/vdb
mkfs.xfs /dev/vdb1
mkdir /mnt/chunk1
chown mfs.mfs /mnt/chunk1/
mount /dev/vdb1 /mnt/chunk1/
vim /etc/fstab
/dev/vdb1 /mnt/chunk1 xfs defaults 0 0
vim /etc/mfs/mfshdd.cfg #定义 mfs 共享点
35 /mnt/chunk1
systemctl start moosefs-chunkserver
server3
不添加外部磁盘,默认使用/下空间,这样的话为了防止/满了,设置预留空间
yum install moosefs-chunkserver -y
vim /etc/mfs/mfshdd.cfg
35 /mnt/chunk2
mkdir /mnt/chunk2
chown mfs.mfs /mnt/chunk2
systemctl start moosefs-chunkserver
现在再通过浏览器访问 http://172.25.2.1:9425/ 应该可以看见这个 MooseFS 系统的全部信息,包括主控 master 和存储服务 chunkserver
(三).mfs使用
客户端 client 安装
172.25.2.250 真机
curl "http://ppa.moosefs.com/MooseFS-3-el8.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-client -y
vim /etc/mfs/mfsmount.cfg #定义客户端默认挂载
16 /mnt/mfs
mkdir /mnt/mfs #这个目录下不能有文件
mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
(四)MFS 文件系统结构
包含 4 种角色:
1.管理服务器 managing server (moosefs-master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
CGI 监控服务 moosefs-cgiserv
2.数据存储服务器 data servers (moosefs-chunkserver):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输
3,客户机挂载使用 client computers (moosefs-client)客户端: 通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用一样的效果
4.元数据日志服务器 Metalogger server(Metalogger):负责备份 master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作
(五)MFS 测试
1.在 MFS 挂载点下创建两个目录,并设置其文件存储份数
默认副本两个
设置在 dir1 中文件存储份数为一个,默认是两个;对一个目录设定 “ goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的 copy 份数.但使用-r 选项可以更改已经存在的 copy 份数
2.拷贝文件到两个目录,查看文件信息
3.关闭 mfschunkserver2 后再查看文件信息
[root@server2 ~]# systemctl stop moosefs-chunkserver.service
那么在server2上存储的副本将丢失
4.当server2 moosefs-chunkserver服务重启后,副本又出现
[root@server2 ~]# systemctl start moosefs-chunkserver
(六)块存储
master首先为大的数据创建块,默认一个块64M,200M的数据分为4个块,分别部署在chunserver,创建两个副本
再加一个存储块服务器 Chunk servers server4
(七)恢复误删文件
cd /mnt/mfs/dir2
[root@xd dir2]# mfsgettrashtime fstab
fstab: 86400 #文件删除后存放在 “ 垃圾箱 ” 中的时间称为隔离时间, 这个时间可以用 mfsgettrashtime 命令来查看,用 mfssettrashtime 命令来设置,单位为秒,默认为 86400 秒
rm -f fstab #删除数据后,不要新建和
mkdir /mnt/mfsmeta
mfsmount -m /mnt/mfsmeta/ #挂载 MFSMETA 文件系统,它包含目录 trash (包含仍然可以被还原的删除文件的信息)和trash/undel (用于获取文件).把删除的文件,移到/ trash/undel 下,就可以恢复此文件
cd /mnt/mfsmeta/trash/
find -name *fstab*
cd 005/
mv 00000005\|dir2\|fstab undel/
到 dir2目录中可以看到fstab文件恢复
三.存储类
labels标签
create创建 keep保持 archive打包
再加一个存储块服务器 Chunk servers server5,并给所有的chunkserver打上标签
server2 3 4 5
vim /etc/mfs/mfschunkserver.cfg
84 LABELS = A #2 3 A; 4 5 B
systemctl reload moosefs-chunkserver.service
mfsscadmin create 2A sclass1
mfsscadmin list
mfsfileinfo fstab
mfssetsclass sclass1 fstab
2 3 是A标签
将不同的机房存储服务器分类,防止整个机房瘫痪;
根据不同的数据存储需求,将固态硬盘和机械硬盘打上不同的标签,分类存储
四.故障测试
为了安全停止 MooseFS 集群,建议执行如下的步骤:
# umount -l /mnt/mfs
#客户端卸载 MooseFS 文件系统
# mfschunkserver stop
# 停止 chunk server 进程
# mfsmetalogger stop
# 停止 metalogger 进程
# mfsmaster stop
# 停止主控 master server 进程
安全的启动 MooseFS 集群:
# mfsmaster start
# 启动 master 进程
# mfschunkserver start
# 启动 chunkserver 进程
# mfsmetalogger start
# 启动 metalogger 进程
# mfsmount
# 客户端挂载 MooseFS 文件系统
1.Client 客户端断电、断网对 MFS 的体系不产生影响.
如果客户端误杀 killall -9 mfsmount 进程,需要先 umount /mnt/mfs,然后再 mfsmount。否则会提示:/mnt/mfs: Transport endpoint is not connected
2.断网、杀掉 mfschunkserver 程序对 MFS 系统无影响。
断电:
#无文件传输时,对两个 chunker 都无影响;
#当有文件传输时,但是文件设置存储一份时,对文件的存储无影响。
#文件设置存储两份,数据传输过程中,关掉 chunker1,等待数据传输完毕后,启动chunker1;chunker1 启动后,会自动从 chunker2 复制数据块。整个过程中文件访问不受影响。
#文件设置存储两份,数据传输过程中,关掉 chunker1,不等待数据传输完毕,开机启动chunker1;chunker1 启动后,client 端会向 chunker1 传输数据,同时 chunker1 也从 chunker2 复制缺失的块。
只要不是两个 chunker 服务器同时挂掉的话,就不会影响文件的传输,也不会影响服务的使用
3.master 端:
断网、杀掉 MFS 的 master 服务对 MFS 系统无影响。
断电可能会出现以下的情况
#当没有文件传输时,可在服务器重启之后,运行 mfsmetarestore –a 进行修复,之后执行mfsmaster start 恢复 master 服务
#当有文件传输时,可能会在/usr/local/mfs/sbin/mfsmetarestore –a 进行修复时,此时无法修复也无法启动 master 服务,有个应急的办法是将 metadata.mfs.back 复制成metadata.mfs,然后再启动 master。这样将会丢失那些正在传输的数据