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

在开源分布式文件系统MogileFS 中使用 Nginx

[日期:2012-03-13] 来源:Linux社区  作者:Linux [字体: ]

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

Nginx 做为 MogileFS 的前端客户端

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

使用这个需要考虑到网站原来的 url 是什么样的,比如:

http://www.linuxidc.com/uploads/front_page/A6B00135E24AB17E043B9B5453762438.png

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

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;
}
}

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

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

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 上面。没有你也可以直接写内存中。

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款