[原创]MogileFS 用户层的分布式文件系统
Roc.Ken
|
1#
Roc.Ken 发表于 2008-10-19 18:29
[原创]MogileFS 用户层的分布式文件系统
-------昨晚的测试结果, 整理出来分享, 如需转载 请注明来源: Joseph.Chen from http://admon.org @2008-10-19
如本文有误或者有新内容需要添加往联系我: E-mail c a x 0 c h @ g m a i l MogileFS 是一套高效的文件系统冗余组件, 由Six Apart开发(也是 memcached 的发布者), 广泛应用在高负载站点上,比如 LiveJournal, Digg, Flickr, Yupoo.com, Snappark.com. 它以 Perl 开发, 工作在用户层, 不需要安装任何内核模块, 以普通用户模式运行. 当前版本号为 2.20 借助 MogileFS 可以把多台主机的空间组合成一个集中的存储系统, 相互之间复制以达到冗余, 有效排除了单点故障, 能保证所存储的文件对Web服务100%可用. 在各存储节点均可启用多个 Web Server 对外提供服务, 这些 Web 共用一个存储系统.节点间 负载及IO均衡 由 MogileFS 自身维护. MogileFS 适用于保存一次写入多次读取的环境, 常用于保存大量的图片. 安装 Mogile 所需 Perl 模块列表: [/home/mogile]# ls *.tar.gz BSD-Resource-1.2901.tar.gz Gearman-Server-1.09.tar.gz MogileFS-Utils-2.13.tar.gz Danga-Socket-1.59.tar.gz IO-AIO-3.15.tar.gz Net-Netmask-1.9015.tar.gz DBD-mysql-4.008.tar.gz Linux-AIO-1.9.tar.gz Perlbal-1.72.tar.gz Gearman-1.09.tar.gz MogileFS-Client-1.08.tar.gz Sys-Syscall-0.22.tar.gz Gearman-Client-Async-0.94.tar.gz mogilefs-server-2.20.tar.gz 其中: mogilefs-server-2.20.tar.gz 包括 mogilefsd 和 mogstored 两个程序.前者是 MogileFS 的 tracker, 它将一些全局信息写入到 MySQL 数据库里(innodb 表); 后者是维护存储节点需要的守护进程, 它其实是个 HTTP Server, 默认侦听在7500端口,接受客户端的文件备份请求. MogileFS-Utils-2.13.tar.gz 包含了 MogileFS 的一些管理工具, 如 mogadm, mogtool. MogileFS-Client-1.08.tar.gz 提供了 Perl API(MogileFS.pm), 用这个模块可以编写客户端程序. 程序结构: 一台启用了 mogilefsd 和 mogstored 的测试环境: ** 转载请注明: Joseph Chen from http://admon.org @2008-10-19 [/home/mogile]# ps -ef | grep mog hadoop 13973 1 0 Oct17 ? 00:00:50 mogilefsd hadoop 13974 13973 0 Oct17 ? 00:00:16 mogilefsd [replicate] hadoop 13975 13973 0 Oct17 ? 00:00:00 mogilefsd [delete] hadoop 13976 13973 0 Oct17 ? 00:00:04 mogilefsd [queryworker] hadoop 13977 13973 0 Oct17 ? 00:00:03 mogilefsd [queryworker] hadoop 13978 13973 0 Oct17 ? 00:00:01 mogilefsd [queryworker] hadoop 13979 13973 0 Oct17 ? 00:00:01 mogilefsd [queryworker] hadoop 13980 13973 0 Oct17 ? 00:00:04 mogilefsd [queryworker] hadoop 13981 13973 0 Oct17 ? 00:00:57 mogilefsd [monitor] hadoop 13982 13973 0 Oct17 ? 00:00:02 mogilefsd [reaper] hadoop 13983 13973 0 Oct17 ? 00:00:06 mogilefsd [fsck] hadoop 25434 1 0 Oct18 ? 00:00:35 mogstored hadoop 25435 25434 0 Oct18 ? 00:00:02 mogstored [diskusage] hadoop 25436 25434 0 Oct18 ? 00:00:01 mogstored [iostat] hadoop 25437 25434 0 Oct18 ? 00:00:00 mogstored [fidsizes] MogileFS由如下部分构成: * MySQL DB -- 数据库是用来存放MogileFS的元数据的地方, 做命名空间到和文件物理位置的 Mapping. 数据库是 MogileFS 的核心部分. * Tracker (即上面的 mogilefsd): 基于事件的(event-based)来管理客户端应用的交互, 包括将请求均衡分配到 "queryworker" 中, 让 mogilefsd 子进程去处理. 可以使用多个的Tracker来做负载平衡. mogilefsd的子进程: o Replication --- 机器间复制文件 o Deletion --- 从命名空间删除是立即的,从文件系统删除是异步的 o QueryWorker --- 响应客户端的请求 o Reaper --- 在磁盘失败后将文件复制请求重新放到队列中 o Monitor --- 监测主机和设配的健康度和状态 * Storage Nodes -- 文件存放的实际位置. 存储节点是一个HTTP服务器,用于删除, 存取等操作, 支持 WebDAV 服务器均可使用, 推荐使用 mogstored. 工作原理简述: * 应用程序请求打开一个文件, 通过 RPC 通知到 tracker,并找到一个可用的机器. * tracker 做一些负载均衡处理,然后给应用程序一些可能用的地址. * 应用程序往其中的一个地址写, 如果写失败, 它会重试或者写到其他地址. * 应用程序通过 "create_close" 告诉tracker文件的写入位置. * tracker 将写入点与域空间的记录(即数据库中的记录)关联. * tracker 在后台开始复制文件, 直到完成类别中预设的复制规则(比如: 重要的文件需要复制5份) * 随后,应用程序发起 "get_paths" 请求获取 domain + key (即 key == "filename"的格式. key在一个domain中是唯一的.), tracker根据各个节点的IO情况整理并返回所有可用的URL列表. * 应用程序按顺序尝试这些URL地址.(tracker 持续监测主机和设备状态,因此不会返回死连接,默认情况下他对返回列表中的第一个URL做双重检查,除非你不要它这么做.) 在存储节点上用来保存文件的文件存储目录结构: $rootpath/$dev/a/bbb/ccc/$fid.fid 其中 $rootpath为主机上用来存储的根路径, $dev 表示是该主机上被登记的设备的映射路径, a/bbb/ccc 是**目录用于将文件分散到不同目录. $fid.fid 对应记录$fid的物理文件. a/bbb/ccc 是 fid 除 1000 求余数得到的,这样保证一个目录下不会有太多目录和文件. 如果一个文件的 fid 为 1234567890,则在 $rootpath 下的路径为: 1/234/567/1234567890.fid [/home/mogile]# ls -l data/dev1/0/000/000/0000000005.fid -rw-r--r-- 1 hadoop hadoop 264741 Oct 18 05:31 data/dev1/0/000/000/0000000005.fid API 接口: 有完善的 Perl 接口, 同时也有第三方提供了 PHP 和 Java 的API. 参考: http://netsneek.info/index.php?hl=f5&q=uggc%3A%2F%2Fzbtvyrsf.cojvxv.pbz%2FPyvrag%2BYvoenevrf 参考网站: http://www.danga.com/mogilefs/ http://mogilefs.pbwiki.com/ [Blocked] Joseph.Chen from http://admon.org @2008-10-19 |