分布式文件系統(tǒng)MFS(moosefs)實(shí)現(xiàn)存儲共享
由于用戶數(shù)量的不斷攀升,我對訪問量大的應(yīng)用實(shí)現(xiàn)了可擴(kuò)展、高可靠的集群部署(即lvs+keepalived的方式),但仍然有用戶反饋訪問慢的問題。通過排查個服務(wù)器的情況,發(fā)現(xiàn)問題的根源在于共享存儲服務(wù)器NFS。在我這個網(wǎng)絡(luò)環(huán)境里,N個服務(wù)器通過nfs方式共享一個服務(wù)器的存儲空間,使得NFS服務(wù)器不堪重負(fù)。察看系統(tǒng)日志,全是nfs服務(wù)超時之類的報(bào)錯。一般情況下,當(dāng)nfs客戶端數(shù)目較小的時候,NFS性能不會出現(xiàn)問題;一旦NFS服務(wù)器數(shù)目過多,并且是那種讀寫都比較頻繁的操作,所得到的結(jié)果就不是我們所期待的。下面是某個集群使用nfs共享的示意圖:

這種架構(gòu)除了性能問題而外,還存在單點(diǎn)故障,一旦這個NFS服務(wù)器發(fā)生故障,所有靠共享提供數(shù)據(jù)的應(yīng)用就不再可用,盡管用rsync方式同步數(shù)據(jù)到另外一個服務(wù)器上做nfs服務(wù)的備份,但這對提高整個系統(tǒng)的性能毫無幫助。基于這樣一種需求,我們需要對nfs服務(wù)器進(jìn)行優(yōu)化或采取別的解決方案,然而優(yōu)化并不能對應(yīng)對日益增多的客戶端的性能要求,因此唯一的選擇只能是采取別的解決方案了;通過調(diào)研,分布式文件系統(tǒng)是一個比較合適的選擇。采用分布式文件系統(tǒng)后,服務(wù)器之間的數(shù)據(jù)訪問不再是一對多的關(guān)系(1個NFS服務(wù)器,多個NFS客戶端),而是多對多的關(guān)系,這樣一來,性能大幅提升毫無問題。
到目前為止,有數(shù)十種以上的分布式文件系統(tǒng)解決方案可供選擇,如lustre,hadoop,Pnfs等等。我嘗試了PVFS,hadoop,moosefs這三種應(yīng)用,參看了lustre、KFS等諸多技術(shù)實(shí)施方法,最后我選擇了moosefs(以下簡稱MFS)這種分布式文件系統(tǒng)來作為我的共享存儲服務(wù)器。為什么要選它呢?我來說說我的一些看法:
1、 實(shí)施起來簡單。MFS的安裝、部署、配置相對于其他幾種工具來說,要簡單和容易得多。看看lustre 700多頁的pdf文檔,讓人頭昏吧。
2、 不停服務(wù)擴(kuò)容。MFS框架做好后,隨時增加服務(wù)器擴(kuò)充容量;擴(kuò)充和減少容量皆不會影響現(xiàn)有的服務(wù)。注:hadoop也實(shí)現(xiàn)了這個功能。
3、 恢復(fù)服務(wù)容易。除了MFS本身具備高可用特性外,手動恢復(fù)服務(wù)也是非常快捷的,原因參照第1條。
4、 我在實(shí)驗(yàn)過程中得到作者的幫助,這讓我很是感激。
MFS文件系統(tǒng)的組成
1、 元數(shù)據(jù)服務(wù)器。在整個體系中負(fù)責(zé)管理管理文件系統(tǒng),目前MFS只支持一個元數(shù)據(jù)服務(wù)器master,這是一個單點(diǎn)故障,需要一個性能穩(wěn)定的服務(wù)器來充當(dāng)。希望今后MFS能支持多個master服務(wù)器,進(jìn)一步提高系統(tǒng)的可靠性。
2、 數(shù)據(jù)存儲服務(wù)器chunkserver。真正存儲用戶數(shù)據(jù)的服務(wù)器。存儲文件時,首先把文件分成塊,然后這些塊在數(shù)據(jù)服務(wù)器chunkserver之間復(fù)制(復(fù)制份數(shù)可以手工指定,建議設(shè)置副本數(shù)為3)。數(shù)據(jù)服務(wù)器可以是多個,并且數(shù)量越多,可使用的“磁盤空間”越大,可靠性也越高。
3、 客戶端。使用MFS文件系統(tǒng)來存儲和訪問的主機(jī)稱為MFS的客戶端,成功掛接MFS文件系統(tǒng)以后,就可以像以前使用NFS一樣共享這個虛擬性的存儲了。
元數(shù)據(jù)服務(wù)器安裝和配置
元數(shù)據(jù)服務(wù)器可以是linux,也可以是unix,你可以根據(jù)自己的使用習(xí)慣選擇操作系統(tǒng),在我的環(huán)境里,我是用freebsd做為MFS元數(shù)據(jù)的運(yùn)行平臺。GNU源碼,在各種類unix平臺的安裝都基本一致。
(一) 安裝元數(shù)據(jù)服務(wù)
2、解包 tar zxvf mfs-1.5.12.tar.gz
3、切換目錄 cd mfs-1.5.12
4、創(chuàng)建用戶 useradd mfs –s /sbin/nologin
5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、編譯安裝 make ; make install
(二) 配置元數(shù)據(jù)服務(wù)
元數(shù)據(jù)服務(wù)器的配置文件是mfsmaster.cfg,我在安裝MFS時指定了前綴,因此這個文件的位置在/usr/local/mfs/etc/mfsmaster.cfg.我們打開這個配置文件,看看都有哪些內(nèi)容:

盡管每行都被注釋掉了,但它們卻是配置文件的默認(rèn)值,要改變這些值,需要取消注釋,然后明確指定其取值。接下來說明一下其中一些項(xiàng)目的含義。
◆ LOCK_FILE = /var/run/mfs/mfsmaster.pid 文件鎖所在的位置,它的功能是避免啟動多次啟動同一個守護(hù)進(jìn)程。由于系統(tǒng)中本來不存在目錄 /var/run/mfs,因此需要手動創(chuàng)建 mkdir /var/run/mfs,然后更改其屬主 chown –R mfs:mfs /var/run/mfs 這樣MFS 服務(wù)就能對這個目錄有創(chuàng)建/寫入 mfsmaster.pid 文件的權(quán)限了。
◆ DATA_PATH = /usr/local/mfs/var/mfs 數(shù)據(jù)存放路徑,只元數(shù)據(jù)的存放路徑。那么這些數(shù)據(jù)都包括哪些呢?進(jìn)目錄看看,大致分3種類型的文件:
這些文件也同樣要存儲在其他數(shù)據(jù)存儲服務(wù)器的相關(guān)目錄。
◆ MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver,即元數(shù)據(jù)服務(wù)器使用9420這個監(jiān)聽端口來接受數(shù)據(jù)存儲服務(wù)器chunkserver端的連接。
◆ MATOCU_LISTEN_PORT = 9421 元數(shù)據(jù)服務(wù)器在9421端口監(jiān)聽,用以接受客戶端對MFS進(jìn)行遠(yuǎn)程掛接(客戶端以mfsmount掛接MFS)
◆ 其他部分看字面意思都不難理解。還有幾個與時間有關(guān)的數(shù)值,其單位是秒。
這個配置文件,不必做修改就能工作了。
(一) 元數(shù)據(jù)服務(wù)器master啟動
元數(shù)據(jù)服務(wù)器可以單獨(dú)啟動,即使沒有任何數(shù)據(jù)存儲服務(wù)器(chunkserver)也是能正常工作的,因此當(dāng)我們安裝配置完MFS后,即可啟動它。執(zhí)行命令 /usr/local/mfs/sbin/mfsmaster start ,如果沒有意外,元數(shù)據(jù)庫服務(wù)器就應(yīng)該作為一個守護(hù)進(jìn)程運(yùn)行起來。現(xiàn)在我們可以通過3個方面來檢查一下MFS master的運(yùn)行狀況:
(四)、關(guān)閉元數(shù)據(jù)服務(wù)器
關(guān)閉元數(shù)據(jù)服務(wù)器,務(wù)必使用 /usr/local/mfs/sbin/mfsmaster –s 這種方式,如果直接使用kill殺死進(jìn)程,將導(dǎo)致下次啟動時出現(xiàn)找不到相關(guān)文件,而不能正常啟動服務(wù)器。這個一定要謹(jǐn)慎。當(dāng)然,如果發(fā)生了這個事情,還是可以通過 mfsmetastore 來恢復(fù)的。
數(shù)據(jù)存儲chunkserver服務(wù)器的安裝配置
數(shù)據(jù)存儲服務(wù)器chunkserver也是可以運(yùn)行在各種類unix平臺的,因此不再多說。一個MFS環(huán)境到底能集群多少服務(wù)器,作者的說法是上PB容量,個人建議,最好3臺以上;并且專門用來做存儲,不要把它跟master搞到一個機(jī)器(理論上沒問題,實(shí)現(xiàn)也是可以的,但這不是一個好策略)。因?yàn)槊總€數(shù)據(jù)存儲服務(wù)器的安裝和配置都是相同的,所以只需按照一個服務(wù)器的操作就可以了。
(一)、安裝數(shù)據(jù)存儲服務(wù)器 chunkserver
2、解包 tar zxvf mfs-1.5.12.tar.gz
3、切換目錄 cd mfs-1.5.12
4、創(chuàng)建用戶 useradd mfs –s /sbin/nologin
5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、編譯安裝 make ; make install
(二)配置數(shù)據(jù)存儲服務(wù)器chunkserver
數(shù)據(jù)存儲服務(wù)器有2個配置服務(wù)器需要修改,一個是主配置文件 mfschunkserver.cfg ,另一個配置文件是 mfshdd.cfg。每個服務(wù)器用來分配給 MFS使用的空間最好是一個單獨(dú)的硬盤或者一個raid卷,最低要求是一個分區(qū)。作者舉的例子是創(chuàng)建一個大文件,然后掛接在本地,這不好,只能用來做實(shí)驗(yàn)了。
1、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:
這個配置文件里,沒有注釋符號“#”就是被修改過的項(xiàng)了,接下來是里面某些項(xiàng)的含義說明:
◆ MASTER_HOST = 192.168.0.19 元數(shù)據(jù)服務(wù)器的名稱或地址,可以是主機(jī)名,也可以是ip地址,只要數(shù)據(jù)存儲服務(wù)器能訪問到元數(shù)據(jù)服務(wù)器就行。
◆ LOCK_FILE = /var/run/mfs/mfschunkserver.pid 與元數(shù)據(jù)服務(wù)器master的處理完全相同.
◆ CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,這個監(jiān)聽端口用于與其它數(shù)據(jù)存儲服務(wù)器間的連接,通常是數(shù)據(jù)復(fù)制。
2、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。在我的服務(wù)器上,只有一個1T的SATA硬盤,分了一個800G容量的分區(qū)來做為MFS存儲服務(wù)的組成部分。為了使mfs擁有寫目錄的權(quán)限,需要修改目錄的屬主。我的服務(wù)器的分區(qū)掛接點(diǎn)是 /data , 用 chown –R mfs:mfs /data 把屬主改變。因?yàn)槲业拿總€服務(wù)器只需貢獻(xiàn)一個分區(qū)做為MFS,因此配置文件只需要如下一行內(nèi)容就可以了:
(四) 關(guān)閉數(shù)據(jù)存儲服務(wù)器
跟元數(shù)據(jù)服務(wù)器master相似,執(zhí)行命令 /usr/local/mfs/sbin/mfschunkserver –s , chunkserver服務(wù)就停下來了。為了使系統(tǒng)重啟過程能自動啟動chunkserver 服務(wù),可以通過在/etc/rc.local文件追加行 /usr/local/mfs/sbin/mfschunkserver start 來達(dá)到這個目的(master的自動重啟處理也可同樣處理)。
本文出自 “sery” 博客,請務(wù)必保留此出處http://sery.blog.51cto.com/10037/147756
posted on 2010-02-08 09:11
小王 閱讀(939)
評論(0) 編輯 收藏 引用 所屬分類:
分布式系統(tǒng)