moosefs理论linux
mfs的优点:web
1. Free(GPL)服务器
2. 通用文件系统,不须要修改上层应用就可使用网络
3. 能够在线扩容,体系架构可伸缩性极强架构
4. 部署简单app
5. 高可用,可设置任意的文件冗余程度(提供比 raid1+0 更高的冗余级别,而绝对不会影响读或写的性能,只会加速!)分布式
6. 可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操做了,提供相似 oralce 的闪回等高级 dbms 的即时回滚特性!)ide
7. 提供 netapp,emc,ibm 等商业存储的 snapshot 特性。(能够对整个文件甚至在正在写入的文件建立文件的快照)性能
8. google filesystem 的一个 c 实现ui
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 计算)