什麼是分佈式文件系統?mysql
什麼是分佈式文件系統(Distributed File System)?顧名思義,就是分佈式+文件系統。它包含了2方面,從文件系統的客戶端的角度來看,他就是一個標準的文件系統,提供了API,由此能夠進行文件的建立、刪除、讀寫等操做;從內部來看的話,分佈式文件系統則與普通的文件系統不一樣,它不在是本地的磁盤中,它的內容和目錄都不是存儲在本地磁盤中,而是經過網絡傳輸到遠程主機上,而且同一個文件存儲在不僅一臺遠程主機中,而是在一簇主機中進行分佈式存儲,協同提供服務。linux
常見的分佈式文件系統nginx
GFS :Google File Systemsql
HDFS:適合存儲大文件;數據庫
TFS:在名稱節點上將元數據存儲於關係型數據中,文件數量再也不受限於名稱節點的內存空間;能夠存儲海量小文件;瀏覽器
Lustre: 企業級應用,重量級;bash
GlusterFS: 適用於存儲少許大文件 ,流媒體,雲服務器
MooseFS: 通用簡便,適用於存儲小文件,大文件也不錯網絡
Mogilefs: 使用Perl語言,FastDFS負載均衡
FastDFS:在內存中存儲
Ceph:內核級別,支持PB級別存儲
MogileFS
MogileFS是一個開源的分佈式文件存儲系統,由LiveJournal旗下的DangaInteractive公司開發。Danga團隊開發了包括Memcached、MogileFS、Perlbal等多個知名的開源項目。目前使用MogileFS的公司很是多,如日本排名先前的幾個互聯公司及國內的yupoo(又拍)、digg、豆瓣、1號店、大衆點評、搜狗和安居客等,分別爲所在的組織或公司管理着海量的圖片。
MogileFS:3 個重要組成
tracker:追蹤原數據
database :存儲元單元
storage:存儲數據
tracker:
tracker(跟蹤器) MogileFS的核心,是一個高度器,服務進程爲mogilefsd。mogadm,mogtool的全部操做都要跟trackers打交道,Client的一些操做也須要定義好tracker,所以最好同時運行多個tracker來作負載均衡。
database :
使用mogdbsetup程序來初始化數據庫。數據庫保存了Mogilefs的全部元數據,所以數據庫部分很是重要,若是這兒掛了,那麼整個Mogilefs將處於不可用狀態。因此最好是HA結構。
storage:
mogstored(進程名),一個準備停當的mogstored節點可經過mogadm命令添加到如今如今集羣中,存儲節點需定義「設備(dev)用作存儲空間」,每一個「設備」在當前集羣都須要經過一個唯一的設備ID(DevID)來識別
client:客戶端用與mogilefs創建通信,完成數據存取。
特性:(1) 工做在應用層
(2)無單點故障
(3)自動完成文件複製,複製的最小單位不是文件,而class,也就是是把須要的冗餘的文件組成了一塊了,而這一塊就是class
(4)傳輸無需特殊協議
(5)名稱空間
(6)不共享任何數據,只經過數據副本作冗餘
(7)簡單的命名空間:用於domain定義名稱空間(至關一個目錄), 每一個文件對應一個key,同一個domain內key是惟一的。
(8) 定位文件時,在domain,定位文件的id號。
-------------------------------------------------------------------------------------------------------------------------------------------
一:環境介紹:1臺Trcacker,2臺StoreNode.
MYSQL和Trcacker 共用一臺。Tracker IP :192.168.2.20 Mysql:192.168.2.20
StoreNode: 192.168.2.35 192.168.2.36
二:Trcacker 服務 安裝以下軟件,建議使用elpo源解決依賴
MogileFS-Server.noarch 0:2.46-2.el6
MogileFS-Server-mogilefsd.noarch 0:2.46-2.el6
MogileFS-Server-mogstored.noarch 0:2.46-2.el6
MogileFS-Utils.noarch 0:2.19-1.el6
perl-IO-AIO.x86_64 0:3.71-2.el6
perl-MogileFS-Client.noarch 0:1.14-1.el6
perl-Net-Netmask.noarch 0:1.9015-8.el6
perl-Perlbal.noarch 0:1.78-1.el6
(2)安裝mysql給root 遠程受權
MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'192.168.2.%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
(2):初始化mysql
# mogdbsetup --dbhost=192.168.2.20 --dbrootuser=root --dbrootpass=123456 --dbname=mogdb --dbuser=moguser --dbpass=mogpass
下面爲初始化的過程
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 'mogdb'? [Y/n]: y
Grant all privileges to user 'moguser', connecting from anywhere, to the mogilefs database 'mogdb'? [Y/n]: y
(3)配置 tracker端(mogilefsd)
配置文件 /etc/mogilefs/mogilefsd.conf,主要的配置選項以下:
daemonize = 1
pidfile =
/var/run/mogilefsd/mogilefsd
.pid
db_dsn = DBI:mysql
:mogdb
:host=192.168.2.20
//鏈接數據庫爲moddb. 主機爲192.168.2.20
db_user = moguser
//鏈接名爲moguser
db_pass = mogpass
//鏈接密碼爲 mogpass
listen = 192.168.2.20:7001
//tracker本身監聽ip爲192.168.2.20
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1
# service mogilefsd start //重啓mogilefsd
三:配置StoreNode.2個節點,分別安裝下面軟件:
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-Utils-2.19-1.el6.noarch.rpm
perl-Net-Netmask-1.9015-8.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
perl-IO-AIO
(1)配置mogstared
配置文件 /etc/mogilefs/mogstared.conf,主要的配置選項以下:
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot =
/mogdata/data
//文件存取目錄
(2)這裏假設存儲數據目錄是/mogdate/data下,在實際中會是單獨的存儲設備。
# mkdir
-p
/mogdata/data
# chown
mogilefs.mogilefs
/mogdata/data/
-R
# service mogstored start
上面步驟在192.168.2.35 192.168.2.36 分別進行相同的操做。
(3)配置 tracker端,首先查看數據源
# mogstats --db_dsn="DBI:mysql:mogdb:host=192.168.2.20" --db_user="moguser" --db_pass="mogpass" --stats="all"
(4)tracker端上用mogadm 添加主機
# mogadm --trackers=192.168.2.20:7001 host add 192.168.2.35 --ip=192.168.2.35 --status=alive
# mogadm --trackers=192.168.2.20:7001 host add 192.168.2.36 --ip=192.168.2.36 --status=alive
查看添加後的主機
# mogadm --trackers=192.168.2.20:7001 host list
(5)添加設備,並設定設備號,設備號不能重複
# mogadm --trackers=192.168.2.20:7001 device add 192.168.2.35 1
# mogadm --trackers=192.168.2.20:7001 device add 192.168.2.36 3
查看添加後的設備
# mogadm --trackers=192.168.2.20:7001 device list
分別在/mogdata/data/目錄下創建dev1 和dev3,並把屬主屬主改爲mogilefs
在192.168.2.35:
# mkdir
/mogdata/data/dev1
# chown
-R mogilefs.mogilefs
/mogdata/data
在192.168.2.36:
# mkdir
/mogdata/data/dev3
# chown
-R mogilefs.mogilefs
/mogdata/data
(6)添加域p_w_picpaths, files
# mogadm --trackers=192.168.2.20:7001 domain add p_w_picpaths
# mogadm --trackers=192.168.2.20:7001 domain add files
查看域
# mogadm --trackers=192.168.2.20:7001 domain list
(7)添加一個class (這個根據實際須要添加,在這裏是非必要步驟)
# mogadm --trackers=192.168.2.20:7001 class add p_w_picpaths class1 --mindevcount=2 (2爲保留2個副本)
添加後查看
# mogadm --trackers=192.168.2.20:7001 class list
四:測試:
# mogupload --trackers=192.168.2.20:7001 --domain=files --key='/33.jpg' --file=/root/linux.jpg
# mogupload --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/22.jpg' --file=/root/2222.jpg
# mogupload --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg' --file=/root/1111.jpg
# mogfileinfo --trackers=192.168.2.20:7001 --domain=files --key='/33.jpg'
# mogfileinfo --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg'
# mogfileinfo --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/22.jpg'
紅把部分能夠用瀏覽器訪問
下載圖片:
# mogfetch --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg' --file='/tmp/3.jpg'
列出domain中已存文件
# moglistkeys --trackers=192.168.2.20:7001 --domain=files;
# moglistkeys --trackers=192.168.2.20:7001 --domain=p_w_picpaths;
試驗2:NGINX反向代理
添加一臺服務器,ip爲192.168.2.30,服務器同時作爲 Tracker和Storaged:
(1)安裝
# yum install 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-Utils-2.19-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-IO-AIO.x86_64 0:3.71-2.el6
(2)在192.168.2.30上初始化數據庫
# mogdbsetup --dbhost=192.168.2.20 --dbrootuser=root --dbrootpass=123456 --dbname=mogdb --dbuser=moguser --dbpass=mogpass
(3) 配置 tracker端(mogilefsd)
配置文件 /etc/mogilefs/mogilefsd.conf,主要的配置選項以下:
daemonize = 1
pidfile =
/var/run/mogilefsd/mogilefsd
.pid
db_dsn = DBI:mysql:mogdb:host=192.168.2.20 //鏈接數據庫爲mogdb, ip爲192.168.2.20
db_user = moguser // 鏈接用戶名爲moguser
db_pass = mogpass // 鏈接密碼爲mogpass
listen = 192.168.2.30:7001 //本身監聽的ip:192.168.2.30
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1
###################
# service mogilefsd start //配置文件修改後重啓mogilefsd
(4)下面爲重啓mogilefsd 後就能從192.168.2.30上查看到原已添加的主機。
(5)配置mogstared
# cat /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogdata/data/
(6) 創建目錄
# mkdir -p /mogdata/data
# chown mogilefs.mogilefs /mogdata/data/ -R
# service mogstored start
(7)添加主機,由於192.168.2.30服務器同時作爲 Tracker和Storaged,因此Tracker的ip爲192.168.2.30,Storaged的ip 也爲192.168.2.30,添加的主機名,這裏用的是ip,因此也爲192.168.2.30
# mogadm --trackers=192.168.2.30:7001 host add 192.168.2.30 --ip=192.168.2.30 --status=alive
添加設備爲192.168.2.30,設備號爲4,
# mogadm --trackers=192.168.2.30:7001 device add 192.168.2.30 4
創建dev4目錄,爲改變權限
# mkdir /mogdata/data/dev4
# chown -R mogilefs.mogilefs /mogdata/data
查看trackers:以下圖
NGINX在編譯時添加第三方模塊:
useradd
-r nginx
tar
xf nginx_mogilefs_module-1.0.4.
tar
.gz
tar
xf nginx-1.6.2.
tar
.gz
cd
nginx-1.6.2
.
/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=..
/nginx_mogilefs_module-1
.0.4
make
&&
make
install
NGINX.conf 文件配置以下:
upstream trackers{
server 192.168.2.20:7001;
server 192.168.2.30:7001;
}
location /upload {
mogilefs_tracker trackers;
mogilefs_domain p_w_picpaths; //指定使用的domain,這個很關鍵,
mogilefs_methods GET; // GET PUT DELETE; 容許上傳,刪除時方法
mogilefs_noverify on;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-Type;
proxy_buffering off;
}
}
訪問以下:
# curl -X DELETE http://192.168.2.10/upload/66.jpg 請求方法容許刪除時,能夠直接刪除