Tag Archives: MogileFS

nginx 的 mogilefs 模块

nginx 有一个第三方的 mogilefs 模块,实现了一个 mogilefs 的客户端,可以用 webdav 的方式访问。

文档和下载链接见:http://www.grid.net.ru/nginx/mogilefs.en.html (需翻墙)

用上这个模块,再结合 rewrite,只要 key 在 url 里有,就能直接代理到后端的 mogilefs。

server {
    server_name  download.sample.com;
    charset utf-8;
    access_log  logs/download.access.log  main;
    root   /srv/www; 

    mogilefs_tracker 192.168.1.100:6001;
    mogilefs_domain domain_name;
    mogilefs_class class_name;
    mogilefs_methods GET;

    location ~ ^/files/(.+)  {
        mogilefs_pass $1 {
            proxy_pass $mogilefs_path; 
            proxy_hide_header Content-Type;
        }
    }
    include    extra/mime.types;
}

借用 if 先把 key 放到一变量里,然后就可以传递给后端了。

在 mogilefs_pass 里也可以配置缓存。

写操作配好后,也可以直接用 webdav 方式操作,不用手动向 tracker 请求存储节点,存进去,再通知同步了。

经实验,这个模块表现并不稳定,建议目前不要在生产环境使用。

怎样安装 – MogileFS文档翻译

原文地址:http://mogilefs.pbworks.com/HowTo

简介

这篇文档解释了怎样安装 MogileFS 和一个基本的配置。本文是面向初级系统管理员,让他们可以在一个基本的 linux 发行版上把 MogileFS 跑起来。

假定你要安装 3 种角色。一台机器上可以承担多于一种角色。我会使用主机名 mogiledb.yourdomain.com、mogiletracker.yourdomain.com 和 mogilestorage.yourdomain.com 。根据你的需要重命名他们。

获取 MogileFS

你随便看看就能在 Danga 网站上或者 CPAN 或者从当前的 SVN 仓库里找到 MogileFS 。如果你从 SVN 上拉回代码,你会得到一个崭新的版本并且和这篇文档最相符。

用 svn (http://subversion.trigris.org),chekout 最近最好的版本(下面的例子是从 trunk 中拉回代码)。

$ mkdir mogilefs-src
$ cd mogilefs-src
$ svn checkout http://code.sixapart.com/svn/mogilefs/trunk

安装

创建一个数据库

安装一个 MySQL 服务器已经超出了这篇文档的范围。在多数发行版中都能有这些包,找一个你需要的套件。在安装好一个 Mysql 服务器并且运行在主机 mogiledb.yourdomain.com 上。为 MogileFS 创建一个表和一个用户。某些库不能很好的处理 MySQL 的密码,如果你用到了,用函数 “OLD_PASSWORD” 设置密码。请确认你用了比例子里更好的密码。

#mysql
mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO ‘mogile’@’%’;
mysql> SET PASSWORD FOR ‘mogile’@’%’ = OLD_PASSWORD( ‘sekrit’ );
mysql> FLUSH PRIVILEGES;
mysql> quit

你还需要创建 shema,这会在之后的文档里说到。

安装 Tracker 和 Storage 服务器。

要成功安装 MogileFS 你需要获取并安装 MogileFS 特定的 perl 模块和他们的依赖包。顺利的话,你已经从 SVN 仓库取回了 MogileFS 的源代码。如果是的话,服务器端组件已经在 trunk/server 目录了。一般说来,你需要先安装依赖模块(见下文)。一旦所有的依赖包都已经就绪,就可以用如下命令安装 MogileFS (从你获取的 SVN 顶级目录开始)。

# cd trunk/server/
# perl Makefile.PL
# make
# make test
# make install

如果你在这个过程中出错,错误信息很可能会告诉你缺少了某个依赖模块。如果在 ‘make test’ 这步出错:”t/00-startup….DBI connect(‘mysql’,’root’,…) failed: Can’t
connect to local MySQL server through socket
‘/var/run/mysqld/mysqld.sock’ (2) at t/lib/mogtestlib.pl line 16″,一般可以忽略。在 mogiledb.yourdomain.com 之外运行 MySQL 应该是不必要的。

你和可能想要在每个 tracker 或 storage 服务器(这些会在之后配置)上安装一些实用工具。它们位于 trunk/utils 目录,可以用如下命令安装(从你获取的 SVN 顶级目录开始)。

# cd trunk/utils/
# perl Makefile.PL
# make
# make test
# make install

你还会想要 API —— 工具库需要这个。它们位于 trunk/api/perl 目录,可以用如下命令安装(从你获取的 SVN 顶级目录开始)。

# cd trunk/api/perl
# perl Makefile.PL
# make
# make test
# make install

安装 Perl 模块依赖

对于 Perl 模块,你需要 Perlbal 和 Danga-Socket (至少)和其他依赖。如果你不确定怎样放置依赖模块,考虑使用 CPAN(http://cpan.org/),它可以安装一个模块以及他的所有的依赖。如果你已经有一个合适的 Perl 安装,你可能已经有了多数非 MogileFS 模块。

安装多数 perl 模块的基本过程是:

解压模块

# tar -xvzf Linux-AIO-1.9.tar.gz

创建 makefile:

# cd Linux-AIO-1.9
# perl Makefile.PL

构建代码

#make

测试代码(默写模块可能没有这一步,但不影响使用)

#make test

安装

#make install

如果你看到错误信息表明缺少一个模块依赖,先获取并安装缺少的模块,然后再试一次。

 

定义 – MogileFS文档翻译

原文地址:http://mogilefs.pbworks.com/Definitions

domain:

domain 是文件区分的最高层次。每个 domain 中的文件 key 是唯一的。一个 domain 包含了在 domain 中定义文件的 class 的集合。domain 的例子: fotobilder、livejournal。

class:
每个文件只属于一个 class 。一个 class 只属于一个 domain 。事实上,class 只是指定文件的“最小复制数”的。class 的例子:userpicture、userbackup、phonepost。

key:

key 是一个标识文件的唯一的文本字符串。在一个 domain 中 key 是唯一的。key 的例子:userpciture:34:39、phonepost:93:3834、userbackup:15。

最小复制数:

这是 class 的一个属性。定义了这个 class 中的文件需要被复制到不同的设备的份数,以确保数据冗余避免丢失。

文件:

文件是一个上传到 MogileFS 来存储确定的 bit 集合。文件会根据“最小复制数”被复制。每个文件有一个 key ,是一个 class 的一部分,位于一个 domain 中。文件是 MogileFS 为你存储的东西。

 

高层概览 – MogileFS文档翻译

原文地址:http://mogilefs.pbworks.com/HighLevelOverview

一下是关于 MogileFS 的工作方式的高层概览。

涉及到的部分:

 

  • 应用 (Application):要存储/加载文件的东西。
  • 跟踪器(Tracker)(mogilefsd 进程):基于事件的父进程/消息总线,管理所有来自应用的客户端通信(要处理的请求操作)。包括均衡负载请求到“请求工作进程”,处理所有 mogilefsd 子进程间的通信。你应该运行两个 tracker 在不同的主机上,以实现 HA 或者进一步实现负载均衡(需要多于两个)。mogilefsd 下的子进程包括:
    • 复制(Replication):四处复制文件。
    • 删除(Deletion):从 namespace 中删除是即时的。从文件系统中删除是异步的。
    • 查询(Query):响应来自客户端的请求。
    • 死神(Reaper):在一个磁盘失败的时候将要复制的文件重新排入队列。
    • 监控器(Monitor):监控主机和设备的健康和状态
  • 数据库(Database):存储 MogileFS 元数据(命名空间、某个文件在哪里)的数据库。应当以 HA 配置搭建,以避免单点失败。
  • 存储节点(Storage Nodes):文件存放的地方。存储节点就是一个支持 DELETE、PUT 等操作的。任何 WebDAV 服务器都可以。但是建议使用 mogstroed。mogilefsd 可以配置为使用两个不同的服务器的不同的端口。使用 mogstored 进行所有的 DAV 操作(以及边界监控),选择你的 快速/轻量 的 HTTP 服务器来处理 GET 请求。通常每个挂载点上有一个 fat SATA 磁盘,每个挂载在 /var/mogdata/devNN 。
高层流程:
  • app 请求打开一个文件(使用库来 RPC 一个 tracker,找到任意一个正常的)。进行一个 “create_open” 请求。
  • tracker 用负载均衡决定可以到哪儿去,并给 app 一些可能的位置。
  • app 写到其中的一个位置(如果中途写入失败,可以重试并写到其他地方)。
  • app(客户端)用 “create_close” API 告诉 tracker 它写到哪里去了。
  • 然后 tracker 把名字连入 domain 的命名空间(通过数据库)。
  • tracker 在后台启动文件复制,直到完成文件类 (class) 的复制策略。
  • 之后,app 对 domain + key 进行一个 “get_paths” 请求(key == 文件名)。tracker 回复(在查询数据库/memcahe/其他)文件所有可能的 URL 。基于每个位置的 I/O 使用率评出权重。
  • app 依次尝试这些 URL (尽管 tracker 的持续监控所有的主机/设备,因此不会返回失败的东西。并且默认会对第一个返回项检查两次,除非你不让它这么做)。