mogileFS分佈式文件存儲解決方案

mogileFS是一個散播式文件存儲的辦理方案,他由Six Apart開拓下面列出了他的一些特性(由mogileFS頁面 先容翻譯而來)
1. 操縱層——不必要出格的核心組件
2. 無單點失敗——MogileFS安裝的三個組件(存儲節點、跟蹤器、跟蹤用的數據庫),均可運行在多個 呆板上,因此沒有單點失敗。(你也可以將跟蹤器和存儲節點運行在同一臺呆板上,如許你就沒有須要用4臺呆板)推舉至少兩臺呆板。
3. 主動的文件複製——基於差別的文件“分類”,文件可以被主動的複製到多個有充足存儲空間的存儲節點上,如許可以滿意這個“種別”的最少複製哀求。比如你有一 個圖片網站,你可以設置原始的JPEG圖片必要複製 至少三份,但實際只有1or2份拷貝,假如損失了數據,那麼Mogile可以重新成立遺失的拷貝數。用這種辦法,MogileFS(不做RAID)可以節 約 磁盤,不然你將存儲同樣的拷貝多份,完備沒有須要。
4. “比RAID很多幾多了”——在一個非存儲地區網絡的RAID(non-SAN RAID)的成立中,磁盤是冗餘的,但主機不是,假如你所有呆板壞了,那麼文件也將不能拜訪。 MogileFS在差別的呆板之間舉辦文件複製,因此文件始終是可用的。
5. 傳輸中立,無出格協議——MogileFS客戶端可以通過NFS或HTTP來和MogileFS的存儲節點來通訊,但起首必要見告跟蹤器一下。
6. 大略的定名空間——文件通過一個給定的key來斷定,是一個全局的定名空間。你可以本身天生多個定名空間,只要你樂意,不外如許也許在同一MogileFS中會造成key鬥嘴。
7. 不消共享任何對象——MogileFS不必要依靠昂貴的SAN來共享磁盤,每個呆板只用掩護好本身的磁盤。
8. 不必要RAID——在MogileFS中的磁盤可以是做了RAID的也可以是沒有,假如是爲了安詳性着想的話RAID沒有須要買了,由於MogileFS已經供給了。
9. 不會碰到文件體系本身的不可知情況——在MogileFS中的存儲節點的磁盤可以被技倆化成多種技倆(ext3,reiserFS等等)。MogilesFS會做本身內部目次的哈希,以是它不會碰到文件體系本身的一些限定,比如一個目次中的最大文件數。你可以放心的應用。

Mogilefs 的網站所在(http:// /mogilefs )

php 擴張 的所在( )供給了一個php擴張用來在php中應用mogileFS。
這兒也有一個所在,svn的源碼庫

mogileFS 安裝步調(
mogileFS 應用perl 編寫的,在安裝前你應當先安裝好perl。同時mogileFS也必要一個數據庫用來生涯文件數據的跟蹤信息(如今好像可以應用MySQL推舉 , SQLite,Oracle,Postsql)。

這兒有一個兄弟的中文安裝學習條記 mogileFS學習

mogileFS 適宜於靜態存儲,就是那種一次生涯,多次讀取型的資源,比如以html行動靜態化處理賞罰的動態文件,圖片文件,其他只供給下載的文件等。


二、mogileFS的事變行動

下面扼要闡述 MogileFS 是怎麼事變的.

mogileFS由如下一些部分構成:
Application: 想要 生涯/加載 文件的操縱
Tracker (the mogilefsd process): 基於變亂的(event-based) 父 進程/動靜 總線來管理全部來之於客戶妒攀??用的交互(requesting operations to be performed), 包孕將哀求負載均衡到 “query workers” 中,讓mogilefsd的子進程行止理賞罰. 你可以在差別的呆板上運行兩個Tracker, 爲了高可用性, 或應用更多的Tracker爲了負載均衡(你必要運行多於兩個的Tracker). mogilefsd的子進程有:
Replication — 個呆板間複製文件
Deletion — 從定名空間刪除是立即的,從文件體系刪除是異步的
Query — 相應客戶端的哀求
Reaper — 在磁盤失敗後將文件複製哀求重新放到行列中
Monitor — 監測主機和設配的康健度和狀況

Database — 數據庫用來寄放MogileFS的元數據 (定名空間, 和文件在那邊). 這應當設置一個高可用性(HA)的環境以預防單點失敗.
Storage Nodes — 實際文件寄放的地方. 存儲節點是一個HTTP做事器,用來做 刪除,寄放等事變,任何WebDAV做事器都可以, 不外推舉應用 mogstored 。 mogilefsd 可以設置到兩個呆板上應用差別端口… mogstored 爲全部 DAV 操縱 (和流量監測), 並且你本身選擇的快速的HTTP做事器用來做 GET 操縱(給客戶端供給文件). 典範的用戶沒一個加載點有一個大容量的 SATA 磁盤,他們被加載到 /var/mogdata/devNN.

High-level 流程:
操縱措施哀求打開一個文件 (通過RPC 關照到 tracker, 找到一個可用的呆板). 做一個 “create_open” 哀求.
tracker 做一些負載均衡(load balancing)處理賞罰,決議應當去哪兒,然後給操縱措施一些也許用的職位。
操縱措施寫到此中的一個職位去 (假如寫失敗,他會重新實行並寫到其它一個職位去).
操縱措施 (client) 通過”create_close” 見告tracker文件寫到那邊去了.
tracker 將該名稱和域命的名空間關聯 (通過數據庫來做的)
tracker, 在靠山, 起頭複製文件,知道他滿意該文件種別設定的複製正直
然後,操縱措施通過 “get_paths” 哀求 domain+key (key == “filename”) 文件, tracker基於每一職位的I/O忙碌情況中興(在內部顛末 database/memcache/etc 等的一些決議處理賞罰), 該文件可用的完備 URLs所在列表.
操縱措施然後按序次實行這些URL所在. (tracker’繼承監測主機和裝備的狀況,因此不會返回逝世毗連,默認情況下他對返回列表中的第一個元素做雙重反省,除非你不要他這麼做..)

[ 觀念界說 ]
可以參考官方wiki的這兒,大略說一下
domain:最高域,在一個域下key是唯一的。
class:包孕在domain中,可以針對每一個class界說生涯的份數。
key:對文件的唯一標識。
file:文件。

[ 適用性 ]
由於Mogilefs不支持對一個文件的隨機讀寫,因此註定了只適宜做一部分操縱。比如圖片做事,靜態HTML做事。
即文件寫入後根本上不必要批改的操縱,固然你也可以天生一個新的文件覆蓋上去。


三、【安裝Perl和干係包】

[ 安裝環境 ]
操縱體系:RHEL 4 (AS 4)
Perl版本:Perl v5.8.8
留意:請確保你的Perl版本爲大於 v5.8.8,不然也許安裝會有題目,其它,本文全部操縱都是在一臺呆板上完成,也許多臺呆板上輕微有些差別,請自行調度

[ MySQL ]
安裝前致意裝好MySQL,假如MySQL Server和MogileFS不是一臺呆板,請在MogileFS呆板安裝好MySQL Client,本文假設MySQL Client安裝在:/usr/local/mysql 目次,安裝完客戶端後請成立一個軟鏈接:
ln -s /usr/local/mysql/lib/libmysqlclient.so.15 /usr/lib/libmysqlclient.so.15

[ Perl包安裝 ]

由於MogileFS必要應用很多幹系的Perl包,請逐一服從一下序次安裝,本文采用的是比擬笨,比擬大略的安裝行動,逐個把包下載返來本機手工安裝,沒有應用cpan的包安裝行動。
要下載包,請在中輸入包名,然後下載,一樣平常供給的是最新版,假如版本跟下面不同等,請以最新版爲準。

爲利便應用,本文包下載所在列表:(不擔保您涉獵本文的時間有效)




















包安裝序次:(務必服從本序次舉辦)

BSD-Resource-1.2901.tar.gz
Sys-Syscall-0.22.tar.gz

Time-HiRes-1.9715.tar.gz
Danga-Socket-1.57.tar.gz

Net-Netmask-1.9015.tar.gz
IO-AIO-3.07.tar.gz (本包哀求Perl v5.8.8以上)
Perlbal-1.71.tar.gz

String-CRC32-1.4.tar.gz
Gearman-1.07.tar.gz
Gearman-Client-Async-0.93.tar.gz
Gearman-Server-1.08.tar.gz

#make test 有也許會有一個過錯,不消管它
DBI-1.607.tar.gz
DBD-mysql-4.008.tar.gz

#以下下令假設MySQL做事器是在本機
perl Makefile.PL –testhost=localhost –testuser=root –mysql_config=/usr/local/mysql/bin/mysql_config

IO-Compress-Base-2.015.tar.gz
IO-Compress-Zlib-2.015.tar.gz
Compress-Raw-Zlib-2.015.tar.gz
Compress-Zlib-2.015.tar.gz
IO-stringy-2.110.tar.gz

MogileFS-Client-1.08.tar.gz
mogilefs-server-2.20.tar.gz
MogileFS-Utils-2.13.tar.gz


肯定要按以上序次安裝,解緊縮,天生Makefile,測試,安裝 如許的步調來推行,下令是:

# tar zxvf xxxxx.tar.gz
# cd xxxxx
# perl Makefile.PL
# make
# make test
# make install

如許就安裝樂成了,留意make test的過錯提醒,假如不是很嚴峻的過錯提醒,根本可以漠視連續下一步。

四、【設置MogileFS】

以下操縱除非明瞭指定,不然是以root用戶來運行,固然,你也可以應用本身的帳戶來推行(除了一些特權操縱),其它 10.15.6.28 是本機IP,本嘗試只應用了一臺呆板。假如設置過程不太順遂,請反覆反省後反覆嘗試。

1. 創建數據庫(初始化)
可以預先在數據庫做事器上成立好一個叫做 mogilefs 的數據庫,便於舉辦下面的步調.
#mogdbsetup --dbhost=10.15.6.28 --dbname=mogilefs --dbuser=root

--dbhost 是數據庫主機所在, --dbname是數據庫名,--dbuser是拜訪該數據庫的用戶,假如有暗碼請加上--dbpass選項,最好拜訪數據庫的是超等用戶root可能具有很高權限的新建數據庫用戶,由於MogileFS必要一些比擬高權限的初始化操縱。

2. tracker設置
新建tracker設置文件 /etc/mogilefsd.conf ,寫入以下文件內容:(請去掉#後頭的留意信息)

db_dsn DBI:mysql:mogilefs #數據庫設置
db_user mogile #數據庫用戶
db_pass 123123 #數據庫暗碼
conf_port 6001 #tracker端口
listener_jobs 5

db_dsn指向的是你數據庫的職位,假如你數據庫不在同一個呆板上,請改爲:
db_dsn DBI:mysql:mogilefs:127.0.0.1

由於mogilefsd不能用root用戶啓動.以是添加mogile用戶
# adduser mogile

在設置下面早年先啓動 trackers server
# su mogile
# mogilefsd -c /etc/mogilefsd.conf --daemon

3. Storage Server 設置
闡發:以下下令假設你的 Perl 的包文件都在 /usr/lib/perl5/5.8.8 目次,假如不是,請自行批改。

用mogadm器材將storage server加到數據庫中:
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=10.15.6.28:6001 host add mogilestorage --ip=10.15.6.28 --port=7500 --status=alive
(由於本文是在一臺呆板上配,故trackers的所在和ip所在是一樣的)

用下面下令來檢測是否樂成:
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=10.15.6.28:6001 host list

介入一個裝備到你的storage server:
# mogadm -lib=/usr/lib/perl5/5.8.8 -trackers=10.15.6.28:6001 device add mogilestorage 1

用下面下令來檢測是否樂成:
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=10.15.6.28:6001 device list

Device ID 是唯一的,一旦創建將無法刪除,只能mark爲dead. 以是,假如你某個磁盤壞了,你mark爲dead, 其後又修睦了,
那麼你必需重新技倆化並定名爲新的device id, 不支持將device從dead變爲alive.

新建Storage設置文件: /etc/mogstored.conf 內容是: (請去掉#後頭的留意信息)

httplisten=0.0.0.0:7500 #HTTP監聽端口
mgmtlisten=0.0.0.0:7501 #MongileFS監聽端口
docroot=/opt/mogdata #數據存儲物理路徑

成立寄放數據的路徑:(必需應用root權限手法創建)
# mkdir -p /opt/mogdata/dev1

闡發:mogadm 參數的用法請參考

4. 運行MogileFS

啓動 Storage Server
# mogstored -c /etc/mogstored.conf --daemon

假如沒有啓動Trackers,請啓動 Trackers
# su mogile
$ mogilefsd -c /etc/mogilefsd.conf --daemon

查察你全部的做事都起來沒有
# ps -ef | grep mogilefsd
# ps -ef | grep mogstored


五、【MogileFS應用測試】

天生domain
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=10.15.6.28:6001 domain add testdomain

加一個 class 到domain
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=10.15.6.28:6001 class add testdomain testclass

寫一個perl文件試一下test.pl
#=======================================
use MogileFS::Client;
my $mogfs = MogileFS::Client->new(domain=>'testdomain', hosts=>['10.0.22.184:6001'], root=>'/home/xiehl/mogdata',);
my $fh = $mogfs->new_file("file_key", "testclass");
die $fh unless $fh->print($mogfs->readonly);
my $content = "file.txt";
@num = $mogfs->store_content("file_key","testclass",$content);
print "@num \n";
my $file_contents = $mogfs->get_file_data("file_key");
print "$file_contents \n";
#$mogfs->delete("file_key");
$fh->print($file_contents);
@urls = $mogfs->get_paths("file_key");
print "@urls \n";
#=======================================

推行腳本
# perl test.pl

本文返回的內容是:(也許你返回的內容會差別,技倆類似就行)

8
SCALAR(0×9ddaaa8)

在涉獵器裏輸入:,將會看到輸出:
file.txt

可以或許拜訪我們存儲的數據,設置樂成!


六、【附加內容】

[ MySQL檢測代碼 ]

假如必要檢測你的DBI和MySQL Client是否安裝正常,可以應用一下數據庫測試代碼來檢測可否正常毗連到MySQL:

#=======================================
#!/usr/bin/perl
# DBI is perl module used to connect to the database
use DBI;
# hostname or ip of server (for local testing, localhost should work)
$config{’dbServer’} = "localhost";
$config{’dbUser’} = "root";
$config{’dbPass’} = "";
$config{’dbName’} = "test";
$config{’dataSource’} = "DBI:mysql:$config{’dbName’}:$config{’dbServer’}";
# Connect to MySQL
my $dbh = DBI->connect($config{’dataSource’},$config{’dbUser’},$config{’dbPass’}) or
die "Can’t connect to $config{’dataSource’}<br>$DBI::errstr";
print "Connected successfully<br>";
$dbh->disconnect();
#=======================================

[ 干係參考 ]

mogilefs 最新版本安裝:
Mogilefs學習:
mogileFS的事變行動:
mogileFS散播式文件存儲辦理方案:

[ 擴張涉獵 ]

編譯mogileFS的php模塊:
mogileFS體系結構說明:
mogileFS體系結構說明:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章