1、簡介
html
一、介紹前端
MogileFS 是一個開源的分佈式文件系統,用於組建分佈式文件集羣,由 LiveJournal 旗下 Danga Interactive 公司開發,Danga 團隊開發了包括 Memcached、MogileFS、Perlbal 等不錯的開源項目:(注:Perlbal 是一個強大的 Perl 寫的反向代理服務器)mysql
二、MogileFS的特性
linux
(1)工做在應用層提供服務
nginx
(2)無單點(至少存在兩份副本在不一樣的節點上)sql
(3)自動文件複製數據庫
mogilefs將多個文件組織成一個單位進行復制,複製的最小單元是class
vim
(4)傳輸中立,無特殊協議,可經過NFS或HTTP進行通訊後端
(5)簡單的命名空間bash
mogilefs是基於域(domain)來訪問的,沒有目錄,全部的數據都直接存儲在各存儲空間中
三、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系統,對整個系統進行讀寫操做。
2、拓撲流程圖
3、說明
一、規劃說明
實驗共有5臺主機,nginx作爲前端反向代理接收用戶請求;mariadb做爲存儲mogilefs元數據的數據庫;剩下的三臺主機分別安裝tracker+mogstore。
二、nginx反代流程
爲了可以基於URL進行(而非fid),nginx須要安裝一個第三方的mogilefs模塊(nginx-mogilfes就是利用mogilefs的API開發的一個應用程序)來自動轉換fid到URL的映射;當用戶請求來的時候,nginx經過location的斷定明確知道這是一個存儲在後端mogilefs應用的話,將會啓用反向代理機制,nginx把本身扮演爲mogilefs的客戶端,此時把URL看成鍵直接向後端發起文件查詢請求,tracker就會返回一個地址;nginx再次扮演成客戶端到對應的mogstored進程上取,當nginx拿到後就去響應前端的http請求
三、實驗拓撲:
4、分佈式文件系統的實現
一、配置數據庫(172.16.7.10)
MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.7.10'; #受權root用戶全部權限 MariaDB [mogilefs]> MariaDB [mogilefs]> grant all on *.* to 'moguser'@'172.16.%.%' identified by 'mogpass'; #受權mogilefs的tracker鏈接數據庫的用戶 MariaDB [mogilefs]> flush privileges;
二、安裝配置mogilefs(三臺主機)
(1)安裝
[root@shuishui ~]# ls anaconda-ks.cfg MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm install.log MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm install.log.syslog MogileFS-Utils-2.19-1.el6.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm [root@shuishui ~]# yum -y install *.rpm perl-IO-AIO
(2)配置tracker
①、修改mogilefsd的配置文件
[root@shuishui ~]# 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=172.16.7.10 #數據庫 db_user = moguser #數據庫受權的用戶 db_pass = mogpass #用戶密碼 # IP:PORT to listen on for mogilefs client requests listen = 172.16.7.200:7001 #監聽的端口及IP # Optional, if you don't define the port above. conf_port = 7001 # Number of query workers to start by default. query_jobs = 10 # Number of delete workers to start by default. delete_jobs = 1 # Number of replicate workers to start by default. replicate_jobs = 5 # Number of reaper workers to start by default. # (you don't usually need to increase this) reaper_jobs = 1
②、爲mogilefsd設定數據庫
[root@nmshuishui ~]# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass
③、查看7001端口是否成功監聽
[root@nmshuishui ~]# service mogilefsd start
④、驗證數據庫
MariaDB [(none)]> use mogilefs Database changed MariaDB [mogilefs]> MariaDB [mogilefs]> show tables; +----------------------+ | Tables_in_mogilefs | +----------------------+ | checksum | | class | | device | | domain | | file | | file_on | | file_on_corrupt | | file_to_delete | | file_to_delete2 | | file_to_delete_later | | file_to_queue | | file_to_replicate | | fsck_log | | host | | server_settings | | tempfile | | unreachable_fids | +----------------------+
(3)配置mogstored
[root@shuishui ~]# mkdir /www/mogdata/dev3 -pv [root@shuishui ~]# [root@shuishui ~]# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/ [root@shuishui ~]# #########配置mogstored######### [root@shuishui ~]# vim /etc/mogilefs/mogstored.conf maxconns = 10000 httplisten = 0.0.0.0:7500 mgmtlisten = 0.0.0.0:7501 docroot = /www/mogdata
(4)查看7500端口監聽狀態
(5)添加主機
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive ###查看添加主機命令 [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host list
(6)添加設備
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1 ###查看設備命令 [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device list
(7)添加domain
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add p_w_picpaths [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add files ###列出domain### [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain list
(8)添加class
[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add p_w_picpaths class1 [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add p_w_picpaths class2 [root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class list
(9)配置其它兩臺主機的mogilefsd和mogstored
由於這三臺主機的tracker區用一個數據庫,因此在安裝配置時,不需再從新設定數據庫,只配置相應的mogilefsd和mogstored配置文件就能夠了
(10)查看最後的狀態信息
①、列出全部主機
②、列出全部設備
③、列出全部domain
(11)上傳圖片資源到mogilefs
[root@nmshuishui ~]# mogupload --trackers=172.16.7.200:7001 --domain=p_w_picpaths --key='linux.jpg' --file='/root/1.jpg'
(12)使用mogfileinfo獲取上傳圖片的訪問路徑
5、配置nginx服務器(172.16.7.10)
一、解壓nginx-mogilefs-module-master.zip模塊
二、先中止nginx服務器,編譯安裝第三方模塊
cd nginx-1.4.7 ./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 make && make install
三、修改nginx配置文件
[root@shuishui ~]# vim /etc/nginx/nginx.conf http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; upstream mogcluster { #定義upstream,作負載均衡輪調 server 172.16.7.200:7001; server 172.16.7.201:7001; server 172.16.7.202:7001; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /p_w_picpaths/ { #增長此location mogilefs_tracker mogcluster; mogilefs_domain p_w_picpaths; mogilefs_methods GET PUT DELETE; mogilefs_pass { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
6、基於key作訪問測試