分佈式存儲(MFS)

1、什麼是MFS文件系統?
Moose File System 是一個具有容錯功能的網絡分佈式文件系統,它將數據分佈在網絡中的不一樣服務器上,MooseFS經過FUSE使之看起來就是一個Unix的文件系統。
即MFS文件系統:將分佈在各個範圍的計算機將他們未使用的分區統一進行管理使用的一種文件系統。
 
 
 
2、MFS部署(mfs-1.6.11)
因爲用戶數量的不斷攀升,我對訪問量大的應用實現了可擴展、高可靠的集羣部署(即lvs+keepalived的方式),但仍然有用戶反饋訪問慢的問題。經過排查個服務器的狀況,發現問題的根源在於共享存儲服務器NFS。在我這個網絡環境裏,N個服務器經過nfs方式共享一個服務器的存儲空間,使得NFS服務器不堪重負。察看系統日誌,全是nfs服務超時之類的報錯。通常狀況下,當nfs客戶端數目較小的時候,NFS性能不會出現問題;一旦NFS服務器數目過多,而且是那種讀寫都比較頻繁的操做,所獲得的結果就不是咱們所期待的。下面是某個集羣使用nfs共享的示意圖:
 
這種架構除了性能問題而外,還存在單點故障,一旦這個NFS服務器發生故障,全部靠共享提供數據的應用就再也不可用,儘管用rsync方式同步數據到另一個服務器上作nfs服務的備份,但這對提升整個系統的性能毫無幫助。基於這樣一種需求,咱們須要對nfs服務器進行優化或採起別的解決方案,然而優化並不能對應對日益增多的客戶端的性能要求,所以惟一的選擇只能是採起別的解決方案了;經過調研,分佈式文件系統是一個比較合適的選擇。採用分佈式文件系統後,服務器之間的數據訪問再也不是一對多的關係(1個NFS服務器,多個NFS客戶端),而是多對多的關係,這樣一來,性能大幅提高毫無問題。
到目前爲止,有數十種以上的分佈式文件系統解決方案可供選擇,如lustre,hadoop,Pnfs等等。我嘗試了PVFS,hadoop,moosefs這三種應用,參看了lustre、KFS等諸多技術實施方法,最後我選擇了moosefs(如下簡稱MFS)這種分佈式文件系統來做爲個人共享存儲服務器。爲何要選它呢?
一、實施起來簡單。MFS的安裝、部署、配置相對於其餘幾種工具來講,要簡單和容易得多。看看lustre 700多頁的pdf文檔,讓人頭昏吧。
二、不停服務擴容。MFS框架作好後,隨時增長服務器擴充容量;擴充和減小容量皆不會影響現有的服務。注:hadoop也實現了這個功能。
三、恢復服務容易。除了MFS自己具有高可用特性外,手動恢復服務也是很是快捷的
MFS特性(根據官方網站翻譯) 
★ 高可靠性(數據能被分紅幾個副本存儲在不一樣的計算機裏)
★ 經過增長計算機或增長新的硬盤動態擴充可用磁盤空間
★ 能夠設置刪除文件的空間回收時間
   文件被刪除86400秒,才真正刪除文件,回收磁盤空間。
★ 爲文件建立快照
MFS文件系統的組成 
一、元數據服務器。在整個體系中負責管理管理文件系統,目前MFS只支持一個元數據服務器master,這是一個單點故障,須要一個性能穩定的服務器來充當。但願從此MFS能支持多個master服務器,進一步提升系統的可靠性。
二、元數據日誌服務器。備份master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs。當元數據服務器數據丟失或者損毀,可從日誌服務器取得文件進行恢復。
三、數據存儲服務器chunkserver。真正存儲用戶數據的服務器。存儲文件時,首先把文件分紅塊,而後這些塊在數據服務器chunkserver之間複製(複製份數能夠手工指定,建議設置副本數爲3)。數據服務器能夠是多個,而且數量越多,可以使用的「磁盤空間」越大,可靠性也越高。
四、客戶端。使用MFS文件系統來存儲和訪問的主機稱爲MFS的客戶端,成功掛接MFS文件系統之後,就能夠像之前使用NFS同樣共享這個虛擬性的存儲了。
元數據服務器安裝和配置 
元數據服務器能夠是linux,也能夠是unix,你能夠根據本身的使用習慣選擇操做系統。GNU源碼,在各類類unix平臺的安裝都基本一致。
實驗環境:5臺rhel5.3
3、元數據服務
(一)安裝元數據服務
一、下載GNU源碼
http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
二、解包 tar -xzf mfs-1.6.11.tar.gz
三、切換目錄 cd mfs-1.6.11
四、建立用戶 useradd mfs –s /sbin/nologin
五、配置 ./configure -–prefix=/usr/local/mfs --with-default-user=mfs
–-with-default-group=mfs
六、編譯安裝 make ; make install
(二)配置元數據服務
元數據服務器的配置文件被放置於安裝目錄/usr/local/mfs/etc。與mfs-1.5.12版本不一樣的是:mfs-1.6.x版安裝完成只有模版文件,其後綴形如mfsmaster.cfg.dist。爲了使mfs master正常工做,須要兩個配置文件mfsmaster.cfg及mfsexports.cfg,前者爲主配置文件,後者爲權限控制文件(mfs客戶端掛接時使用)。
(1)    主配置文件mfsmaster.cfg,可直接從模版文件拷貝而來,打開這個配置文件/usr/local/mfs/etc/mfsmaster.cfg,看看都有哪些內容:
儘管每行都被註釋掉了,但它們倒是配置文件的默認值,要改變這些值,須要取消註釋,而後明確指定其取值。接下來講明一下其中一些項目的含義。須要注意的是,凡是用#註釋掉的變量均使用其默認值,這裏解釋一下這些變量:

#WORKING_USER和WORKING_GROUP:是運行master server的用戶和組;
#SYSLOG_IDENT:是master server在syslog中的標識,也就是說明這是由master serve產生的;
#LOCK_MEMORY:是否執行mlockall()以免mfsmaster 進程溢出(默認爲0);
#NICE_LEVE:運行的優先級(若是能夠默認是 -19; 注意: 進程必須是用root啓動);
#EXPORTS_FILENAME:被掛接目錄及其權限控制文件的存放位置
#DA TA_PATH:數據存放路徑,此目錄下大體有三類文件,changelog,sessions和stats;
#BACK_LOGS:metadata的改變log文件數目(默認是 50);
#REPLICATIONS_DELAY_INIT:延遲複製的時間(默認是300s);
#REPLICATIONS_DELAY_DISCONNECT:chunkserver斷開的複製延遲(默認是3600);
# MATOML_LISTEN_HOST:metalogger監聽的IP地址(默認是*,表明任何IP);
# MATOML_LISTEN_PORT:metalogger監聽的端口地址(默認是9419);
# MATOCS_LISTEN_HOST:用於chunkserver鏈接的IP地址(默認是*,表明任何IP);
# MATOCS_LISTEN_PORT:用於chunkserver鏈接的端口地址(默認是9420);
# MATOCU_LISTEN_HOST:用於客戶端掛接鏈接的IP地址(默認是*,表明任何IP);
# MATOCU_LISTEN_PORT:用於客戶端掛接鏈接的端口地址(默認是9421);
# CHUNKS_LOOP_TIME :chunks的迴環頻率(默認是:300秒);
   注:原文爲Chunks loop frequency in seconds (default is 300)
# CHUNKS_DEL_LIMIT :在一個loop設備中能夠刪除chunks的最大數 (默認:100)
#REPLICATIONS_DELAY_DISCONNECT chunkserver斷開後的複製延時(默認:3600秒)
# CHUNKS_WRITE_REP_LIMIT:在一個循環裏複製到一個chunkserver的最大chunk數目(默認是1)
# CHUNKS_READ_REP_LIMIT :在一個循環裏從一個chunkserver複製的最大chunk數目(默認是5)
# REJECT_OLD_CLIENTS:彈出低於1.6.0的客戶端掛接(0或1,默認是0)
注意mfsexports訪問控制對於那些老客戶是沒用的
◆     DA TA_PATH = /usr/local/mfs/var/mfs 數據存放路徑,只元數據的存放路徑。那麼這些數據都包括哪些呢?進目錄看看,大體分3種類型的文件:
這些文件也一樣要存儲在其餘數據存儲服務器的相關目錄。    
◆ MATOCS_LISTEN_PORT = 9420 MATOCS–master to chunkserver,即元數據服務器使用9420這個監聽端口來接受數據存儲服務器chunkserver端的鏈接。
◆ MATOML_LISTEN_PORT = 9419 MATOML—master to metalogger,用於備份元數據服務器的變化日誌。注:Mfs-1.5.12之前的版本沒有這個項目。
◆ MATOCU_LISTEN_PORT = 9421 元數據服務器在9421端口監聽,用以接受客戶端對MFS進行遠程掛接(客戶端以mfsmount掛接MFS)
◆ 其餘部分看字面意思都不難理解。還有幾個與時間有關的數值,其單位是秒。
這個配置文件,沒必要作修改就能工做了。
(2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接從模版文件複製而來。這個文件的內容,十分相似NFS服務器的exports文件.實際配置時,可參照這個文件的默認行來修改以知足本身的應用需求.個人mfsexports.cfg文件的內容爲:
(3)複製文件
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
這是一個8字節的文件,爲mfs-1.6.x新增項目。
元數據服務器master啓動
元數據服務器能夠單獨啓動,即便沒有任何數據存儲服務器(chunkserver)也是能正常工做的,所以當咱們安裝配置完MFS後,便可啓動它。執行命令 /usr/local/mfs/sbin/mfsmaster start ,若是沒有意外,元數據庫服務器就應該做爲一個守護進程運行起來。如今咱們能夠經過3個方面來檢查一下MFS master的運行情況:
一、    檢查進程
二、    檢查網絡狀態
三、    檢查系統日誌
MFS的日誌會直接寫入系統日誌。當咱們增長數據存儲服務器(chunkserver)或數據存儲服務器(chunkserver)處故障時,都能在系統日誌找到這些記錄。注意,這個日誌跟元數據變化日誌不是一回事情。
(三)、關閉元數據服務器
關閉元數據服務器,務必使用 /usr/local/mfs/sbin/mfsmaster –s 這種方式,若是直接使用kill殺死進程,將致使下次啓動時出現找不到相關文件,而不能正常啓動服務器。這個必定要謹慎。固然,若是發生了這個事情,仍是能夠經過 mfsmetastore 來恢復的。
元數據日誌服務爲mfs 1.6之後版本新增的服務,便可以把元數據日誌保留在元數據服務器,也能夠單獨存儲。爲保證其可靠性,最好單獨放置。須要注意的是,源數據日誌守護進程跟元數據服務器(master)在同一個服務器上,備份元數據日誌的服務器做爲它的客戶端,從元數據服務器取得日誌文件進行備份。
4、元數據日誌服務器metalogger
(一)安裝
一、下載GNU源碼
http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
二、解包 tar -xzf mfs-1.6.11.tar.gz
三、切換目錄 cd mfs-1.6.11
四、建立用戶 useradd mfs –s /sbin/nologin 
五、配置 ./configure –-prefix=/usr/local/mfs –-with-default-user=mfs –with-default-group=mfs
六、編譯安裝 make ; make install
(二)元數據日誌服務(metalogger)配置
該服務僅須要一個配置文件,這裏咱們只須要從模板文件複製一個,而後稍微加以修改便可,下面是個人某個metalogger 的配置文件:
這個配置文件,惟一須要修改的地方就是MASTER_HOST,它的值必須是元數據服務器的主機名或者ip地址。另外,爲方便你們進一步理解,我把配置文件裏其餘幾個項目簡單的說明一下:
(1)SYSLOG_IDENT = mfsmetalogger 元數據日誌服務運行時,在系統日誌輸出的標識,下面給出一段系統日誌:
(2)DA TA_PATH = /usr/local/mfs/var/mfs 從元數據服務器(master)抓回文件,而後進行存放的路徑。
(3)BACK_LOGS = 50 存放備份日誌的總個數爲50,超出50則輪轉。在作元數據恢復時,僅僅須要最近的那個日誌文件備份,所以默認的日誌個數就足夠了,這也保證了日誌備份不會寫滿整個分區。
(4)META_DOWNLOAD_FREQ = 24 元數據備份文件下載請求頻率。默認爲24小時,即每隔一天從元數據服務器(MASTER)下載一個metadata.mfs.back文件。當元數據服務器關閉或者出故障時,matedata.mfs.back文件將消失,那麼要恢復整個mfs,則需從metalogger服務器取得該文件。請特別注意這個文件,它與日誌文件一塊兒,纔可以恢復整個被損壞的分佈式文件系統。
(三)元數據日誌服務(metalogger)運行及關閉
1、啓動過程爲:
啓動過程若是不能跟元數據服務器進行通訊的話,系統會給出錯誤信息。
2、關閉服務,執行命令 /usr/local/mfs/sbin/mfsmetalogger stop
3、檢查服務的運行情況。從兩個方面看,一個是元數據服務器,另外一個是自己的數據生成狀況。
tail –f /var/log/message
◆察看元數據服務器網絡鏈接,能夠看見日誌服務器鏈接到元數據服務器的tcp 9419端口。
◆查看日誌服務器的工做目錄,正常狀況應該看見已經有文件生成了(從元數據服務器獲取過來的)。能夠手動從元數據服務器複製一個日誌文件過來比較文件的內容。
數據存儲chunkserver服務器的安裝配置 
數據存儲服務器chunkserver也是能夠運行在各類類unix平臺的,所以再也不多說。一個MFS環境到底能集羣多少服務器,最好3臺以上;而且專門用來作存儲,不要把它跟master搞到一個機器(理論上沒問題,實現也是能夠的,但這不是一個好策略)。由於每一個數據存儲服務器的安裝和配置都是相同的,因此只需按照一個服務器的操做就能夠了。
5、數據存儲服務器chunkserver
(一)安裝
一、下載GNU源碼
http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
二、解包 tar -xzf mfs-1.6.11.tar.gz
三、切換目錄 cd mfs-1.6.11
四、建立用戶 useradd mfs –s /sbin/nologin 
五、配置 ./configure –-prefix=/usr/local/mfs –-with-default-user=mfs –with-default-group=mfs
六、編譯安裝 make ; make install
(二)配置
數據存儲服務器有2個配置服務器須要修改,一個是主配置文件 mfschunkserver.cfg ,另外一個配置文件是 mfshdd.cfg。每一個服務器用來分配給 MFS使用的空間最好是一個單獨的硬盤或者一個raid卷,最低要求是一個分區。做者舉的例子是建立一個大文件,而後掛接在本地,這不是個好主意,只能用來作實驗了。
修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:
這個配置文件裏,沒有註釋符號「#」就是被修改過的項了,接下來是裏面某些項的含義說明:
◆ MASTER_HOST = 172.2.9.250 元數據服務器的名稱或地址,能夠是主機名,也能夠是ip地址,只要數據存儲服務器能訪問到元數據服務器就行。
◆ LOCK_FILE = /var/run/mfs/mfschunkserver.pid 與元數據服務器master的處理徹底相同.
◆ CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,這個監聽端口用於與其它數據存儲服務器間的鏈接,一般是數據複製。
◆ HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配給MFS使用的磁盤空間配置文件的位置。
二、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。在實驗環境中,只有一個80的SATA硬盤,分了一個35G容量的分區來作爲MFS存儲服務的組成部分。爲了使mfs擁有寫目錄的權限,須要修改目錄的屬主。個人服務器的分區掛接點是 /da ta , 用 chown –R mfs:mfs /da ta 把屬主改變。由於個人每一個服務器只需貢獻一個分區作爲MFS,所以配置文件只須要以下一行內容就能夠了:
/da ta
這個文件默認狀況下有好幾行,咱們最好把它刪掉,由於按常規狀況用註釋符號「#」好像不起做用。
(三)啓動數據存儲服務器chunkserver
在數據存儲服務器chunkserver執行命令 /usr/local/mfs/sbin/mfschunkserver start 啓動數據存儲守護進程.經過如下幾種方式來檢查chunkserver的運行狀態.
一、  查看進程 ps aux | grep mfschunkserver | grep –v grep
二、  查看網絡狀態,正常狀況下應該看見9422處於監聽狀態,若是有其餘數據存儲服務器chunkserver在同一個元數據服務器master管理下運行的話,應該能看見其餘chunkserver跟本機的鏈接狀況:
三、  查看元數據服務器的系統日誌,能夠看見新增的數據存儲服務器chunkserver被加入。
(四)關閉數據存儲服務器
跟元數據服務器master類似,執行命令 /usr/local/mfs/sbin/mfschunkserver –s , chunkserver服務就停下來了。爲了使系統重啓過程能自動啓動chunkserver 服務,能夠經過在/etc/rc.local文件追加行  /usr/local/mfs/sbin/mfschunkserver start 來達到這個目的(master的自動重啓處理也可一樣處理)。
MFS客戶端的安裝及配置 
實驗環境,純rhel5.3環境,所以下面的描述,只有centos及freebsd掛接MFS文件系統的情形,其餘類型的unix系統,待往後嘗試。對比前面的操做過程,客戶端掛接後使用MFS集羣文件系統纔是最費時的事情。
6、MFS的客戶端。
(一)安裝
◆Mfsmount須要依賴FUSE,所以須要先安裝好fuse,這裏我選用 fuse-2.8.1.tar.gz。
一、解包 tar -xzf fuse-2.8.1.tar.gz
二、切換目錄 cd fuse-2.8.1.
三、配置  ./configure
四、編譯安裝  make;make install
若是系統已經安裝了fuse,則跳過這個步驟。
◆安裝MFS客戶端程序
一、修改環境變量文件/etc/profile ,追加下面的行,而後再執行命令source /etc/profile使修改生效。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
若是不執行這個操做,在後面安裝MFS的過程當中,執行命令
./configure –enable-mfsmount時可能出現」checking for FUSE… no  configure: error: mfsmount build was forced, but fuse development package is not installed」這樣的錯誤,而不能正確安裝MFS客戶端程序。
二、解包 tar -xzf mfs-1.6.11.tar.gz
三、切換目錄 cd mfs-1.6.11
四、建立用戶 useradd mfs –s /sbin/nologin 
五、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
六、編譯安裝 make ; make install
◆檢查MFS客戶端安裝的結果。經過查看目錄/usr/local/mfs/bin目錄的文件,應該發現以下文件:
(二)掛接和使用MFS文件系統
一、保證fuse模塊被加載內核(modprobe fuse)。
二、掛接MFS /usr/local/mfs/bin/mfsmount  /mnt/mfs –H 172.2.9.250  /mnt .注意,全部的MFS都是掛接同一個元數據服務器master,而不是其餘數據存儲服務器chunkserver !
三、經過查看磁盤使用狀況來檢查是否被掛接成功。
四、進入目錄/mnt/mfs,上傳一個文件,看是否正常?接着在手動用touch 建立一個文件,而後再刪除它們,看是否能夠正常操做。
五、設置文件副本數量,建議以3份爲佳。
設置副本數目mfsrsetgoal 3 /mnt
六、設置刪除文件後空間回收時間。
修改回收時間爲10分鐘mfsrsettrashtime 600 /mnt
七、    把掛接命令追加到文件/etc/rc.local,可實現開機自動啓動掛接MFS.
#!/bin/sh/sbin/kldload /usr/local/modules/fuse.ko
/usr/local/mfs/bin/mfsmount -h 172.2.9.250 /mnt
就能實現開機或重啓系統自動掛接MFS文件系統。
八、Mfscgiserv是用python編寫的一個web服務器,它的監聽端口是9425,
能夠利用:
       /usr/local/mfs/sbin/mfscgiserv來啓動,用戶利用瀏覽器就可全面監控全部客戶掛接,chunkserver及master server,客戶端的各類操做等等,絕對是個好工具。
     在任何一臺裝有瀏覽器的機器上均可以查看:
 http://172.2.9.250:9425
七.破壞性測試 
1、測試數據存儲服務器
我用5個服務器組成了MFS的存儲平臺,其中一個是元數據服務器master,一個元數據日誌服務器。兩臺數據存儲服務器是chunkserver.先中止一個chunkserver服務,而後在某個MFS客戶端往掛接點的目錄(/mnt)裏複製數據或者建立目錄/文件、或者讀取文件、或者刪除文件,觀察操做是否能正常進行。如有3臺以上的chunkserver,再中止第2個chunkserver,重複執行上述操做;而後再中止第3個服務器,執行相似的文件讀些操做。減小chunkserver試驗後,咱們再來逐步增長chunkserver服務器,而後對MFS執行讀寫等相關訪問操做,檢驗其正確性。
經過增減chunkserver服務器的測試,服務的可靠性確實不錯,哪怕只剩下最後一個服務器,也能正常提供存儲訪問服務。(空間足)
2、測試元數據服務器
元數據服務器最重要的文件在目錄 /usr/local/mfs/var/mfs ,MFS每個數據的變化,都被記錄在這個目錄的文件裏,咱們能夠經過備份這個目錄的所有文件,來保障整個MFS文件系統的可靠性.在正常狀況下,元數據服務器的改變日誌文件(changelogs) 實時地、自動地複製到全部的數據存儲服務器,而且以changelog_csback.*.mfs的形式命名。換句換說,即便元數據服務器報廢了,也能再部署一個元數據服務器,而後從數據存儲服務器chunkserver取得恢復所須要的文件。
 
(一)本地測試
一、中止元數據服務 /usr/local/mfs/sbin/mfsmaster
二、備份元數據服務器數據 cd /usr/local/mfs/var; tar czvf mfs.tgz mfs
三、刪除目錄 mv mfs mfs.bk 或 rm –rf mfs
四、啓動元數據服務 ../sbin/mfsmaster start 啓動失敗,提示不能初始化數據。
五、解包 tar -xzf mfs.tgz
六、執行恢復操做 .. /sbin/mfsmetarestore –a
七、啓動元數據服務 ../sbin/mfsmaster start
八、在MFS客戶端檢查MFS存儲的數據是否跟恢復前一致?可否正常訪問等等。
(二)   遷移測試
一、  安裝新的MFS元數據服務器。
二、  從當前的元數據服器(master)或日誌備份服務器(mfsmetalogger)複製備份文件 metadata.mfs.back/metadate_ml.mfs.back到新的元服務器目錄(metadata.mfs.back須要定時用crontab備份).
三、  從當前的元數據服器(master)或日誌備份服務器(mfsmetalogger)複製元數據服務器數據目錄(/usr/local/mfs/var/mfs)到這個新的元數據服務器。
四、  中止原先的那個元數據服務器(關閉計算機或中止它的網絡服務)。
五、  更改新的元數據服務器的ip爲原來那個服務器的ip.
六、  執行數據恢復操做,其命令爲:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs 恢復成功後再執行啓動新的元數據服務操做。
七、  啓動新的元數據服務 /usr/local/mfs/sbin/mfsmaster start
八、  在MFS客戶端檢查MFS存儲的數據是否跟恢復前一致?可否正常訪問等等。

參考田逸老師文章python

相關文章
相關標籤/搜索