分布式文件系統MFS(moosefs)實現存儲共享
由于用戶數量的不斷攀升,我對訪問量大的應用實現了可擴展、高可靠的集群部署(即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)這種分布式文件系統來作為我的共享存儲服務器。為什么要選它呢?我來說說我的一些看法:
1、 實施起來簡單。MFS的安裝、部署、配置相對于其他幾種工具來說,要簡單和容易得多。看看lustre 700多頁的pdf文檔,讓人頭昏吧。
2、 不停服務擴容。MFS框架做好后,隨時增加服務器擴充容量;擴充和減少容量皆不會影響現有的服務。注:hadoop也實現了這個功能。
3、 恢復服務容易。除了MFS本身具備高可用特性外,手動恢復服務也是非常快捷的,原因參照第1條。
4、 我在實驗過程中得到作者的幫助,這讓我很是感激。
MFS文件系統的組成
1、 元數據服務器。在整個體系中負責管理管理文件系統,目前MFS只支持一個元數據服務器master,這是一個單點故障,需要一個性能穩定的服務器來充當。希望今后MFS能支持多個master服務器,進一步提高系統的可靠性。
2、 數據存儲服務器chunkserver。真正存儲用戶數據的服務器。存儲文件時,首先把文件分成塊,然后這些塊在數據服務器chunkserver之間復制(復制份數可以手工指定,建議設置副本數為3)。數據服務器可以是多個,并且數量越多,可使用的“磁盤空間”越大,可靠性也越高。
3、 客戶端。使用MFS文件系統來存儲和訪問的主機稱為MFS的客戶端,成功掛接MFS文件系統以后,就可以像以前使用NFS一樣共享這個虛擬性的存儲了。
元數據服務器安裝和配置
元數據服務器可以是linux,也可以是unix,你可以根據自己的使用習慣選擇操作系統,在我的環境里,我是用freebsd做為MFS元數據的運行平臺。GNU源碼,在各種類unix平臺的安裝都基本一致。
(一) 安裝元數據服務
2、解包 tar zxvf mfs-1.5.12.tar.gz
3、切換目錄 cd mfs-1.5.12
4、創建用戶 useradd mfs –s /sbin/nologin
5、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、編譯安裝 make ; make install
(二) 配置元數據服務
元數據服務器的配置文件是mfsmaster.cfg,我在安裝MFS時指定了前綴,因此這個文件的位置在/usr/local/mfs/etc/mfsmaster.cfg.我們打開這個配置文件,看看都有哪些內容:

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