-
一、簡介
1、介紹
MogileFS 是一個開源的分佈式文件系統,用於組建分佈式文件集羣,由 LiveJournal 旗下 Danga Interactive 公司開發,Danga 團隊開發了包括 Memcached、MogileFS、Perlbal 等不錯的開源項目:(注:Perlbal 是一個強大的 Perl 寫的反向代理服務器)
2、MogileFS的特性
(1)工作在應用層提供服務
(2)無單點(至少存在兩份副本在不同的節點上)
(3)自動文件複製
mogilefs將多個文件組織成一個單位進行復制,複製的最小單元是class
(4)傳輸中立,無特殊協議,可通過NFS或HTTP進行通信
(5)簡單的命名空間
mogilefs是基於域(domain)來訪問的,沒有目錄,所有的數據都直接存儲在各存儲空間中
3、MogileFS的幾個部分
(1)database 使用mogdbsetup程序來初始化數據庫。數據庫保存了Mogilefs的所有元數據,因此數據庫部分非常重要,如果這兒掛了,那麼整個Mogilefs將處於不可用狀態。所以最好是HA結構。
(2)mogstored(存儲節點) mogstored是數據存儲的位置,用來數據的創建、刪除、獲取等,每一個節點必須向tracker註冊,然後才能使用device id,可以通過mogadm增加這臺機器到cluster中。
(3)tracker(跟蹤器) MogileFS的核心,是一個高度器,服務進程爲mogilefsd。mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定義好tracker,因此最好同時運行多個tracker來做負載均衡。
(4)工具 主要就是mogadm這個工具,用來在命令行下控制整個mogilefs系統以及查看狀態等。
(5)Client Client實際上是一個Perl的pm,可以寫程序調用該pm來使用mogilefs系統,對整個系統進行讀寫操作。
二、拓撲流程圖
<img alt="wKioL1NvhAKg3yUJAABDXIpfeuM507.png" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826133.png" title="拓撲.Z喎�" http:="" www.it165.net="" pro="" pkqt="" "="" target="_blank" class="keylink" style="border: 1px solid rgb(204, 204, 204); padding: 5px; margin: 0px; list-style: none; width: 563px; height: 445px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">QTkc=" />
三、說明
1、規劃說明
實驗共有5臺主機,nginx做爲前端反向代理接收用戶請求;mariadb作爲存儲mogilefs元數據的數據庫;剩下的三臺主機分別安裝tracker+mogstore。
2、nginx反代流程
爲了能夠基於URL進行(而非fid),nginx需要安裝一個第三方的mogilefs模塊(nginx-mogilfes就是利用mogilefs的API開發的一個應用程序)來自動轉換fid到URL的映射;當用戶請求來的時候,nginx通過location的判定明確知道這是一個存儲在後端mogilefs應用的話,將會啓用反向代理機制,nginx把自己扮演爲mogilefs的客戶端,此時把URL當作鍵直接向後端發起文件查詢請求,tracker就會返回一個地址;nginx再次扮演成客戶端到對應的mogstored進程上取,當nginx拿到後就去響應前端的http請求
3、實驗拓撲:
QTZJQUVNUEFjODM4LnBuZw==" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826134.png" title="實驗拓撲.PNG" />
四、分佈式文件系統的實現
1、配置數據庫(172.16.7.10)
1.
MariaDB [mogilefs]&
gt
; grant all on *.* to 'root'@'172.16.7.10';
#授權root用戶所有權限
2.
MariaDB [mogilefs]&
gt
;
3.
MariaDB [mogilefs]&
gt
; grant all on *.* to 'moguser'@'172.16.%.%' identified by 'mogpass';
#授權mogilefs的tracker連接數據庫的用戶
4.
MariaDB [mogilefs]&
gt
; flush privileges;
2、安裝配置mogilefs(三臺主機)
(1)安裝
1.
[root@shuishui ~]
# ls
2.
anaconda-ks.cfg MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm
3.
install
.log MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm
4.
install
.log.syslog MogileFS-Utils-2.19-1.el6.noarch.rpm
5.
MogileFS-Server-2.46-2.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm
6.
[root@shuishui ~]
# yum -y install *.rpm perl-IO-AIO
(2)配置tracker
①、修改mogilefsd的配置文件
01.
[root@shuishui ~]
# vim /etc/mogilefs/mogilefsd.conf
02.
# Enable daemon mode to work in background and use syslog
03.
daemonize = 1
04.
# Where to store the pid of the daemon (must be the same in the init script)
05.
pidfile = /var/run/mogilefsd/mogilefsd.pid
06.
# Database connection information
07.
db_dsn = DBI:mysql:mogilefs:host=172.16.7.10
#數據庫
08.
db_user = moguser
#數據庫授權的用戶
09.
db_pass = mogpass
#用戶密碼
10.
# IP:PORT to listen on for mogilefs client requests
11.
listen = 172.16.7.200:7001
#監聽的端口及IP
12.
# Optional, if you don't define the port above.
13.
conf_port = 7001
14.
# Number of query workers to start by default.
15.
query_jobs = 10
16.
# Number of delete workers to start by default.
17.
delete_jobs = 1
18.
# Number of replicate workers to start by default.
19.
replicate_jobs = 5
20.
# Number of reaper workers to start by default.
21.
# (you don't usually need to increase this)
22.
reaper_jobs = 1
②、爲mogilefsd設定數據庫
1.
[root@nmshuishui ~]
# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass
③、查看7001端口是否成功監聽
1.
[root@nmshuishui ~]
# service mogilefsd start
④、驗證數據庫
01.
MariaDB [(none)]&
gt
; use mogilefs
02.
Database changed
03.
MariaDB [mogilefs]&
gt
;
04.
MariaDB [mogilefs]&
gt
; show tables;
05.
+----------------------+
06.
| Tables_in_mogilefs |
07.
+----------------------+
08.
| checksum |
09.
| class |
10.
| device |
11.
| domain |
12.
|
file
|
13.
| file_on |
14.
| file_on_corrupt |
15.
| file_to_delete |
16.
| file_to_delete2 |
17.
| file_to_delete_later |
18.
| file_to_queue |
19.
| file_to_replicate |
20.
| fsck_log |
21.
| host |
22.
| server_settings |
23.
| tempfile |
24.
| unreachable_fids |
25.
+----------------------+
(3)配置mogstored
01.
[root@shuishui ~]
# mkdir /www/mogdata/dev3 -pv
02.
[root@shuishui ~]
#
03.
[root@shuishui ~]
# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/
04.
[root@shuishui ~]
#
05.
#########配置mogstored#########
06.
[root@shuishui ~]
# vim /etc/mogilefs/mogstored.conf
07.
maxconns = 10000
08.
httplisten = 0.0.0.0:7500
09.
mgmtlisten = 0.0.0.0:7501
10.
docroot = /www/mogdata
(4)查看7500端口監聽狀態
(5)添加主機
1.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive
2.
###查看添加主機命令
3.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 host list
(6)添加設備
1.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1
2.
###查看設備命令
3.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 device list
(7)添加domain
1.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 domain add images
2.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 domain add files
3.
###列出domain###
4.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 domain list
(8)添加class
1.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 class add images class1
2.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 class add images class2
3.
[root@nmshuishui ~]
# mogadm --trackers=172.16.7.200:7001 class list
(9)配置其它兩臺主機的mogilefsd和mogstored
因爲這三臺主機的tracker區用一個數據庫,所以在安裝配置時,不需再重新設定數據庫,只配置相應的mogilefsd和mogstored配置文件就可以了
(10)查看最後的狀態信息
①、列出所有主機
②、列出所有設備
③、列出所有domain
(11)上傳圖片資源到mogilefs
1.
[root@nmshuishui ~]
# mogupload --trackers=172.16.7.200:7001 --domain=images --key='linux.jpg' --file='/root/1.jpg'
(12)使用mogfileinfo獲取上傳圖片的訪問路徑
五、配置nginx服務器(172.16.7.10)
1、解壓nginx-mogilefs-module-master.zip模塊
2、先停止nginx服務器,編譯安裝第三方模塊
1.
cd
nginx-1.4.7
2.
./configure --prefix=/usr/
local
/nginx --sbin-path=/usr/
local
/nginx/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/usr/
local
/nginx/nginx.pid --with-pcre --add-module=/root/mogilefs/nginx-mogilefs-module-master
3.
make
&&
make
install
3、修改nginx配置文件
01.
[root@shuishui ~]
# vim /etc/nginx/nginx.conf
02.
http {
03.
include mime.types;
04.
default_type application/octet-stream;
05.
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
06.
# '$status $body_bytes_sent "$http_referer" '
07.
# '"$http_user_agent" "$http_x_forwarded_for"';
08.
#access_log logs/access.log main;
09.
sendfile on;
10.
#tcp_nopush on;
11.
#keepalive_timeout 0;
12.
keepalive_timeout 65;
13.
gzip
on;
14.
upstream mogcluster {
#定義upstream,做負載均衡輪調
15.
server 172.16.7.200:7001;
16.
server 172.16.7.201:7001;
17.
server 172.16.7.202:7001;
18.
}
19.
server {
20.
listen 80;
21.
server_name localhost;
22.
#charset koi8-r;
23.
#access_log logs/host.access.log main;
24.
location / {
25.
root html;
26.
index index.html index.htm;
27.
}
28.
location /images/ {
#增加此location
29.
mogilefs_tracker mogcluster;
30.
mogilefs_domain images;
31.
mogilefs_methods GET PUT DELETE;
32.
mogilefs_pass {
33.
proxy_pass $mogilefs_path;
34.
proxy_hide_header Content-Type;
35.
proxy_buffering off;
36.
}
37.
}
38.
# redirect server error pages to the static page /50x.html
39.
#
40.
error_page 500 502 503 504 /50x.html;
41.
location = /50x.html {
42.
root html;
43.
}
44.
}
45.
}
六、基於key做訪問測試
nginx反代mogilefs實現海量小文件存儲
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.