手机版
你好,游客 登录 注册
背景:
阅读新闻

在 MogileFS 中使用 Nginx

[日期:2012-03-17] 来源:php-oa.com  作者:php-oa [字体: ]

目前 Nginx 实在太火了, Nginx 对 MogileFS 的功能支持的非常好,测试也非常的稳定.所以推荐使用,目前在 MogileFS 中可以使用 Nginx 的地方有二个,一个是做为前端查询和代理请求的客户端.另一个是替换存储文件的 perlbal.

Nginx 做为 MogileFS 的前端客户端


我们使用 Nginx 来吐文件,做前端的查询代理时,我们需要使用到 mogilefs 的这个模块.可以下载这个模块编译进 Nginx 就行了.直接使用 ./configure –add-module= 这个参数就可以了.
最新的这个模块的下载地址是:https://github.com/vkholodkov/nginx-mogilefs-module
使用这个需要考虑到网站原来的 url 是什么样的.比如:

这个 URL 中的 UUID 是 A6B00135E24AB17E043B9B5453762438.png.这时我们使用这个做 key 来存成 MogileFS 中就行.
再结合 rewrite,只要 key 在 url 里有,就能直接代理到后端的 mogilefs.象如下的写法,会直接取 A6B00135E24AB17E043B9B5453762438.png 来做查询用的 key.

01
02
03
04
05
06
07
08
09
10
11
12
location  ~ ([^\/]+)$ {
        mogilefs_tracker 192.168.1.xxx:7001;
        mogilefs_domain img;
        mogilefs_methods GET;
        mogilefs_noverify on;
 
        mogilefs_pass $1 {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
        }
}

如果使用了多个 tracker 的话,要配置使用多个 tracker 来进行负载均衡和备份.可以直接配置 tracker 为 upstrame:

1
2
3
4
upstream online_mogilefs {
  server 10.0.0.1:7001;
  server 10.0.0.2:7001;
}

然后后面配置 tracker 的连接时,直接加上就行了

1
mogilefs_tracker online_mogilefs;

 

使用 Nginx 来替换 storage nodes 上 mogstored 中的 Perlbal

我们可能想使用 Nginx 来替换 Perlbal 来做上传和写入,我们可以使用 Nginx 的 dav 模块来实现这个.只要编译 Nginx 时使用 –with-http_dav_module 就行了.目前这个模块好象是默认的.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
server {
    listen   7500;
    charset utf-8;
 
    location / {
            autoindex    on;
            root     /var/mogdata/;
            dav_methods put delete mkcol copy move;
            client_max_body_size            200m;
            client_body_temp_path           /data/temp;
            create_full_put_path               on;
            dav_access user:rw group:rw all:r;
    }
 
    error_page 500 502 503 504 /50x.html;
location /50x.html {
    root html;
}
}

在上面配置:

  • autoindex :   一定需要设置,不然 mogadm check 时会显示出错.不然需要放一个 index.html 的文件到/var/mogdata. 使用 mogadm 来检查时 Nginx 才会返回 200 OK.
  • client_max_body_size  如果要上传比较大的文件时,一定要设置这个.象我用来存视频文件,这个需要修改得非常大.

注意,上面这个 Nginx 是使用 nginx 的用户来进行操作的,所以你需要给你的 /var/mogdata/ 目录修改成 nginx 的用户才行.另外还有一点要非常注意 client_body_temp_path 的这个参数.建议给上面每个 dav 的设备都设置一个.不然会复制二份文件.然后在 copy 会影响性能,如果单独配置就不会 .象我不喜欢配置这么多,就给这个 temp 写到了 ssd 上面,没有你也可以直接写内存中(感谢Daniel Leaberry<leaberry@gmail.com>的建议).

然后修改你的 mogstored.conf 这个文件.关掉原来的 Perlbal 的监听,但注意了 mogstored 这个服务还是必须启动的.因为他会监控硬盘的好坏和 IO 的性能.只要给 server=none 就行了.就不会启动了.

1
2
3
server=none
mgmtlisten=0.0.0.0:7501
docroot=/var/mogdata

这个可以打开 Nginx 的日志来进行 debug .可以观查下列状态代码:

  201 (Created):源资源被成功移动,在目标上创建了一个新资源.这个使用 Nginx 后日志中会常常见到.
  204 (No Content):源资源被成功地移动到一个预先存在的目标资源上.
  403 (Forbidden):这个错误表明至少出现以下两种情况之一:

1) 服务器不允许在其名称空间中的给定位置上创建集合,或者
2) Uniform Resource Indicator (URI) 请求的父集合存在,但是不接受成员.

  405 (Method Not Allowed): mkcol() 方法只能在被删除或不存在的资源上执行,所以文件夹存在使用这个时会报这个.
  409 (Conflict):只有在创建了一个或多个中间集合之后才能在目标上建立集合.
  412 (Precondition Failed):服务器不能维持 propertybehavior XML 属性中列出的属性的存活,或者 Overwrite 的头是 F,目标资源的状态不为 null.
  415 (Unsupported Media Type):服务器不支持主体的请求类型.
  423 (Locked):源资源或目标资源被锁.
  502 (Bad Gateway):当目标在另一台服务器上,且目标服务器拒绝接受资源时,将出现这种错误.
  507 (Insufficient Storage):在执行该方法后资源没有足够的空间来记录资源的状态.

 FQA: 如果 Nginx 的错误日志报如下错误:
2012/03/12 17:51:05 [error] 7090#0: *299695 mkdir() "/var/mogdata/dev16/0/000/081" failed (17: File exists), client: 192.168.1.233, server: , request: "MKCOL /dev16/0/000/081/ HTTP/1.0"
可以直接到配置文件中给

1
dav_methods put delete mkcol copy move;

修改成

1
dav_methods put delete copy move;

这时就不会报这个错了,记得 create_full_put_path 这个参数一定要打开才行.这样性能也会好些.

linux
相关资讯       Nginx  MogileFS 
本文评论   查看全部评论 (1)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 是打发斯蒂芬 发表于 2012/9/7 11:24:39
的缴费和撒旦就发货时发生大家开发商将开发环境思考