非常感谢 http://maoqiu.blog.51cto.com/8570467/1409382/
Google Filesystem | GFS+MapReduce擅长处理单个大文件 |
Hadoop Distributed Filesystem | GFS的山寨版+MapReduce,擅长处理单个大文件 |
ClusterFS | 擅长处理单个大文件 |
Taobao Filesystem | 擅长处理海量小文件 |
MogileFS | 擅长处理海量小文件 |
Ceph | PB级别的分布式文件系统 |
MooseFS | 通用简便,适用于研发能力不强的公司 |
Lustre | 一种平行分布式文件系统 |
Client libray、tracker、Database、mogstore的关系图 |
![]() |
MofileFS工作流程图 |
![]() |
1
2
3
4
5
6
7
8
9
10
|
MariaDB [(none)]> use mysql
#删除有安全隐患的账户
MariaDB [mysql]> DELETE FROM user WHERE host =
'::1'
;
MariaDB [mysql]> DELETE FROM user WHERE user =
''
;
#授权root用户能远程登录
MariaDB [mysql]> GRANT ALL ON *.* TO
'root'
@
'172.16.%.%'
IDENTIFIED BY
'123.com'
#授权moguser用户
MariaDB [mysql]> GRANT ALL ON mogdb.* TO
'moguser'
@
'172.16.%.%'
IDENTIFIED BY
'123.com'
;
#刷新授权表
MariaDB [mysql]> FLUSH PRIVILEGES;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#→下面三个是Tracker和Storage端必装的程序包.
MogileFS-Server-2.46-2.el6.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
#→这是在维护MogileFS时使用的工具包
MogileFS-Utils-2.19-1.el6.noarch.rpm
#→MogileFS客户端程序
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
#→这个软件包是在跨网络或者跨机房是所使用的包
perl-Net-Netmask-1.9015-8.el6.noarch.rpm
#→这是用perl所编写的web程序,它是在mostored上提供webDAV的方式接受客户web服务请求的.
perl-Perlbal-1.78-1.el6.noarch.rpm
#这是perl程序所依赖的包
perl-IO-AIO.x86_64
#→说明如果在配置安装过程当中遇依赖关系时,解决就行了.
#→然后将几个软件包都拷贝至其它两个节点上.
[[email protected] ~]
# scp *.rpm 172.16.41.2:/root/
[[email protected] ~]
# scp *.rpm 172.16.41.3:/root/
|
1
2
|
[[email protected] ~]
# yum install *.rpm perl-IO-AIO
#→其他两个节点的安装过程在node1上面的一样.
|
1
2
|
#→安装好tracker后会在/var/run/下面生成该目录,改变目录属主.属组
[[email protected] ~]
# chown -R mogilefs.mogilefs /var/run/mogilefsd
|
1
|
[ro[email protected] ~]
# mogdbsetup --dbrootuser=root --dbname=mogdb --dbhost=172.16.41.5 --dbport=3306 --dbrootpass=123.com --dbuser=moguser --dbpass=123.com --yes
|
1
2
3
4
5
6
|
[[email protected] ~]
# vim /etc/mogilefs/mogilefsd.conf
#→修改下面4项即可其它参数根据工作环境自定
db_dsn = DBI:mysql:mogdb:host=172.16.41.5
db_user = moguser
db_pass = 123.com
listen = 172.16.41.1:7001
|
1
2
3
4
5
6
7
8
|
[[email protected] ~]
# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
#→存储系统的最大连接数.
httplisten = 0.0.0.0:7500
#→这个就是webDAV服务使用的端口,但是这里我们不知使用它.
mgmtlisten = 0.0.0.0:7501
#→mogilefs的管理端口.
docroot =
/data/mogdata
#→该项决定了数据的在storage上存储的实际位置,建议使用的是一个单独挂载使用的磁盘.这里我就不用演示了.
[[email protected] ~]
# mkdir -p /data/mydata/dev1
#→这里一定要改变数据存放目录的属主属组,应为mogilefs服务程序必须是以普通用户来运行的,否则服务启动将失败!
[[email protected] ~]
# chown -R mogilefs.mogilefs /data/mogdata/dev1
|
1
2
3
4
5
|
[[email protected] ~]
# service mogilefsd start
Starting mogilefsd [ OK ]
[[email protected] ~]
# service mogstored start
Starting mogstored [ OK ]
[[email protected] ~]
#
|
1
|
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 host add 172.16.41.1 --ip=172.16.41.1 --status=alive
|
1
2
3
4
5
6
7
|
[[email protected] ~]
# scp /etc/mogilefs/* 172.16.41.2:/etc/mogilefs/
mogilefsd.conf 100% 1462 1.4KB
/s
00:00
mogstored.conf 100% 93 0.1KB
/s
00:00
[[email protected] ~]
# scp /etc/mogilefs/* 172.16.41.3:/etc/mogilefs/
mogilefsd.conf 100% 1462 1.4KB
/s
00:00
mogstored.conf 100% 93 0.1KB
/s
00:00
[[email protected] ~]
#
|
1
2
|
#→安装好tracker后会在/var/run/下面生成该目录,改变目录属主.属组
[[email protected] ~]
# chown -R mogilefs.mogilefs /var/run/mogilefsd
|
1
2
3
4
5
6
|
[[email protected] ~]
# vim /etc/mogilefs/mogilefsd.conf
#→修改下面4项即可其它参数根据工作环境自定
db_dsn = DBI:mysql:mogdb:host=172.16.41.5
db_user = moguser
db_pass = 123.com
listen = 172.16.41.2:7001
|
1
2
3
4
5
6
7
8
|
[[email protected] ~]
# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot =
/data/mogdata
#→该项决定了数据的在storage上存储的实际位置,建议使用的是一个单独挂载使用的磁盘.这里我就不用演示了.
[[email protected] ~]
# mkdir -p /data/mydata/dev2
#→这里一定要改变数据存放目录的属主属组,应为mogilefs服务程序必须是以普通用户来运行的,否则服务启动将失败!
[[email protected] ~]
# chown -R mogilefs.mogilefs /data/mogdata/dev2
|
1
2
3
4
5
|
[[email protected] ~]
# service mogilefsd start
Starting mogilefsd [ OK ]
[[email protected] ~]
# service mogstored start
Starting mogstored [ OK ]
[[email protected] ~]
#
|
1
|
[[email protected] ~]
# mogadm --trackers=172.16.41.2:7001 host add 172.16.41.2 --ip=172.16.41.2 --status=alive
|
1
2
3
4
5
6
7
|
#→添加的第一个设备,设备号不能重名
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 device add 172.16.41.1 1
#→添加的第二个设备
[[email protected] ~]
# mogadm --trackers=172.16.41.2:7001 device add 172.16.41.2 2
#→添加的第三个设备
[[email protected] ~]
# mogadm --trackers=172.16.41.3:7001 device add 172.16.41.3 3
[[email protected] ~]
# mogadm --trackers=172.16.41.3:7001 device list
|
1
2
3
4
5
|
#→创建的图片存放域
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 domain add images
#→创建的html等文件存放域
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 domain add files
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 domain list
|
1
2
3
4
5
6
7
|
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add images class0 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add images class1 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add images class3 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add files class0 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add files class1 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class add files class2 --mindevcount=2
[[email protected] ~]
# mogadm --trackers=172.16.41.1:7001 class list
|
1
2
3
|
[[email protected] ~]
# mogupload --trackers=172.16.41.1:7001 --domain=images --key='tux_1.jpg' --file='/root/my_test_data/1.jpg'
#→--key='tux_1.jgp' 是我要上传后的键是什么
#→ --file 指的是我要上传的文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#这里需要安装个pcre-devel包
[[email protected] ~]
# yum install -y pcre-devel
#解压获取到的mogilefs模块包
[[email protected] ~]
# unzip nginx-mogilefs-module-master.zip
#解压、编译安装nginx
[[email protected] ~]
# tar -xf nginx-1.4.7.tar.gz -C /usr/src/
[[email protected] ~]
# cd /usr/src/nginx-1.4.7/
[[email protected] nginx-1.4.7]
#
.
/configure
\
--prefix=
/usr
\
--sbin-path=
/usr/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 \
--with-debug \
--add-module=
/root/nginx-mogilefs-module-master
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
[[email protected] ~]
# 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/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
[[email protected] ~]
# chmod +x /etc/rc.d/init.d/
[[email protected] ~]
# chkconfig --add nginx
[[email protected] ~]
# chkconfig nginx on
#启动nginx
[[email protected] ~]
# service nginx start
Starting nginx: [ OK ]
[[email protected] ~]
# ss -tnl | grep :80
LISTEN 0 128 *:80 *:*
[[email protected] ~]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
[[email protected] ~]# vim /etc/nginx/nginx.conf
worker_processes
2
;
events {
worker_connections
1024
;
}
http {
include
mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout
65
;
gzip on;
server {
listen
80
;
server_name www.magelinux.com;
location / {
root html;
index index.html index.htm;
}
################About images###############
location /images/ {
mogilefs_tracker
172.16
.
41.1
:
7001
;
mogilefs_domain images;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-Type;
proxy_buffering off;
}
}
################About files###############
location /files/ {
mogilefs_tracker
172.16
.
41.1
:
7001
;
mogilefs_domain images;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-Type;
proxy_buffering off;
|