天天看點

分布式存儲——mogilefs & fastdfs

一、   mogilefs

mogilefs特性:

1、支援多節點備援

2、可實作自動的檔案複制

3、使用名稱空間(命名空間),每個檔案通過key來确定

4、不需要RAID,應用層可以直接實作RAID,不共享任何東西,通過“叢集”接口提供服務

5、工作于應用層,沒有特殊的元件要求;

6、不共享任何資料,MogileFS不需要依靠昂貴的SAN來共享磁盤,每個機器隻用維護

好自己的磁盤。

mogilefs的架構:

mogileFS主要由三部分構成:tracker節點,database節點,storage節點

1、Tracker(MogileFSd 程序):這個是 MogileFS的核心部分,他是一個排程器,MogileFSd程序就是trackers程序程式,trackers做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,這個是基于事件的( event-based ) 父程序/消息總線來管理所有來之于用戶端應用的互動(requesting operations to be performed),包括将請求負載平衡到多個“query workers”中,然後讓 MogileFSd 的子程序去處理;

2、MySQL:用來存放 MogileFS 的中繼資料 (命名空間, 和檔案在哪裡),是Trackers 來操作和管理它,可以用mogdbsetup程式來初始化資料庫,因為資料庫儲存了MogileFS的所有中繼資料,建議做成HA架構;

3、Storage Nodes:這個是 MogileFS存儲檔案存放在這些機器上,也是 mogstored 節點,也叫 Storage Server,一台存儲主要都要啟動一個 mogstored 服務.擴容就是增加這些機器,實際檔案存放的地方。

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

每次檔案的上傳和讀取,都經過前端TrackerServer伺服器,trackerServer伺服器受到client端的請求,查詢資料庫,傳回一個上傳或者是讀取的可用的後端StorageServer的位址,然後由client端直接操作後端StorageServer伺服器。upload操作傳回就是成功或者失敗的結果,read操作就是傳回對應的查詢資料。

MogileFS管理的幾個概念:

1、Domain:一個MogileFS可以有多個Domain,用來存放不同檔案(大小,類型),同一個Domain内key必須唯一,不同Domain内,key可以相同;

2、每一個存儲節點稱為一個主機host,一個主機上可以有多個儲存設備dev(單獨的硬碟),每個裝置都有ID号,Domain+Fid用來定位檔案。

3、Class:檔案屬性管理,定位檔案存儲在不同裝置上的份數;

分布式存儲——mogilefs & fastdfs

mogilefs程式路徑

主程式(Tracker):/usr/bin/mogilefsd

主程式(Storage Nodes):/usr/bin/mogstored

資料庫初始化:/usr/bin/mogdbsetup

指令行管理工具程式:/usr/bin/mogadm

主配置檔案(Tracker):/etc/mogilefs/mogilefsd.conf

主配置檔案(Storage Nodes):/etc/mogilefs/mogstored.conf

實驗:

1、準備三台機器,關閉防火牆,然後分别安裝這些包

yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO

然後可以建一個目錄mogilefs,将需要的軟體包下到目錄中

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

檢視一下,下載下傳好了

分布式存儲——mogilefs & fastdfs

然後将那些包全部安裝到目前目錄下 yum localinstall ./*

2、當三台都做好上述準備之後,我們可以開始分角色了

一台作為tracker和database,另外兩台是storage1(172.17.254.225 )和storage2(172.17.251.13)

分布式存儲——mogilefs & fastdfs

3、我們先操作tracke+mysql那台。

首先需要初始化服務

啟動,登陸資料庫

分布式存儲——mogilefs & fastdfs

給mogilefs庫授權,然後重新整理一下權限

GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile'@'127.0.0.1' IDENTIFIED BY 'mogile'WITH GRANT OPTION; 

分布式存儲——mogilefs & fastdfs

我們現在已經授權了一個mogile的使用者

然後使用mogdbsetup指令,指定密碼,設定資料庫

分布式存儲——mogilefs & fastdfs

這樣它就幫我把資料庫和庫中的表都建立好了,我們可以去看一下

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

但是現在我們的表裡還沒有東西,因為還沒開始往裡加主機呢。

分布式存儲——mogilefs & fastdfs

接下來我們就可以去配置tracker了

編輯配置檔案:/etc/mogilefs/mogilefsd.conf

分布式存儲——mogilefs & fastdfs

然後儲存退出

使用啟動腳本啟動tracker

分布式存儲——mogilefs & fastdfs

檢視一下端口監聽狀态

分布式存儲——mogilefs & fastdfs

正常。

也可以檢視一下主程序子程序

分布式存儲——mogilefs & fastdfs

我們也可以使用專業指令mogadm check可以檢視狀态:(要指定tracker是誰)

分布式存儲——mogilefs & fastdfs

可以看到,目前裡面沒有host,等會我們加入host之後再來看一下。

4、那我們現在就該來配storage了。

編輯storage的配置檔案/etc/mogilefs/mogstored.conf

也不需要改啥,配個工作路徑就行

分布式存儲——mogilefs & fastdfs

然後我們需要建立/data下的mogdata目錄

分布式存儲——mogilefs & fastdfs

目前目錄下沒有東西

因為它的程序工作是以mogilefs使用者(這個使用者在裝包的時候會自動幫你建立)來運作,是以我們需要修改目錄的屬主屬組

分布式存儲——mogilefs & fastdfs

然後就可以使用腳本啟動了

分布式存儲——mogilefs & fastdfs

檢視一下,确實啟動起來了:

分布式存儲——mogilefs & fastdfs

然後在另一台storage上也做同樣的事。

(PS:

分布式存儲——mogilefs & fastdfs

5、這樣,兩台storage也配好了,現在我們要将它們和tracker組合到一塊。

在tracker的機器上操作。

添加一台host,節點命名為node1,并定義狀态為alive

mogadm --tracker=172.17.252.91:7001 host add node1 --ip=172.17.254.225 --port=7500 --status=alive

然後使用check檢視一下,果然有一個host了。

分布式存儲——mogilefs & fastdfs

同樣,我們将另一台也加上,節點起名叫node2

分布式存儲——mogilefs & fastdfs

添加成功。

可以用mogadm host list檢視主機具體IP還有狀态

分布式存儲——mogilefs & fastdfs

(如果想要修改IP或者狀态,将add換成modify即可)

6、加完了host,接下來我們該加裝置(dev)了。

操作storage1機器。

首先需要給裝置建立個目錄,建議目錄使用dev+ID這種格式,并且記的所有系統中ID不能重複,而且必須與配置檔案中的路徑一樣。(我們剛才配置檔案中定義的路徑為/data/mogdata)

分布式存儲——mogilefs & fastdfs

檢視一下檔案

分布式存儲——mogilefs & fastdfs

同樣的,在storage2上也做如上操作,不過建立的檔案夾ID不能與剛才相同,應該叫dev2。

分布式存儲——mogilefs & fastdfs

7、我們已經從目錄上建立了兩個裝置,接下來要将它們添加到MogileFS叢集中

操作tracker機器,還是使用剛才添加host的指令,隻不過将host改為device,然後指定節點和ID

分布式存儲——mogilefs & fastdfs

使用check檢視一下,确實添加成功

分布式存儲——mogilefs & fastdfs

同樣,把dev2加到node2中

分布式存儲——mogilefs & fastdfs

同樣可以使用device list檢視

分布式存儲——mogilefs & fastdfs

添加好了之後我們可以去storage的dev檔案夾下看一看

分布式存儲——mogilefs & fastdfs

多了一個test-write檔案夾,随機寫一些東西用來測試一下

這個時候呢,我們可以再去看看資料庫

看一下host裡面,剛才是空的,現在就有了資訊了

分布式存儲——mogilefs & fastdfs

還有dev裝置也有了

分布式存儲——mogilefs & fastdfs

8、如果我們使用mogadm指令時不想每次都指定 --tracker=172.17.252.91:7001的話,我們可以将它寫到配置檔案中

我們自己建立一個mogilefs.conf檔案(代表用戶端設定)vim /etc/mogilefs/mogilefs.conf

将那句話寫到檔案中(注意要加s)

分布式存儲——mogilefs & fastdfs

儲存退出

然後再使用指令試一下:

分布式存儲——mogilefs & fastdfs

成功!

9、然後我們該建立域了。

比如我們建一個img域專門用來存放圖檔 mogadm domain add img

分布式存儲——mogilefs & fastdfs

檢視一下

分布式存儲——mogilefs & fastdfs

加完域之後,它會給你配置設定一個預設的class叫default,這個mindevconut代表副本數

你也可以手動添加一個class

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

建立成功

10、一切準備就緒,現在我們可以測試一下了

我們有張名為linux的圖檔

分布式存儲——mogilefs & fastdfs

我們将它上傳上去

需要指定domain,key和檔案路徑名稱(目前目錄下可以寫./也可以不寫)

mogupload --domain=img --key=test --file=linux.jpg

分布式存儲——mogilefs & fastdfs

上傳完了,我們可以去storage中去找一下

dev2中沒有

分布式存儲——mogilefs & fastdfs

我們去dev1下看一下,果然多了一個名為0的檔案夾

分布式存儲——mogilefs & fastdfs

然後一層一層找下去,最後找到了那個檔案

分布式存儲——mogilefs & fastdfs

去看一下資料庫中file表中的fid為5,是以這個檔案才叫0000000005。

分布式存儲——mogilefs & fastdfs

file_on表中的devid為1,是以這個檔案才會在dev1下,而不在dev2下。

分布式存儲——mogilefs & fastdfs

(注意:其實正常情況下,應該是dev1中和dev2中都有的,因為設定的副本數為2,但是因為現在使用的這個預設版本有些bug,不能複制,是以隻有一份。我們一會可以降級,讓它實作複制功能。)

我們也可以使用指令查詢剛才傳的檔案的路徑

分布式存儲——mogilefs & fastdfs

可以去浏覽器中通路一下這個路徑

分布式存儲——mogilefs & fastdfs

可以成功檢視到圖檔

剛才添加用的是mogfileinfo --domain=img --key=test,如果要删除的話使用mogdelete --domain=img --key=test即可

暫時停止伺服器

如果你需要維護一個伺服器,比如更新記憶體,更新作業系統之類的需要關機的操作,推薦你在操作之前先設定這些為“down”。MogileFS對這種偶然的故障可以很彈性的處理。

分布式存儲——mogilefs & fastdfs

(注:将機器down之後,新的讀操作和寫操作都不會再去配置設定了,但是老的那些已經查詢過的讀寫請求,尤其是在storage上已經寫好的資料是不會變的,storage上的節點(7500端口)還是在監聽狀态的)

是以,如果我們使用mogadm host mark node1 down 将storage1上的host下線,然後再上傳檔案的話,就隻能上傳到storage2上的node2裡了。

降級

因為目前版本有bug,沒法複制,是以我們需要降級(以下操作三台都要進行)

需要使用perl,是以我們先需要安裝perl的編譯環境

分布式存儲——mogilefs & fastdfs

然後我們就可以去下載下傳perl的子產品了,進到一個臨時目錄/tmp/下,然後下載下傳

wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

分布式存儲——mogilefs & fastdfs

這就是那個包啦

分布式存儲——mogilefs & fastdfs

然後解壓縮

分布式存儲——mogilefs & fastdfs

進入解壓後的目錄

分布式存儲——mogilefs & fastdfs

使用perl編譯

分布式存儲——mogilefs & fastdfs

然後使用make&&make install就安裝完成了

然後需要重新開機一下,在tracker上使用/etc/init.d/mogilefsd stop 和 start,在兩台storage上使用/etc/init.d/mogstored stop 和start(重新開機的時候如果出現fail不用管它,又是一個bug,其實已經啟動成功了)

三台都做好如上操作之後就完成了降級,我們可以試一下看看現在有沒有複制功能了。

新添加一個圖檔,key為bug

分布式存儲——mogilefs & fastdfs

然後我們檢視一下

分布式存儲——mogilefs & fastdfs

看到了兩份,複制成功!!!!!

二、   FastdFS

FastDFS是一個輕量級的開源分布式檔案系統,主要解決了大容量的檔案存儲和高并發通路的問題,檔案存取時實作了負載均衡。

FastDFS是一款類Google FS的開源分布式檔案系統,它用純C語言實作,支援Linux、FreeBSD、AIX等UNIX系統。它隻能通過 專有API對檔案進行存取通路,不支援POSIX

接口方式,不能mount使用。準确地講,Google FS以及FastDFS、mogileFS、 HDFS、TFS等類Google FS都不是系統級的分布式檔案系統,而是應用級的分布式檔案存儲服務。

分布式存儲——mogilefs & fastdfs

架構解讀

• 隻有兩個角色,tracker server和storage server,不需要存儲檔案索引資訊

• 所有伺服器都是對等的,不存在Master-Slave關系

• 存儲伺服器采用分組方式,同組記憶體儲伺服器上的檔案完全相同(RAID 1)

• 不同組的storage server之間不會互相通信

• 由storage server主動向tracker server報告狀态資訊,tracker server之間通常不會互相通信

FastDFS同步機制

采用binlog檔案記錄更新操作,根據binlog進行檔案同步

同一組内的storage server之間是對等的,檔案上傳、删除等操作可以在任意一台storage server上進行;

檔案同步隻在同組内的storage server之間進行,采用push方式,即源伺服器同步給目标伺服器;

源頭資料才需要同步,備份資料不需要再次同步,否則就構成環路了;

上述第二條規則有個例外,就是新增加一台storage server時,由已有的一台storage server将已有的所有資料(包括源頭資料和備份資料)同步給該新增伺服器。

FastDFS核心元件

Tracker:排程器,負責維持叢集的資訊,例如各group及其内部的storage node,這些資訊也是storage node報告所生成;每個storage node會周期性向tracker發心跳資訊;

storage server:以group為機關進行組織,任何一個storage server都應該屬于某個group,一個group應該包含多個storage server;在同一個group内部,各storage server的資料互相備援;

實驗

那我們還是準備3台機器,一台做tracker,兩台做storage

1、先建立一個檔案夾,然後去下包

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

使用mget * 下載下傳全部

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

要安裝fastdfs包需要依賴lib包,是以全都安裝

yum localinstall fastdfs-* libf*

分布式存儲——mogilefs & fastdfs

三台全部安裝好,我們就可以開始接下來的配置了。

2、先配tracker

配置檔案放在/etc/fdfs目錄下,有一個樣本檔案,我們将它改個名字

分布式存儲——mogilefs & fastdfs

然後去編輯它

其實也沒什麼好配的,就改個目錄即可

分布式存儲——mogilefs & fastdfs

于是我們給它建一個tracker目錄 mkdir /data/fastdfs/tracker -p

分布式存儲——mogilefs & fastdfs

然後因為它是用戶端工具,是以我們還需要配一下用戶端

分布式存儲——mogilefs & fastdfs

配一下工作路徑和tracker的位址

分布式存儲——mogilefs & fastdfs

就可以直接啟動服務了

分布式存儲——mogilefs & fastdfs

啟動成功

分布式存儲——mogilefs & fastdfs

檢視下端口

分布式存儲——mogilefs & fastdfs

3、配置storage

還是進入/etc/fdfs目錄,然後拷貝一份配置檔案,這會就要拷貝storage.conf的模闆了

分布式存儲——mogilefs & fastdfs

也是需要指定一個工作路徑

分布式存儲——mogilefs & fastdfs

然後指定一個存儲路徑(可以與上面相同)

分布式存儲——mogilefs & fastdfs

這裡配置tracker的IP位址

分布式存儲——mogilefs & fastdfs

同樣的,建個目錄啟動即可

分布式存儲——mogilefs & fastdfs
分布式存儲——mogilefs & fastdfs

确實起來了

分布式存儲——mogilefs & fastdfs

另一台也做相同的操作。

3、然後就可以測試了

分布式存儲——mogilefs & fastdfs

FastDFS實作nginx代理

1、在兩台storage上安裝nginx包

還是進到fastdfs目錄下,安裝所有的nginx包

分布式存儲——mogilefs & fastdfs

編輯配置檔案 /etc/nginx/nginx.conf

分布式存儲——mogilefs & fastdfs

還要修改一個配置檔案vim /etc/fdfs/mod_fastdfs.conf

配置一下trackerIP

分布式存儲——mogilefs & fastdfs

再将這句改為true

分布式存儲——mogilefs & fastdfs

然後改一下路徑

分布式存儲——mogilefs & fastdfs

啟動nginx服務

然後就可以在網頁中通路了

分布式存儲——mogilefs & fastdfs

(使用storage的IP+這個路徑即可通路了)

繼續閱讀