您的位置:首页 > 其它

分布式文件系统Mogilefs

2015-12-07 10:47 453 查看
MogileFS简介:
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。

MogileFS特性
1 工在于应用层
2 无单点,三大组件(tracker,mogstore,database)皆可实现高可用;
3 自动完成文件复制,制的最小单位不是文件,而是class;基于不同的class,文件可以被自动的复制到多个有足够存储空间的存储节点上;
4 传输无需特殊协议,可以通过NFS或HTTP协议进行通信;
5 名称安间简单,文件通过一个给定的key来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;
6 不共享任何数据,每个存储节点只需维护自己所属的存储设备(device)即可;

MogileFS由部分组成:
(1) server:主要包括mogilefsd和mogstored两个应用程序。
mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;
mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。
(2) utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。
在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
(3) 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。

存储主机(节点)
这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器.

设备(device)
一个存储节点,以就是上面的主机,可以有多个 device, 就是用来存放文件的目录(例如挂载的目录),每个设备都有一个设备id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.

MogileFS架构
tracker 追踪元数据
mogilefsd 守护进程
它的主要职责
replication 节点之间文件得复制
deletion 删除文件
queryworker 响应客户请求的文件元数据访问请求
reaper 在存储失败后将文件复制请求重新放置于队列中
monitor 监主机和设备的健康状态
database 存储元数据
存储mogilefs的元数据,一般使用MySQL ,建议使用冗余方案以保证其可用性:(MMM,MHA)
mogilefs专门提供了数据结构管理工具mogdbsetup
storage 存储数据
mogstored 守护进程,一个准备好的mogstored节点可通过mogadm命令添加至现在的集群中。
存储节点需要定义"设备" 用作存储空间 每个"设备"在当前集群都需要通过一个惟一的DevID来标识
Client
客户端用于与mogilefs建立通信,完成数据存取;



工作流程



高可用架构




MogileFS管理的几个概念:
Domain
一个MogileFS 可以有多个Domain, 用来存放不同文件(大小,类型)
同一个Domain内,key必须唯一
不同Domain内,Key可以相同
Class
最小复制单元
文件属性管理
定义文件存储在不同设备上份数据
每个设备都有ID号,Domain+Fid用来定位文件

实验准备
安装Mariadb
https://mariadb.org/ 网站下载 mariadb-5.5.46-linux-x86_64.tar.gz
1.准备
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 mysql
mkdir -pv /mydata/data
chown -R mysql.mysql /mydata
2.安装Mariadb
tar zxf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-5.5.46-linux-x86_64 mysql
cd mysql
chown -R root.mysql ./*
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
mkdir /etc/mysql
cp support-files/my-large.cnf  /etc/mysql/my.cnf
3.配置Mariadb
vim /etc/mysql/my.cnf
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
4.将Mariadb加到服务项
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
5.将Mariadb客户端程序加到环境变量
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh
源码安装MogileFS
去官方下载http://www.danga.com/的源码
MogileFS-Server MogileFS-Server-2.72.zip
MogileFS-Utils MogileFS-Utils-2.29.zip
perl-MogileFS-Client perl-MogileFS-Client-1.17.zip
Perlbal Perlbal-1.80.zip #Tracker不用安装,storage必须安装
1.安装epel
wget http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm
2.安装MogileFs 用到的依赖包
yum install  perl-IO-stringy perl-DBD-MySQL  perl-BSD-Resource      #base源
yum install  perl-Danga-Socket perl-IO-AIO perl-Net-Netmask         #epel源
3 安装MogileFS-Client
unzip perl-MogileFS-Client-1.17.zip
cd perl-MogileFS-Client-1.17
perl Makefile.PL
make
make test
make install
4.安装MogileFS-Utils
unzip MogileFS-Utils-2.29.zip
cd MogileFS-Utils-2.29
perl Makefile.PL
make
make install
5.安装MogileFS-Server
unzip MogileFS-Server-2.72.zip
cd MogileFS-Server-2.72
perl Makefile.PL
make
make test
make install
6.安装Perlbal (Tracker不用安装,storage必须安装)
unzip Perlbal-1.80.zi
cd Perlbal-1.80.zip
perl Makefile.PL
make
make test
make install
7.添加mogilefs系统服务启动账号
groupadd -r mogilefs
useradd -r -g mogilefs  mogilefs
8.复制mogilefs的配置文件到/etc/mogilefs/ ,并创建用到的目录
mkdir /etc/mogilefs/
cp /root/MogileFS-Server-2.72/conf/* /etc/mogilefs/
mkdir /var/run/mogilefsd/
chown mogilefs.mogilefs /var/run/mogilefsd/
9添加mogilefsd的服务启动脚本
vim /etc/rc.d/init.d/mogilefsd
#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# mogilefsd - Startup script for the MogileFS tracker
#
# chkconfig: - 85 15
# description: MogileFS tracker
# processname: mogilefsd
# config: /etc/mogilefs/mogilefsd.conf
# pidfile: /var/run/mogilefsd/mogilefsd.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Path to the apachectl script, server binary, and short-form for messages.
lockfile=${LOCKFILE-/var/lock/subsys/mogilefsd}
RETVAL=0
prog=/usr/local/bin/mogilefsd
#prog=$(which mogilefsd)
start() {
ulimit -n 65535
echo -n $"Starting mogilefsd"
su - mogilefs -c "$prog -c /etc/mogilefs/mogilefsd.conf --daemon" &> /dev/null
RETVAL=$?
[ $RETVAL = 0 ] && success && touch ${lockfile} || failure
echo
return $RETVAL
}
stop() {
echo -n $"Stopping mogilefsd"
netstat -nlp|grep "mogilefsd"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9
RETVAL=$?
[ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure
echo
}
reload() {
echo -n $"Reloading mogilefsd: "
killall mogilefsd -HUP
RETVAL=$?
[ $RETVAL = 0 ] && success || failure
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status mogilefsd
RETVAL=$?
;;
restart)
stop
sleep 1
start
;;
reload)
reload
;;
*)
echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
exit 1
esac
exit $RETVAL

10.设置mogstored 的服务启动脚本
vim /etc/rc.d/init.d/mogstored

#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# mogstored - Startup script for the MogileFS storage
#
# chkconfig: - 86 14
# description: MogileFS storage
# processname: mogstored
# config: /etc/mogilefs/mogstored.conf
# pidfile: /var/run/mogilefsd/mogstored.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Path to the apachectl script, server binary, and short-form for messages.
lockfile=${LOCKFILE-/var/lock/subsys/mogstored}
RETVAL=0
configfile='/etc/mogilefs/mogstored.conf'
prog=/usr/local/bin/mogstored
#prog=$(which mogstored)
start() {
ulimit -n 65535
echo -n $"Starting mogstored"
su - mogilefs -c "$prog -c $configfile --daemon"  &> /dev/null
RETVAL=$?
[ $RETVAL = 0 ] && success && touch ${lockfile} || failure
echo
return $RETVAL
}
stop() {
echo -n $"Stopping mogstored"
netstat -nlp|grep "mogstored"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9
RETVAL=$?
[ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure
echo
}
reload() {
echo -n $"Reloading mogstored: "
killall mogstored -HUP
RETVAL=$?
[ $RETVAL = 0 ] && success || failure
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status mogstored
RETVAL=$?
;;
restart)
stop
sleep 1
start
;;
reload)
reload
;;
*)
echo $"Usage: mogstored {start|stop|restart|reload|status}"
exit 1
esac
exit $RETVAL
11.将mogilefsd和mogstored 添加到服务项
chmod +x /etc/init.d/mogilefsd
chmod +x /etc/init.d/mogstored
chkconfig --add mogilefsd
chkconfig --add mogstored

实验一 单tracker + 双 storage
10.10.10.54 tracker + database
10.10.10.55 storage
10.10.10.56 storage
分别在三台服安装mogilefs ,并在10.10.10.54安装mariadb
准备mysql授权10.10.10.0/24段的IP 全部可以连接MySQL
GRANT ALL ON *.* TO 'root'@'10.10.10.%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
初始化Mogilefs 数据库,使用mogdbsetup
mogdbsetup --dbhost=10.10.10.54 --dbrootuser=root --dbrootpass=root --dbname=mogilefs --dbuser=mogilefs --dbpass=mogilefs
This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.
Continue? [N/y]: y
Create/Upgrade database name 'mogilefs'? [Y/n]: y
Grant all privileges to user 'mogilefs', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: y

配置10.10.10.54 tracker
vim /etc/mogilefs/mogilefsd.conf
# Enable daemon mode to work in background and use syslog
daemonize = 1
# Where to store the pid of the daemon (must be the same in the init script)
pidfile = /var/run/mogilefsd/mogilefsd.pid
# Database connection information
db_dsn = DBI:mysql:mogilefs:host=10.10.10.54
db_user = mogilefs
db_pass = mogilefs
# IP:PORT to listen on for mogilefs client requests
listen = 0.0.0.0:7001
启动
service mogilefsd start
检查监听的7001端口
ss -tnl
State       Recv-Q Send-Q                   Local Address:Port        Peer Address:Port
LISTEN      0      128                                  *:7001                   *:*

配置10.10.10.55 和10.10.10.56 storage
mkdir -pv /mogdata/dev2         #10.10.10.55  storage2
mkdir -pv /mogdata/dev3         #10.10.10.56  storage3
chown -R mogilefs.mogilefs /mogdata
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogdata

开启storage(如果启动失败安装Perlbal 和perl-BSD-Resource)
service mogstored start
检查7500 和7501端口是否存在
ss -tnl
State       Recv-Q Send-Q             Local Address:Port    Peer Address:Port
LISTEN      0      128                            *:7500               *:*
LISTEN      0      128                            *:7501               *:*

使用mogadm 进行管理
1 add host
mogadm --trackers=10.10.10.54:7001 host add 10.10.10.55 --ip 10.10.10.55 --status=alive
mogadm --trackers=10.10.10.54:7001 host add 10.10.10.56 --ip 10.10.10.56 --status=alive
mogadm --trackers=10.10.10.54:7001 host list
10.10.10.55 [1]: alive
IP:       10.10.10.55:7500
10.10.10.56 [2]: alive
IP:       10.10.10.56:7500
2 add device
mogadm --trackers=10.10.10.54:7001 device add 10.10.10.55 2
mogadm --trackers=10.10.10.54:7001 device add 10.10.10.56 3
mogadm --trackers=10.10.10.54:7001 device list
10.10.10.55 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      1.885     44.705     46.590        100
10.10.10.56 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev3:   alive      1.886     44.704     46.590        100
mogadm --trackers=10.10.10.54:7001 check
Checking trackers...
10.10.10.54:7001 ... OK
Checking hosts...
[ 1] 10.10.10.55 ... OK
[ 2] 10.10.10.56 ... OK
Checking devices...
host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
---- ------------ ---------- ---------- ---------- ------ ---------- -----
[ 1] dev2            46.590      1.917     44.674   4.11%  writeable   0.0
[ 2] dev3            46.590      1.917     44.674   4.11%  writeable   0.0
---- ------------ ---------- ---------- ---------- ------
total:    93.181      3.834     89.347   4.11%
3  add domain
mogadm --trackers=10.10.10.54:7001 domain add pic
mogadm --trackers=10.10.10.54:7001 domain add conf
mogadm --trackers=10.10.10.54:7001 domain list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
conf                 default                   2        MultipleHosts() NONE
pic                  default                   2        MultipleHosts() NONE
4  add class
mogadm --trackers=10.10.10.54:7001 class add pic test1 --mindevcount=2
mogadm --trackers=10.10.10.54:7001 class list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
conf                 default                   2        MultipleHosts() NONE
pic                  default                   2        MultipleHosts() NONE
pic                  test1                     2        MultipleHosts() NONE
检查数据库内容(要上传一次文件刷新才有内容)
mogstats --db_dsn="DBI:mysql:mogilefs:host=10.10.10.54" --db_user="mogilefs" --db_pass="mogilefs" --stats="all"
Fetching statistics... (all)
Statistics for devices...
device     host                   files     status
---------- ---------------- ------------ ----------
dev2       10.10.10.55          1      alive
dev3       10.10.10.56          1      alive
---------- ---------------- ------------ ----------
Statistics for file ids...
Max file id: 3
Statistics for files...
domain               class           files    size (m)  fullsize (m)
-------------------- ----------- ---------- ----------- -------------
pic                  default             1           0             0
-------------------- ----------- ---------- ----------- -------------
Statistics for replication...
domain               class        devcount      files
-------------------- ----------- ---------- ----------
pic                  default             2          1
-------------------- ----------- ---------- ----------
Statistics for replication queue...
status                      count
-------------------- ------------
-------------------- ------------
Statistics for delete queue...
status                      count
-------------------- ------------
-------------------- ------------
Statistics for general queues...
queue           status                      count
--------------- -------------------- ------------
--------------- -------------------- ------------
测试
mogupload 上传文件
(注意文件大小写,Could not stat at /usr/local/bin/mogupload line 77. 文件名写错,找不到要上传的文件)
mogupload --trackers=10.10.10.54:7001  --domain=pic --key='mog1.PNG' --file='./mog1.PNG'
mogfileinfo 获取文件的信息
mogfileinfo --trackers=10.10.10.54:7001  --domain=pic --key='mog1.PNG'
- file: mog1.PNG
class:              default
devcount:                    2
domain:                  pic
fid:                    3
key:             mog1.PNG
length:               299456
- http://10.10.10.55:7500/dev2/0/000/000/0000000003.fid - http://10.10.10.56:7500/dev3/0/000/000/0000000003.fid[/code] href="http://10.10.10.56:7500/dev3/0/000/000/0000000003.fid" target=_blank>
流览器打开查到的链接测试



mogfetch 下载文件
格式
/usr/bin/mogfetch --trackers=host --domain=foo --key='/hello.jpg' --file='./output'

实验二 三台服务器同时为tracker 和storage
10.10.10.54 tracker + database + storage
10.10.10.55 tracker + storage
10.10.10.56 tracker + storage
mysql 另外实现,本实验为mysql单实例
复制tracker的配置文件到另外两台storage服务器
scp /etc/mogilefs/mogilefsd.conf  10.10.10.55:/etc/mogilefs/
scp /etc/mogilefs/mogilefsd.conf  10.10.10.56:/etc/mogilefs/
复制storage的配置文件到tracker服务器
scp /etc/mogilefs/mogstored.conf 10.10.10.54:/etc/mogilefs/

在三台服务器上全部开启 tracker 和 storage(如果storage启动失败,安装Perlbal 和perl-BSD-Resource))
service mogilefsd start
service mogstored start

检查状态 7500 7501 7001 都处于监听状态
ss -tnl
State       Recv-Q Send-Q             Local Address:Port               Peer Address:Port
LISTEN      0      128                            *:7500                          *:*
LISTEN      0      128                            *:7501                          *:*
LISTEN      0      128                            *:7001                          *:*

添加tracker 服务器的host 和 device
mogadm --trackers=10.10.10.54:7001 host add 10.10.10.54 --ip 10.10.10.54 --status=alive
mogadm --trackers=10.10.10.54:7001 device add 10.10.10.54 1
查看信息
[root@node4 ~]# mogadm --trackers=10.10.10.54:7001 host  list
10.10.10.55 [1]: alive
IP:       10.10.10.55:7500
10.10.10.56 [2]: alive
IP:       10.10.10.56:7500
10.10.10.54 [3]: alive
IP:       10.10.10.54:7500

[root@node4 ~]# mogadm --trackers=10.10.10.54:7001 device list
10.10.10.55 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      1.917     44.673     46.590        100
10.10.10.56 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev3:   alive      1.917     44.673     46.590        100
10.10.10.54 [3]: alive
used(G)    free(G)   total(G)  weight(%)
dev1:   alive      2.932     43.658     46.590        100
[root@node4 ~]# mogadm --trackers=10.10.10.54:7001 device list
10.10.10.55 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      1.917     44.673     46.590        100
10.10.10.56 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev3:   alive      1.917     44.673     46.590        100
10.10.10.54 [3]: alive
used(G)    free(G)   total(G)  weight(%)
dev1:   alive      2.932     43.658     46.590        100
[root@node4 ~]# mogadm --trackers=10.10.10.55:7001 device list
10.10.10.55 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      1.917     44.673     46.590        100
10.10.10.56 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev3:   alive      1.917     44.673     46.590        100
10.10.10.54 [3]: alive
used(G)    free(G)   total(G)  weight(%)
dev1:   alive      2.932     43.658     46.590        100
[root@node4 ~]# mogadm --trackers=10.10.10.56:7001 device list
10.10.10.55 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      1.917     44.673     46.590        100
10.10.10.56 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev3:   alive      1.917     44.673     46.590        100
10.10.10.54 [3]: alive
used(G)    free(G)   total(G)  weight(%)
dev1:   alive      2.932     43.658     46.590        100

检查三台服务器显示数据完全一到
上传文件测试
mogupload --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001  --domain=pic --key='mog2.PNG' --file='mog2.PNG'
mogupload --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001  --domain=pic --key='mog3.PNG' --file='mog3.PNG'
查看文件信息
mogfileinfo --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001  --domain=pic --key='mog2.PNG'
- file: mog2.PNG
class:              default
devcount:                    2
domain:                  pic
fid:                    6
key:             mog2.PNG
length:               526096
- http://10.10.10.55:7500/dev2/0/000/000/0000000006.fid - http://10.10.10.56:7500/dev3/0/000/000/0000000006.fid mogfileinfo --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001  --domain=pic --key='mog3.PNG'
- file: mog3.PNG
class:              default
devcount:                    2
domain:                  pic
fid:                    7
key:             mog3.PNG
length:               945124
- http://10.10.10.54:7500/dev1/0/000/000/0000000007.fid - http://10.10.10.55:7500/dev2/0/000/000/0000000007.fid[/code] href="http://10.10.10.55:7500/dev2/0/000/000/0000000007.fid" target=_blank>

流览器打开测试




实验三 nginx 反向代理,使用真实URL地址连接mogilefs(上传文件失败)
10.10.10.51 nginx 反向代理mogilefs
10.10.10.54 tracker + database + storage
10.10.10.55 tracker + storage
10.10.10.56 tracker + storage

安装nginx 和 nginx_mogilefs_module

下载nginx
wget http://nginx.org/download/nginx-1.8.0.tar.gz
下载nginx_mogilefs_module
https://www.nginx.com/resources/wiki/modules/
Mogilefs Implements a MogileFS client Download
nginx 提供的版本为nginx_mogilefs_module-1.0.2.tar.gz
可以去开方者提供的下载地址下载
http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz
https://github.com/pyh/nginx-mogilefs-module/tree/1.0.4
注:由于nginx的mogilefs模块的作者不再维护该模块的原因,所以如果要使用该模块的上传功能,
需要使用nginx的0.7.1到0.8之间的版本,高版本的nginx由于API的变化而不支持PUT功能了。有个用户写了个这个模块的补丁,测试同样不能用curl put上传文件。
引用http://mailman.nginx.org/pipermail/nginx/2010-September/022700.html
http://nginx.org/pipermail/nginx/attachments/20100928/8dd35bf7/attachment-0001.bin
diff --git a/ngx_http_mogilefs_module.c b/ngx_http_mogilefs_module.c

index e229f47..a4d249d 100644

--- a/ngx_http_mogilefs_module.c

+++ b/ngx_http_mogilefs_module.c

@@ -483,6 +483,9 @@ ngx_http_mogilefs_put_handler(ngx_http_request_t *r)

case FETCH:

spare_location = mgcf->create_close_spare_location;

ctx->state = CREATE_CLOSE;

+#if defined nginx_version && nginx_version >= 8011

+            r->main->count++;

+#endif

break;

case CREATE_CLOSE:

r->headers_out.content_length_n = 0;
使用方法 ,编辑ngx_http_mogilefs_module.c.c
在483行case FETCH: 修改为
case FETCH:
spare_location = mgcf->create_close_spare_location;
ctx->state = CREATE_CLOSE;
#if defined nginx_version && nginx_version >= 8011
r->main->count++;
#endif
break;
2.编译nginx
yum install gcc openssl-devel pcre-devel
tar zxf nginx-1.8.0.tar.gz
tar zxf nginx_mogilefs_module-1.0.4.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre \
--add-module=../nginx_mogilefs_module-1.0.4
make
make install
3.添加nginx服务账号
groupadd -r nginx
useradd -r -g nginx nginx
mkdir -pv /var/tmp/nginx/client/
4.创建启动项文件/etc/rc.d/init.d/nginx,内容如下:
vim /etc/rc.d/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
5.将nginx加入到服务
chmod +x /etc/rc.d/init.d/nginx
chkconfig --add nginx
service nginx start
6.配置nginx连接mogilefs
vim /etc/nginx/nginx.conf
upstream mogtrackers {
server 10.10.10.54:7001;
server 10.10.10.55:7001;
server 10.10.10.56:7001;
}
location /pic/ {
mogilefs_tracker mogtrackers;
mogilefs_domain pic;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-Type;
proxy_buffering off;
}
}
重新加载nginx 配置
service nginx reload
使用浏览器打开直接URL http://10.10.10.51/pic/mog1.png 测试




7.nginx上传图片 (测试失败)
注:由于nginx的mogilefs模块的作者不再维护该模块的原因,所以如果要使用该模块的上传功能,
需要使用nginx的0.7.1到0.8之间的版本,高版本的nginx由于API的变化而不支持PUT功能了。
vim /etc/nginx/nginx.conf
location /upload/ {
allow 10.10.10.0/24;
deny all;
mogilefs_tracker mogtrackers;
mogilefs_domain pic;
mogilefs_methods PUT DELETE;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-Type;
proxy_buffering off;
}
}
nginx 使用 curl直接上传,特修改
curl -X PUT -T '1.png' http://10.10.10.51/upload/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mogilefs