歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在MogileFS中使用Nginx

在MogileFS中使用Nginx

日期:2017/2/27 16:05:57   编辑: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.a.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 上面。沒有你也可以直接寫內存中。

然後修改你的 mogstored.conf 這個文件,關掉原來的 Perlbal 的監聽。但注意了 mogstored 這個服務還是必須啟動的,因為他會監控硬盤的好壞和 IO 的性能,只要給 server=none 就行了,就不會啟動了。
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"

可以直接到配置文件中給
dav_methods put delete mkcol copy move;

修改成
dav_methods put delete copy move;

這時就不會報這個錯了,記得 create_full_put_path 這個參數一定要打開才行.這樣性能也會好些。
Copyright © Linux教程網 All Rights Reserved