非常感謝 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;
|