moosefs理论
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. 提高海量小文件的读写效率
MooseFS是一个分布式文件系统
MooseFS文件系统结构包括以下四种角色:
1.管理服务器 managing server (master)
2.元数据日志服务器 Metalogger server(Metalogger)
3.数据存储服务器 data servers (chunkservers)
4.客户机挂载使用 client computers
各种角色作用:
1. 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。
2. 元数据日志服务器: 负责备份 master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作。
3. 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。
4. 客户端: 通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用一样的效果。
MFS 读写原理:
原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬盘和网络的吞吐量越好,整个系统的性能也就会越好。
.mfsmaster.lock:文件记录正在运行的 mfsmaster 的主进程
metadata.mfs, metadata.mfs.back MooseFS 文件系统的元数据 metadata 的镜像
changelog.*.mfs:是 MooseFS 文件系统元数据的改变日志(每一个小时合并到 metadata.mfs中一次)
Metadata 文件的大小是取决于文件数的多少(而不是他们的大小)。changelog 日志的大小是取决于每小时操作的数目,但是这个时间长度(默认是按小时)是可配置的。
修改 linux 下最大文件描述符的限制:
在进行大量小文件写时,可能会出现了一个严重错误,有可能和操作系统文件描述符有关。操作系统默认文件描述符为 1024. 1.6.26 版本默认为 100000
建议上线时,master 和 chunker 修改文件描述符系统级限制:它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
# vi /etc/sysctl.conf 添加
fs.file-max=102400
如果此值默认够大可以不用更改
# sysctl -p
命令使其生效。
用户级限制:只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
# vi /etc/security/limits.conf
* - nofile 102400
保存退出后重新登录,其最大文件描述符已经被永久更改了。
与 file-max 参数相对应的还有 file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。
# sysctl -a|grep file
fs.file-nr = 12800 0 782554
fs.file-max = 782554
在 kernel 2.6 之前的版本中,file-nr 中的值由三部分组成,分别为:1.已经分配的文件句柄数,2.已经分配单没有使用的文件句柄数,3.最大文件句柄数。但在 kernel 2.6 版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了
file-max 的值是 linux 内核可以分配的最大文件句柄数。如果你看到了很多关于打开文件数已经达到了最大值的错误信息,你可以试着增加该值的限制。file-max 的默认值大概是系统内存的 10%
(系统内存以 kb 计算)