分布式文件系統之MooseFS----介紹


       前一段公司因為nfs存儲的問題,做了一段時間的調研。最終雖然有nfs高可用方案(nfs+drbd+heartbeat),但是在nfs故障切換的時候會出現 2 分鍾左右的延時。這樣子。。。就開始了對分布式文件系統的調研選型。也就是這樣,有了本系列的博文。

       針對 MooseFS 預計會有 3 篇博文,分為介紹、部署、深入。本篇博文主要介紹 MooseFS 。

 

 

一、簡述

1、介紹

       MooseFS是一個具備冗余容錯功能的分布式網絡文件系統,它將數據分別存放在多個物理服務器或單獨磁盤或分區上,確保一份數據有多個備份副本。對於訪問的客戶端或者用戶來說,整個分布式網絡文件系統集群看起來就像一個資源一樣。從其對文件操作的情況看,MooseFS就相當於一個類UNIX文件系統:

       1、mfs是一個分層的目錄樹結構

       2、存儲支持POSIX標准的文件屬性(權限,最后訪問和修改時間)

       3、支持特殊的文件,如:塊設備,字符設備,管道和套接字,鏈接文件(符號鏈接和硬鏈接)

       4、支持基於IP地址和密碼的方式訪問文件系統

 

2、特性

       1、高可靠性,每一份數據可以設置多個副本(多份數據),並可以存儲在不同的主機上

       2、高可擴展性,可以很輕松的通過增加主機磁盤容量或增加主機數量來動態擴展整個文件系統的存儲量

       3、高可容錯性,我們可以通過對mfs進行系統設置,實現當數據文件被刪除后的一段時間內,依然存放於主機的回收站中,以備誤刪恢復數據

       4、高數據一致性,即便文件被寫入/訪問時,我們依然可以完成對文件的一致性快照

 

3、優缺點

優點:

       1、由於MFS是基於GPL發布的,因此完全免費,並且開發和社區都很活躍,資料也非常豐富

       2、輕量、易部署、易配置、易維護

       3、通用文件系統,不需要修改上層應用就可以使用(那些需要專門 API 的DFS確實有點麻煩)
       4、擴容成本低、支持在線擴容,不影響業務,體系架構可伸縮性極強(官方的case可以擴到70台了!)
       5、體系架構高可用,所有組件無單點故障
       6、文件對象高可用,可設置任意的文件冗余程度(提供比 Raid 10 更高的冗余級別)

       7、提供系統負載,將數據讀寫分配到所有的服務器上,加速讀寫性能

       8、提供諸多高級特性,比如類似Windows的回收站功能、類似JAVA語言的GC(垃圾回收)、快照功能等

       9、MooseFS 是 Google Filesystem 的一個 c 實現

       10、自帶 Web Gui 的監控接口

       11、提高隨機讀或寫效率和海量小文件的讀寫效率(有待進一步證明)

缺點:

       1、Master Server 本身的性能瓶頸。MFS的主備架構情況類似於MySQL的主從復制,從可以擴展,主卻不容易擴展。短期的對策就是按照業務來做切分。

       2、隨着MFS體系架構中存儲文件的總數上升,Master Server對內存的需求量會不斷增大(MFS把文件系統的結構緩存到 Maset Server 的內存中)。根據官方提供的數據,8g對應2500kw的文件數,2億文件就得64GB內存。短期的對策也是按照業務來做切分。

       3、Master server的單點解決方案的健壯性。目前官方自帶的是把數據信息從Master Server同步到Metalogger Server上,Master Server一旦出問題Metalogger Server可以恢復升級為Master Server,但是需要恢復時間。目前,也可以通過第三方的高可用方案(heartbeat+drbd+moosefs)來解決 Master Server 的單點問題。

       4、Metalogger Server 復制元數據的間隔時間較長(可調整)

 

4、應用場景

      談及MooseFS的應用場景,其實就是去談分布式文件系統的應用場景。

      1、大規模高並發的數據存儲及訪問(小文件、大文件),TFS適合小文件(<1M)

      2、大規模的數據處理,如日志分析

 

5、使用現狀

       針對 MooseFS 在全球的使用情況,我在國內的一篇論文上挖了一張圖。圖片如下,在該圖中標記為馴鹿的就是 Moosefs 的使用者所在區域。從圖中可以看出,它在中國、歐洲以及北美都擁有了大量的用戶,正是有了廣泛的用戶基礎,才能使得mfs特性能夠快速的迭代和進步。

wKioL1S-G8mi7IpqAALojpL2UZ0261.jpg

MooseFS官方的使用情況鏈接:http://www.moosefs.org/who-is-using-moosefs.html

 

二、組成

1、架構圖

 

wKioL1SulSPRwhESAAInaVmZaEE454.jpg

       整個架構中,主要有四個組件,分別是管理服務器 Master Server、備份服務器Metalogger Server、數據存儲服務器 Chunk Server 和 客戶端 Client。其中,管理服務器 Master Server 負責所有數據存儲服務器的數據存儲管理,響應客戶端文件的讀寫請求,收回文件空間以及恢復文件,多存儲節點之間的文件復制;元數據日志服務器 Metalogger Server,對 Master Server  服務器的變化日志文件進行備份,changelog_ml.*.mfs 是備份文件的類型,當 Master Server 出現故障時替換其繼續工作,避免 Master Server 的單點故障導致分布式文件系統的不能正常運行;數據存儲服務器chunkserver,服從 Master Server 的安排,定期向 Master Server 發送自己的狀態信息,除此之外,還能向客戶提供數據存儲空間,能夠向客戶傳輸數據;客戶端 Client,通過 FUSE 內核接口掛載到數據存儲服務器上,在客戶端看來使用數據存儲服務器上的文件系統和使用本地Unix文件系統是一樣的。

       下面再針對這4個組件進行更詳細的介紹!

 

2、四個組件

 

組件名稱 組件作用

管理服務器

Managing Server

簡稱Master Server 

這個組件的角色是管理整個mfs文件系統的主服務器,除了分發用戶請求外,還用來存儲整個文件系統中的每個數據文件的metadata信息,metadata(元數據)信息包括文件(也可以是目錄、socket、管道、設備等)的大小、屬性、文件位置路徑等,以及文件空間的回收和恢復,控制多chunk server節點的數據拷貝。很類似lvs負載均衡主服務器,不同的是lvs僅僅根據算法分發請求,而master根據內存里的metadata信息來分發請求。這個master只能有一台處於激活工作的狀態。

元數據備份服務器

Metadata backup servers

簡稱metalogger Server

這個組件的作用是備份管理服務器master的變化的metadata信息日志文件,文件類型為changelog_ml.*.mfs,以便於在主服務器出現問題的時候,可以經過簡單的操作即可讓新主服務器進行工作。這很類似Mysql的主從同步,只不過他不像mysql從庫那樣在本地應用數據,而只是接收主服務器上文件寫入時記錄的文件相關的metadata信息。這個backup可以有一台或多台,它很類似於lvs從負載均衡器。

數據存儲服務器組

Data Servers

簡稱Chunk Servers

這個組件就是真正存放數據文件實體的服務器了,這個角色可以有多台不同的物理服務器或不同的磁盤及分區來充當,當配置數據的副本多於一份時,劇寫入到一個數據服務器后,會根據算法在其他數據服務器上進行同步備份。這個很像lvs集群的rs節點。

客戶機服務器組

Client

這個組件就是掛載並使用mfs文件系統的客戶端,當讀寫文件時,客戶端首先連接主管理服務器獲取數據的metadata信息,然后根據得到的metadata信息,訪問數據服務器讀取或寫入文件實體。mfs客戶端通過FUSE mechanism實現掛載MFS文件系統的。因此,只要系統支持FUSE,就可以作為客戶端訪問MFS整個文件系統。所謂的客戶端並不是網站用戶,而是前端訪問文件系統的應用服務器,如web

 

三、原理

    MooseFS是一個文件系統,因此其最主要的工作就是文件的讀寫流程,即 MooseFS的主要的兩大工作過程。

1、MooseFS的讀文件流程:

       首先要了解的是它的讀過程。如下圖所示:

wKiom1SulMLzDCnlAAEwaJH26ME157.jpg

 

       圖中 Master Server用三角形表示,Chunk Server用圓形表示,Client 用方形表示。整個讀過程有以下四個步驟:

        1、首先client客戶端訪問主服務器master,獲取文件實體的位置等相關信息

        2、主服務器master查詢緩存記錄,把文件實體的位置等相關信息發給client客戶端

        3、Client客戶端根據拿到的信息去訪問對應的存儲實體數據的服務器(data servers或者 chunk servers)

        4、存儲實體數據的服務器(data servers或者 chunk servers)把對應的數據返回給Client客戶端

        從上圖,我們還可以看出,當多個MFS客戶端讀數據的時候,master服務器充當路由為這些客戶端分發指路的作用,而數據的返回時由不同的數據服務器直接返回給請求的客戶端,這樣的模式可以極大的減輕主服務器的系統及網絡瓶頸,增加了整個系統的吞吐,很像LVS的DR模式的負載均衡的分發和數據傳輸的情況。

 

2、MooseFS的寫文件流程:

 

 

           相對於讀文件,MooseFS的寫文件流程較為復雜,如圖所示:

wKioL1SulZrAKHD6AAGZ1raekhw377.jpg

 

         圖中 Master Server用三角形表示,Chunk Server用圓形表示,Client 用方形表示。

         整個寫過程要分為下面八個步驟:

        1、Client客戶端訪問主服務器master,請求寫入數據

        2、主服務器master查詢緩存記錄,如果是新文件,則會聯系后面的數據服務器創建對應的chunk對象准備存放文件。

        3、數據服務器返回創建對應的chunk對象成功給主服務器

        4、主服務器master把文件實體的位置等相關信息發給client客戶端。

        5、Client客戶端訪問對應的數據服務器寫數據

        6、數據服務器之間進行數據同步,互相確認成功

        7、數據服務器返回成功寫入信息給Client客戶端

        8、Client客戶端回報給主服務器master寫入結束


OK!

以上就是 MooseFS 的簡單介紹,希望能對51博友有所幫助!

 

本文出自 “Not Only Linux” 博客,請務必保留此出處http://nolinux.blog.51cto.com/4824967/1600890

 

       上篇博文對 MooseFS 的結構,組件和特性做了相關介紹。那么,本篇博文自然就是如何去部署實施 MooseFS 這樣一個分布式文件系統嘍。

       廢話不多說,下面就是整個部署流程!

 

1、架構規划

       由於在整個MooseFS的架構中,默認是一台 Master,一台 Metalogger ,三台 Chunk Servers。因此,在本次實施規划當中,我們就使用5台虛擬機來進行整個架構的實施部署。

       其中 IP地址 的規划情況如下:

元數據服務器     mfs-master-1             172.16.100.2 備份服務器       mfs-metalogger           172.16.100.4 數據存儲服務器   mfs-chunkserver-1        172.16.100.5 數據存儲服務器   mfs-chunkserver-2        172.16.100.6 數據存儲服務器   mfs-chunkserver-3        172.16.100.7

       由於這次測試空閑服務器不夠,因此采用了虛擬機進行測試(好蛋疼)。但是在實際生產環境中,針對每個組件的服務器選型問題,還是必須要注意的。這里提供如下幾條建議:

 

1、Master Server

       由於 Master Server 控制着整個 MooseFS 中的各個組件,並且負責對外提供服務,因此我們一定需要保證 Master Server 處於非常穩定的狀態。比如,針對 Master Server采用雙電源雙路配置,多塊磁盤使用RAID1或RAID10,進行冗余。

       前面也提到,Master Server 將所有訪問的元數據信息都放在內存當中,提供用戶訪問。因此,當文件數量增加的時候,內存使用量也會增加。根據官方的數據,100萬個文件chunk信息,大概需要300M的內存空間來進行。對於磁盤來講,Master Server 對磁盤的使用量不是很大,這個取決於所用的文件和chunk塊的數目(記錄在主元數據文件)以及對文件作出操作的數量(記錄在元數據更改日志),一般情況下 20G 可以用來存儲信息 2500 萬個文件變更記錄長達50小時。由此看來,作為Master Server 內存量夠大才是重中之重。

2、Metalogger Server

       在 MooseFS 的設計中,雖然 Metalogger Server 只是用來收集 MooseFS 主服務器的元數據(文件更改的信息的變化)的備份,對硬件的要求不應該高於主服務器的備份。但是需要注意的是,如果在Master Server沒有做高可用的情況下,主服務器宕機之后,我們是需要啟用Metalogger Server 來頂替主服務器的。因此,從這方面考慮,Metalogger Server 至少也是和 Master Server 的配置相同的,這點切記!

3、Chunk Server

       針對 Chunk Server,它是真正存儲數據的載體。因此,我們對它的要求就簡單粗暴了很多,只要保障硬盤的性能即可。如果是普通的業務,可以選擇多塊盤做RAID5即可,當然RAID0或RAID10都是可以的。

       需要注意的是,由於 MooseFS 的默認負載均衡算法的問題,我建議所有 Chunk Server 的磁盤大小保持一致。這樣子,我們才能保證 MooseFS 在使用過程中,各個 Chunk 節點的數據使用量是大致一致的。否則,磁盤容量大的 Chunk Server 使用量會加大,而磁盤容量小的 Chunk Server 的使用量會變小。切記,切記!

       當然,如果公司員工有能力的話,也可以對 MooseFS 的負載均衡算法中每次對carry 變量的增加算法這一部分進行改進,來避免默認算法的缺點,使存儲數據能夠均衡分布在各個 Chunk Server 上。

 

 

2、部署 Master Server

 

1、編譯參數介紹

       我們已經知道 MooseFS是由 4 個組件組成的,但是 MooseFS 提供的安裝包卻只有一個,因此針對每個組件的不同設置,都需要我們在編譯之前的配置階段進行配置,比如安裝 Master Server 的時候,我們需要使用 --disable-mfschunkserver和--disable-mfsmount參數;安裝 Chunk Server 的時候,我們需要使用 --disable-mfsmaster 參數;安裝 Client 時,我們需要使用--disable-mfsmaster和--disable-mfschunkserver參數;如果是安裝 Metalogger Server ,我們使用和安裝 Master Server時的參數一樣即可。

       下面,在部署 Master Server 之前,在詳細介紹下 MooseFS 安裝包的幾個關鍵的配置參數:

--disable-mfsmaster                  # 不創建成管理服務器(用於純節點的安裝) --disable-mfschunkserver             # 不創建成數據存儲chunkserver服務器  --disable-mfsmount                   # 不創建mfsmount和mfstools(如果用開發包安裝,他們會被默認創建的)    --enable-mfsmount                    # 確定安裝mfsmount和mfstools(如果      --prefix=DIRECTORY                   # 鎖定安裝目錄(默認是/usr/local)   --sysconfdir=DIRECTORY               # 選擇配置文件目錄(默認是${prefix}/etc))    --localstatedir=DIRECTORY            # 選擇變量數據目錄(默認是${prefix}/var,MFS元數據被存儲在mfs的子目錄下,默認是${prefix}/var/mfs )      --with-default-user                  # 運行守護進程的用戶,如果配置文件中沒有設定用戶,默認為nobody用戶    --with-default-group                 # 運行守護進程的用戶組,如果配置文件中沒有設定用戶組,默認為nogroup用戶組

 

 

2、安裝 Master Server

 

       當我們安裝主服務器mfs master時,由於我們的目的是安裝主服務器,因此在配置過程中(./configure),可以選擇加參數取消安裝 Chunk server(使用--disable-mfschunkserver)以及 MooseFS 客戶端(使用--disable-mfsmount)。

       下面,我倆出安裝 MooseFS 主控服務器 Master Server 的詳細步驟:

[root@mfs-master-1 ~]# yum install zlib-devel -y [root@mfs-master-1 ~]# groupadd -g 1000 mfs [root@mfs-master-1 ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs [root@mfs-master-1 ~]# cd /usr/local/src [root@mfs-master-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz [root@mfs-master-1 src]# tar zxf mfs-1.6.27-5.tar.gz [root@mfs-master-1 src]# cd mfs-1.6.27 [root@mfs-master-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount [root@mfs-master-1 mfs-1.6.27]# make [root@mfs-master-1 mfs-1.6.27]# make install [root@mfs-master-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs [root@mfs-master-1 mfs-1.6.27]# ll -d /usr/local/mfs lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27 [root@mfs-master-1 mfs-1.6.27]# cd

這里再補一份快捷操作命令:

yum install zlib-devel -y
groupadd -g 1000 mfs;useradd -u 1000 -g mfs mfs -s /sbin/nologin cd /usr/local/src && wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz tar zxf mfs-1.6.27-5.tar.gz && cd mfs-1.6.27 ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount make && make install ln -s /usr/local/mfs-1.6.27 /usr/local/mfs ll -d /usr/local/mfs  cd

       以上就是 MooseFS 的 Master Server 的安裝過程。Master Server 安裝成功以后,會在安裝目錄 /usr/local/mfs-1.6.27 下生成幾個目錄文件。其中etc目錄為mfs配置文件目錄,里面有很多默認配置文件樣例(結尾后綴為*.dist),后續我們將借用這些樣例作為 MFS 服務器的目標配置文件。

       這里來看下每個目錄的用途:

[root@mfs-master-1 ~]# ll /usr/local/mfs/ 
total 16 
drwxr-xr-x. 3 root root 4096 Dec 29 00:10 etc                   # MFS 的配置文件目錄,里面放了很多模板文件 
drwxr-xr-x. 2 root root 4096 Dec 29 00:10 sbin                 # MFS 命令路徑

drwxr-xr-x. 4 root root 4096 Dec 29 00:10 share               # MFS 幫助文件目錄
drwxr-xr-x. 3 root root 4096 Dec 29 00:10 var                   # MFS 數據及日志目錄,例如:metadata 數據

提示:etc和var需要備份。

注意:

       etc和var目錄里面存放的是配置文件和MFS的數據結構信息,因此請及時做好備份,防止災難損毀。后面做了 Master Server雙機之后,就可以解決這個問題。

 

3、配置 Master Server

 

       上面簡單看了 MooseFS 的目錄結構,其中 Master Server 的配置文件是位於/MooseFS根目錄/etc 目錄下。在該目錄下有很多模板配置文件,包括 Master,Metalogger、ChunkServer等,有關 Master 的配置文件主要有兩個,一個是 mfsmaster.cfg,另一個是 mfsexports.cfg。其中,mfsmaster.cfg 是主配置文件,mfsexports.cfg 用來指定那些客戶端主機可以遠程掛載 MooseFS 文件系統以及賦予掛載客戶端什么樣的訪問權限。

       現在,我們去掉 Master 相關的兩個配置文件的注釋。

       需要注意的是,這里一定要使用 cp,而不是 mv。這樣,在操作之前保留原文件,一方面方便更改后對比變化,另一方面也修改出錯后的回滾。

       下面列出配置步驟以及每個配置文件的詳解!

[root@mfs-master-1 ~]# /usr/local/mfs/etc/mfs [root@mfs-master-1 mfs]# cp mfsexports.cfg.dist mfsexports.cfg  [root@mfs-master-1 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg 這里我們先來看下主配置文件mfsmaster.cfg [root@mfs-master-1 ~]# cat /usr/local/mfs/etc/mfs/mfsmaster.cfg  # WORKING_USER = mfs         # 運行 master server 的用戶 # WORKING_GROUP = mfs        # 運行 master server 的組 # SYSLOG_IDENT = mfsmaster   # 是master server在syslog中的標識,也就是說明這是由master serve產生的 # LOCK_MEMORY = 0            # 是否執行mlockall()以避免mfsmaster 進程溢出(默認為0) # NICE_LEVEL = -19           # 運行的優先級(如果可以默認是 -19; 注意: 進程必須是用root啟動) # EXPORTS_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfsexports.cfg   # 被掛載目錄及其權限控制文件的存放路徑 # TOPOLOGY_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfstopology.cfg # mfstopology.cfg文件的存放路徑 # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs # 數據存放路徑,此目錄下大致有三類文件,changelog,sessions和stats; # BACK_LOGS = 50             # metadata的改變log文件數目(默認是 50) # BACK_META_KEEP_PREVIOUS = 1     # metadata的默認保存份數(默認為1) # REPLICATIONS_DELAY_INIT = 300   # 延遲復制的時間(默認是300s) # REPLICATIONS_DELAY_DISCONNECT = 3600   # chunkserver斷開的復制延遲(默認是3600) # MATOML_LISTEN_HOST = *          #  metalogger監聽的IP地址(默認是*,代表任何IP) # MATOML_LISTEN_PORT = 9419       # metalogger監聽的端口地址(默認是9419) # MATOML_LOG_PRESERVE_SECONDS = 600 # MATOCS_LISTEN_HOST = *          # 用於chunkserver連接的IP地址(默認是*,代表任何IP) # MATOCS_LISTEN_PORT = 9420       # 用於chunkserver連接的端口地址(默認是9420) # MATOCL_LISTEN_HOST = *          # 用於客戶端掛接連接的IP地址(默認是*,代表任何IP) # MATOCL_LISTEN_PORT = 9421       # 用於客戶端掛接連接的端口地址(默認是9421) # CHUNKS_LOOP_MAX_CPS = 100000    # chunks的最大回環頻率(默認是:100000秒) # CHUNKS_LOOP_MIN_TIME = 300      # chunks的最小回環頻率(默認是:300秒) # CHUNKS_SOFT_DEL_LIMIT = 10      # 一個chunkserver中soft最大的可刪除數量為10個 # CHUNKS_HARD_DEL_LIMIT = 25      # 一個chuankserver中hard最大的可刪除數量為25個 # CHUNKS_WRITE_REP_LIMIT = 2      # 在一個循環里復制到一個chunkserver的最大chunk數目(默認是1) # CHUNKS_READ_REP_LIMIT = 10      # 在一個循環里從一個chunkserver復制的最大chunk數目(默認是5) # ACCEPTABLE_DIFFERENCE = 0.1     # 每個chunkserver上空間使用率的最大區別(默認為0.01即1%) # SESSION_SUSTAIN_TIME = 86400    # 客戶端會話超時時間為86400秒,即1天 # REJECT_OLD_CLIENTS = 0          # 彈出低於1.6.0的客戶端掛接(0或1,默認是0) # deprecated:  # CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead  # LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile

下面附上官方地址:http://moosefs.com/Content/Downloads/moosefs-users-manual.pdf

       該配置文件默認全部都為注釋。mfs官方默認這樣規定的,每一個注釋的配置都是mfs此項配置的默認值。其實,我們linux中很多配置文件的設計風格都是這樣子的,比如sshd_config.如果打算更改這些配置文件中某些項的參數,只需要取消注釋,並且更改對應的參數即可。

       針對master來講,mfsmaster.cfg的默認配置無需更改即可投入使用。

       下面,就是權限控制配置文件mfsexports.cfg。

       該配置文件制定了哪些客戶端可以遠程掛接MFS文件系統,以及授予掛載客戶端什么樣的訪問權限。例如,我們制定只有172.16.0.0/24網段的主機可以讀寫模式訪問MFS的整個共享結構資源(/)。在配置文件mfsexports.cfg中寫入如下信息即可。

[root@mfs-master-1 ~]# cat /usr/local/mfs/etc/mfs/mfsexports.cfg *            /         rw,alldirs,mapall=mfs:mfs,password=redhat *            .          rw          # 如果需要使用 moosefs的回收站功能,請開啟此行。如果不使用,關閉即可

這里,我列出該文件的配置規范:

       mfsexports.cfg 文件中,每一個條目就是一個配置規則,而每一個條目又分為三個部分,其中第一部分是mfs客戶端的ip地址或地址范圍,第二部分是被掛載的目錄,第三個部分用來設置mfs客戶端可以擁有的訪問權限。

第一部分:mfs客戶端的ip地址或地址范圍

地址可以指定的幾種表現形式:

    *                  所有的 I P 地址
    n.n.n.n            單個 I P 地址
    n.n.n.n/b          I P 網絡地址/位數掩碼     n.n.n.n/m.m.m.m    I P 網絡地址/子網掩碼     f.f.f.f-t.t.t.t    I P 段

 

第二部分:被掛載的目錄

 

目錄部分需要注意兩點:

    /       標識MooseFS根
    .       表示MFSMETA文件系統

 

第三部分:設置mfs客戶端可以擁有的訪問權限

 

權限部分:

    ro        只讀模式共享     rw        讀寫模式共享     alldirs   允許掛載任何指定的子目錄     maproot   映射為root,還是指定的用戶     password  指定客戶端密碼

       OK,以上兩個配置文件配置完畢之后,我們還需要注意一個文件。在 Master Server 首次安裝之后,會在 /usr/local/mfs/var/mfs/ 目錄下生成一個名為 metadata.mfs.empty 的元數據metadata文件,該文件默認是為空的。(當你整個MooseFS配置好之后,它就有數據了)

       Master Server 的運行必須有metadata.mfs,而這個文件就是從metadata.mfs.empty更名而來的。當然,這個更名操作需要我們自己手動來完成。操作如下:

[root@mfs-master-1 mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

 

4、啟動 Master Server

 

       在 MooseFS 的架構中,Master Server 是不依附於其它幾個組件的,它可以單獨啟動。但是需要注意,其它組件必須要等 Master Server 起來之后才能啟動!切記!!!

       在通過上面的簡單配置之后,我們就可以啟動 Master Server 了!

      下面列出啟動和檢查過程。

[root@mfs-master-1 mfs]# /usr/local/mfs/sbin/mfsmaster start    # 啟動mfs主服務器 working directory: /usr/local/mfs-1.6.27/var/mfs  lockfile created and locked  initializing mfsmaster modules ...  loading sessions ... file not found  if it is not fresh installation then you have to restart all active mounts !!!  exports file has been loaded  mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - using defaults  loading metadata ...  create new empty filesystemmetadata file has been loaded  no charts data file - initializing empty charts  master <-> metaloggers module: listen on *:9419  master <-> chunkservers module: listen on *:9420  main master server module: listen on *:9421  mfsmaster daemon initialized properly

下面進行檢查,針對 Master Server 的啟動檢查主要有3個方面,第一看進程,第二看端口,第三看日志

[root@mfs-master-1 ~]# ps -ef|grep mfs                            # 查看進程是否正常 mfs 28867 19:44 ? 00:00:00 /etc/ha.d/resource.d/mfsmaster start  root 29087 26249 19:48 pts/00:00:00 grep mfs [root@mfs-master-1 ~]# netstat -lnt |grep 94                    # 查看端口看是否起來 tcp 0.0.0.0:9419 0.0.0.0:* LISTEN  tcp 0.0.0.0:9420 0.0.0.0:* LISTEN  tcp 0.0.0.0:9421 0.0.0.0:* LISTEN

開啟 master 的日志情況

[root@mfs-master-1 ~]# tailf /var/log/messages     # 觀察 Master Server 啟動時的日志變化 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: set gid to 1000 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: set uid to 1000 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: sessions have been loaded Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: exports file has been loaded Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - network topology not defined Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: stats file has been loaded Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: master <-> metaloggers module: listen on *:9419 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: master <-> chunkservers module: listen on *:9420 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: main master server module: listen on *:9421 Dec 31 19:52:10 mfs-master-1 mfsmaster[29112]: open files limit: 5000

 

5、停止 Master Server

 

         Master Server 服務和其它普通服務不一樣,它千萬不能使用 kill -9 去強制殺掉進程。每次非正常關閉服務,都需要使用 MooseFS 自帶的恢復工具進行數據恢復,非常悲劇。因此,安全的關閉 Master Server 是非常重要。

[root@mfs-master-1 ~]# /usr/local/mfs/sbin/mfsmaster stop  sending SIGTERM to lock owner (pid:29112) waiting for termination ... terminated [root@mfs-master-1 ~]# tailf /var/log/messages    # 觀察 Master Server 關閉時的日志變化 Dec 31 19:53:16 mfs-master-1 mfsmaster[29113]: set gid to 1000 Dec 31 19:53:16 mfs-master-1 mfsmaster[29113]: set uid to 1000 Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: terminate signal received Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: main master server moduleclosing *:9421 Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: master <-> chunkservers moduleclosing *:9420 Dec 31 19:53:16 mfs-master-1 mfsmaster[29112]: master <-> metaloggers moduleclosing *:9419

 

6、掃尾操作

 

a、配置環境變量

        為了方便操作 MooseFS,我們需要把他的sbin目錄加入到系統的PATH變量中去。

[root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile  [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile  [root@mfs-metalogger ~]# tail -2 /etc/profile # add moosefs to the path variable PATH=/usr/local/mfs/sbin/:$PATH [root@mfs-metalogger ~]# source /etc/profile

b、配置開機自啟動

        開機自啟動的目的,這里就不多解釋了。

[root@mfs-metalogger ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local  [root@mfs-metalogger ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local  [root@mfs-metalogger ~]# tail -2 /etc/rc.local  # Configure the metalogger service startup  /usr/local/mfs/sbin/mfsmetalogger start

以上,就是 Master Server 部署的全部操作。

 

 

3、部署 Metalogger Server

1、安裝 Metalogger Server

 

       前面已經介紹了,Metalogger Server 是 Master Server 的備份服務器。因此,Metalogger Server 的安裝步驟和 Master Server 的安裝步驟相同。並且,最好使用和 Master Server 配置一樣的服務器來做 Metalogger Server。這樣,一旦主服務器master宕機失效,我們只要導入備份信息changelogs到元數據文件,備份服務器可直接接替故障的master繼續提供服務。

       這里僅列出安裝步驟:

[root@mfs-metalogger-1 ~]# yum install zlib-devel -y [root@mfs-metalogger-1 ~]# groupadd -g 1000 mfs [root@mfs-metalogger-1 ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin [root@mfs-metalogger-1 ~]# cd /usr/local/src [root@mfs-metalogger-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz [root@mfs-metalogger-1 src]# tar zxf mfs-1.6.27-5.tar.gz [root@mfs-metalogger-1 src]# cd mfs-1.6.27 [root@mfs-metalogger-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount [root@mfs-metalogger-1 mfs-1.6.27]# make [root@mfs-metalogger-1 mfs-1.6.27]# make install [root@mfs-metalogger-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs  [root@mfs-metalogger-1 mfs-1.6.27]# ll -d /usr/local/mfs  lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27 [root@mfs-metalogger-1 mfs-1.6.27]# cd

 

2、配置 Metalogger Server

 

       雖然,Metalogger Server 的安裝步驟和 Master Server 一樣,但是配置文件肯定是有所差別的。這里將介紹,如何配置Metalogger Server。

[root@mfs-metalogger ~]# cd /usr/local/mfs/etc/mfs/  [root@mfs-metalogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg [root@mfs-metalogger mfs]# ll mfsmetalogger.cfg  -rw-r--r--. 1 root root 423 Dec 28 23:55 mfsmetalogger.cfg [root@mfs-metalogger mfs]# cat mfsmetalogger.cfg  # WORKING_USER = mfs  # WORKING_GROUP = mfs  # SYSLOG_IDENT = mfsmetalogger  # LOCK_MEMORY = 0  # NICE_LEVEL = -19  # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs  # BACK_LOGS = 50  # BACK_META_KEEP_PREVIOUS = 3  # META_DOWNLOAD_FREQ = 24           # 元數據備份文件下載請求頻率,默認為24小時,即每個一天從元數據服務器下載一個metadata.mfs.back文件。當元數據服務器關閉或者出故障時,metadata.mfs.back文件將小時,那么要恢復整個mfs,則需要從metalogger服務器取得該文件。請注意該文件,它與日志文件在一起,才能夠恢復整個被損壞的分布式文件系統。 # MASTER_RECONNECTION_DELAY = 5  MASTER_HOST = 172.16.100.1       # 這里是需要連接的 mfs master server 的地址 #MASTER_PORT = 9419                      # 這里是需要連接的 mfs master server 的端口 # MASTER_TIMEOUT = 60  # deprecated, to be removed in MooseFS 1.7  # LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

       這個文件中需要修改的是MASTER_HOST變量,這個變量的值是 Master Server 的 IP 地址。如果對 Master Server 做了 host 解析也可以不改任何內容。

       這里需要將它修改為如下參數:

MASTER_HOST = 172.16.100.1       # 這里是需要連接的 mfs master server 的地址

 

3、啟動 Metalogger Server

 

啟動 Metalogger Server 之前,一定要確保 Master server 的服務是正常啟動的。

[root@mfs-metalogger ~]# nc -w 172.16.100.2 -z 9419   # 從輸出可以看到,Master Server 已經正常啟動 Connection to 172.16.100.2 9419 port [tcp/*] succeeded! [root@mfs-metalogger ~]# /usr/local/mfs/sbin/mfsmetalogger start  # 啟動 Metalogger Server working directory: /usr/local/mfs-1.6.27/var/mfs  lockfile created and locked  initializing mfsmetalogger modules ...  mfsmetalogger daemon initialized properly [root@mfs-metalogger ~]# netstat -lantp|grep metalogger     # 查看進程  tcp 172.16.100.4:50193 172.16.100.1:9419 ESTABLISHED 17201/mfsmetalogger [root@mfs-metalogger ~]# tailf /var/log/messages        # 開啟 Metalogger Server 時的日志情況 Dec 30 16:44:25 localhost mfsmetalogger[17275]: set gid to 1000 Dec 30 16:44:25 localhost mfsmetalogger[17275]: set uid to 1000 Dec 30 16:44:26 localhost mfsmetalogger[17275]: connecting ... Dec 30 16:44:26 localhost mfsmetalogger[17275]: open files limit: 5000 Dec 30 16:44:26 localhost mfsmetalogger[17275]: connected to Master Dec 30 16:44:26 localhost mfsmetalogger[17275]: metadata downloaded 2461B/0.002353s (1.046 MB/s) Dec 30 16:44:26 localhost mfsmetalogger[17275]: changelog_0 downloaded 0B/0.000001s (0.000 MB/s) Dec 30 16:44:26 localhost mfsmetalogger[17275]: changelog_1 downloaded 0B/0.000001s (0.000 MB/s) Dec 30 16:44:26 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.001027s (0.533 MB/s) Dec 30 16:44:28 localhost kernel: nfs: server 172.16.100.3 not responding, timed out 去 Master Server 上進行檢查: [root@mfs-master-1 ~]# netstat -lantp|grep 9419  tcp 0.0.0.0:9419 0.0.0.0:* LISTEN 25665/mfsmaster  tcp 172.16.100.1:9419 172.16.100.4:50194 ESTABLISHED 25665/mfsmaster

       我們可以看到Metalogger Server已經和Master Server的9419端口建立了長連接

       另外,在上面的日志中,我們可以看到他在下載一些文件,這些文件就是之前介紹過的Master Server上的文件,我們可以在以下目錄看到這些文件。

[root@mfs-metalogger ~]# ll /usr/local/mfs/var/mfs/ 
total 8 
-rw-r-----. 1 mfs mfs 0 Dec 30 16:26 changelog_ml_back.0.mfs  -rw-r-----. 1 mfs mfs 0 Dec 30 16:26 changelog_ml_back.1.mfs  -rw-r-----. 1 mfs mfs 2461 Dec 30 16:26 metadata_ml.mfs.back  -rw-r-----. 1 mfs mfs 547 Dec 30 16:27 sessions_ml.mfs

最后,在貼出 Metalogger Server 運行時的日志輸出情況:

[root@mfs-metalogger ~]# tailf /var/log/messages  Dec 30 16:45:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000842s (0.650 MB/s) Dec 30 16:46:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000428s (1.278 MB/s) Dec 30 16:47:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000551s (0.993 MB/s) Dec 30 16:48:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.001091s (0.501 MB/s) Dec 30 16:49:00 localhost mfsmetalogger[17275]: sessions downloaded 547B/0.000471s (1.161 MB/s)

 

4、關閉 Metalogger Server

[root@mfs-metalogger ~]# /usr/local/mfs/sbin/mfsmetalogger stop  sending SIGTERM to lock owner (pid:17201)  waiting for termination ... terminated [root@mfs-metalogger ~]# tailf /var/log/messages          # 停止 Metalogger Server 時的日志情況    Dec 30 16:43:42 localhost mfsmetalogger[17272]: set gid to 1000 Dec 30 16:43:42 localhost mfsmetalogger[17272]: set uid to 1000 Dec 30 16:43:42 localhost mfsmetalogger[17271]: terminate signal received 此時 Master Server 上會有提示: [root@mfs-master-1 ~]# tailf /var/log/messages Dec 31 10:56:28 mfs-master-1 mfsmaster[25665]: connection with ML(172.16.100.4) has been closed by peer

 

5、掃尾操作

a、配置全局變量

[root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile  [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile  [root@mfs-metalogger ~]# tail -2 /etc/profile  # add moosefs to the path variable  PATH=/usr/local/mfs/sbin/:$PATH [root@mfs-metalogger ~]# source /etc/profile

b、配置開機自啟動

[root@mfs-metalogger ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local  [root@mfs-metalogger ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local  [root@mfs-metalogger ~]# tail -2 /etc/rc.local  # Configure the metalogger service startup  /usr/local/mfs/sbin/mfsmetalogger start

 

 

4、部署 Chunk Servers

1、安裝 Chunk Servers

 

       數據存儲服務器也被稱為 Chunk Server。在 MooseFS 文件系統中,每個 Chunk Server 的配置是完全相同的。因此,這里我們僅以一台 Chunk Server 的安裝為例進行演示,其它兩台的安裝步驟這里不再復述。

[root@mfs-chunkserver-1 ~]# yum install zlib-devel -y [root@mfs-chunkserver-1 ~]# groupadd -g 1000 mfs [root@mfs-chunkserver-1 ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin [root@mfs-chunkserver-1 ~]# cd /usr/local/src [root@mfs-chunkserver-1 src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz [root@mfs-chunkserver-1 src]# tar zxf mfs-1.6.27-5.tar.gz [root@mfs-chunkserver-1 src]# cd mfs-1.6.27 [root@mfs-chunkserver-1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfsmaster --disable-mfsmount [root@mfs-chunkserver-1 mfs-1.6.27]# make [root@mfs-chunkserver-1 mfs-1.6.27]# make install [root@mfs-chunkserver-1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs  [root@mfs-chunkserver-1 mfs-1.6.27]# ll -d /usr/local/mfs  lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27 [root@mfs-chunkserver-1 mfs-1.6.27]# cd

 

2、配置 Chunk Servers

 

       配置 Chunk Server 需要兩個配置文件,分別是 mfschunkserver.cfg 和 mfshdd.cfg 。其中,mfschunkserver.cfg 是主配置文件,而 mfshdd.cfg 是服務器用來分配給 MFS 使用的空間的配置文件,最好是一個單獨的磁盤或者一個raid卷,最低要求是一個分區。

       在每個mfs chunk server 上的配置及操作如下:

[root@mfs-chunkserver-1 ~]# cd /usr/local/mfs/etc/mfs/  [root@mfs-chunkserver-1 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg  [root@mfs-chunkserver-1 mfs]# cp mfshdd.cfg.dist mfshdd.cfg [root@mfs-chunkserver-1 mfs]# grep -v '^$' mfschunkserver.cfg  # WORKING_USER = mfs  # WORKING_GROUP = mfs  # SYSLOG_IDENT = mfschunkserver  # LOCK_MEMORY = 0  # NICE_LEVEL = -19  # DATA_PATH = /usr/local/mfs-1.6.27/var/mfs  # MASTER_RECONNECTION_DELAY = 5  # BIND_HOST = *  # MASTER_HOST = mfsmaster  # MASTER_PORT = 9420  # MASTER_TIMEOUT = 60  CSSERV_LISTEN_HOST = 172.16.100.1    # 該地址為 Master Server 的IP地址或者主機名 CSSERV_LISTEN_PORT = 9422   # 該端口用於與其它chunk server之間的通信,主要是數據復制 # HDD_CONF_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfshdd.cfg  # HDD_TEST_FREQ = 10  # deprecated, to be removed in MooseFS 1.7  # LOCK_FILE = /var/run/mfs/mfschunkserver.lock  # BACK_LOGS = 50  # CSSERV_TIMEOUT = 5

       在常規的使用過程中,我們只需要修改一個 CSSERV_LISTEN_HOST參數,將該參數設置為我們 Master Server 的IP地址或者主機名即可。

配置mfshdd.cfg主配置文件

       mfshdd.cfg該文件用來設置你將 Chunk Server 的哪個目錄共享出去給 Master Server進行管理。當然,雖然這里填寫的是共享的目錄,但是這個目錄后面最好是一個單獨的分區。分區的相關操作,這里就不占篇幅了。

[root@mfs-chunkserver-1 ~]# cat /usr/local/mfs/etc/mfs/mfshdd.cfg  /mfsdata

 

3、啟動 Chunk Server

 

       和 Metalogger Server 一樣,在啟動 chunk servers之前,必須要先確保 Master Server 的服務是正常啟動的,否則啟動會報錯。

[root@mfs-chunkserver-1 ~]# nc -w 172.16.100.2 -z 9420  Connection to 172.16.100.2 9420 port [tcp/*] succeeded! [root@mfs-chunkserver-1 ~]# /usr/local/mfs/sbin/mfschunkserver start  working directory: /usr/local/mfs-1.6.27/var/mfs  lockfile created and locked  initializing mfschunkserver modules ...  hdd space manager: path to scan: /mfsdata/  hdd space manager: start background hdd scanning (searching for available chunks)  main server module: listen on *:9422  stats file has been loaded  mfschunkserver daemon initialized properly [root@mfs-chunkserver-1 ~]# netstat -lantp|grep 9420  tcp 172.16.100.5:59486 172.16.100.1:9420 ESTABLISHED 7825/mfschunkserver [root@mfs-chunkserver-1 ~]# tailf /var/log/messages            # 啟動 Chunk Server 時的日志變化 Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: set gid to 1000 Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: set uid to 1000 Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: hdd space manager: folder /mfsdata/ will be scanned Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: main server module: listen on *:9422 Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: connecting ... Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: stats file has been loaded Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: open files limit: 10000 Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: connected to Master Dec 30 19:05:34 mfs-chunkserver-1 mfschunkserver[7825]: scanning folder /mfsdata/: complete (0s) Dec 30 19:05:43 mfs-chunkserver-1 mfschunkserver[7825]: testing chunk: /mfsdata/D0/chunk_00000000000000D0_00000001.mfs Dec 30 19:05:53 mfs-chunkserver-1 mfschunkserver[7825]: testing chunk: /mfsdata/CD/chunk_00000000000000CD_00000001.mfs

查看 Master Server 上的變化:

[root@mfs-master-1 ~]# tailf /var/log/messages       # 啟動 Chunk Server 時的Master Server 的日志變化 Dec 31 11:31:47 mfs-master-1 mfsmaster[26053]: chunkserver register begin (packet version: 5) ip: 172.16.100.5, port: 9422 Dec 31 11:31:47 mfs-master-1 mfsmaster[26053]: chunkserver register end (packet version: 5) ip: 172.16.100.5, port: 9422, usedspace: 0 (0.00 GiB), totalspace: 0 (0.00 GiB) [root@mfs-master-1 ~]# netstat -lantp|grep 9420  tcp 0.0.0.0:9420 0.0.0.0:* LISTEN 26053/mfsmaster  tcp 172.16.100.1:9420 172.16.100.5:59486 ESTABLISHED 26053/mfsmaster  tcp 172.16.100.1:9420 172.16.100.7:41816 ESTABLISHED 26053/mfsmaster  tcp 172.16.100.1:9420 172.16.100.6:39261 ESTABLISHED 26053/mfsmaster

 

4、關閉 Chunk Server

[root@mfs-chunkserver-1 ~]# /usr/local/mfs/sbin/mfschunkserver stop  sending SIGTERM to lock owner (pid:7068)  waiting for termination ... terminated [root@mfs-chunkserver-1 ~]# tailf /var/log/messages Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7884]: set gid to 1000 Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7884]: set uid to 1000 Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7859]: terminate signal received Dec 30 19:11:08 mfs-chunkserver-1 mfschunkserver[7859]: closing *:9422 [root@mfs-master-1 ~]# tailf /var/log/messages Dec 31 11:35:16 mfs-master-1 mfsmaster[26053]: connection with CS(172.16.100.5) has been closed by peer Dec 31 11:35:16 mfs-master-1 mfsmaster[26053]: chunkserver disconnected ip: 172.16.100.5, port: 9422, usedspace: 1186041856 (1.10 GiB), totalspace: 8022986752 (7.47 GiB)

 

 

5、掃尾操作

a、配置全局變量

[root@mfs-chunkserver-1 ~]# echo '# add moosefs to the path variable' >> /etc/profile  [root@mfs-chunkserver-1 ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile  [root@mfs-chunkserver-1 ~]# tail -2 /etc/profile  # add moosefs to the path variable  PATH=/usr/local/mfs/sbin/:$PATH [root@mfs-chunkserver-1 ~]# source /etc/profile

b、配置開機自啟動

[root@mfs-chunkserver-1 ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local  [root@mfs-chunkserver-1 ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local  [root@mfs-chunkserver-1 ~]#tail -2 /etc/rc.local  # Configure the metalogger service startup  /usr/local/mfs/sbin/mfsmetalogger start

 

 

5、部署 Client

1、安裝 FUSE

       由於 MFS 文件系統客戶端的掛載依賴於 FUSE 工具,因此需要先安裝 FUSE 工具。

官方注解:

mfsmount requires FUSE to work; FUSE is available on several operating systems: Linux, FreeBSD, OpenSolaris and MacOS X, with the following notes:

  • In case of Linux a kernel module with API 7.8 or later is required (it can be checked with dmesgcommand - after loading kernel module there should be a line fuse init (API version 7.8)). It is available in fuse package 2.6.0 (or later) or in Linux kernel 2.6.20 (or later). Due to some minor bugs, the newer module is recommended (fuse 2.7.2 or Linux 2.6.24, although fuse 2.7.x standalone doesn't contain getattr/write race condition fix).

  • In case of FreeBSD we recommed using fuse-freebsd (https://github.com/glk/fuse-freebsd) which is a successor to fuse4bsd.

  • For MacOSX we recommend using OSXFUSE (http://osxfuse.github.com/), which is a successor to MacFUSE and has been tested on MacOSX 10.6 and 10.7.

因此,安裝之前,我們需要先查看內核支持情況。如果已經支持了,並且版本也達到要求之后,就無須安裝FUSE了。

[root@mfs-client ~]# lsmod|grep fuse  fuse 73530 2

如果你的系統版本內核中沒有支持FUSE或者版本不夠,那么可以使用下面的方式進行安裝,這里推薦使用 2.8.5 版本。

a、安裝fuse

[root@mfs-client src]# wget http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz [root@mfs-client src]# tar zxf fuse-2.9.3.tar.gz  [root@mfs-client src]# cd fuse-2.9.3  [root@mfs-client fuse-2.9.3]# ls  [root@mfs-client fuse-2.9.3]# ./configure  [root@mfs-client fuse-2.9.3]# make && make install [root@mfs-client fuse-2.9.3]#cd ..

b、調整環境變量

[root@mfs-client src]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' > /etc/profile [root@mfs-client src]# tail -1 /etc/profile  export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

c、加載fuse模塊到內核並配置開機自啟

[root@mfs-client mfs-1.6.27]# lsmod |grep fuse  [root@mfs-client mfs-1.6.27]# modprobe fuse  [root@mfs-client mfs-1.6.27]# lsmod |grep fuse  fuse 73530 0  [root@mfs-client mfs-1.6.27]# echo 'modeprobe fuse' >> /etc/sysconfig/modules/fuse.modules  [root@mfs-client mfs-1.6.27]# cat /etc/sysconfig/modules/fuse.modules  modeprobe fuse  [root@mfs-client mfs-1.6.27]# chmod 755 /etc/sysconfig/modules/fuse.modules2、安裝 mfsmount [root@mfs-client ~]# yum install zlib-devel -y [root@mfs-client ~]# groupadd -g 1000 mfs [root@mfs-client ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin [root@mfs-client ~]# cd /usr/local/src [root@mfs-client src]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz [root@mfs-client src]# tar zxf mfs-1.6.27-5.tar.gz [root@mfs-client src]# cd mfs-1.6.27 [root@mfs-client mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver [root@mfs-client mfs-1.6.27]# make [root@mfs-client mfs-1.6.27]# make install [root@mfs-client mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs  [root@mfs-client mfs-1.6.27]# ll -d /usr/local/mfs  lrwxrwxrwx. 1 root root 21 Dec 28 23:28 /usr/local/mfs -> /usr/local/mfs-1.6.27 [root@mfs-client mfs-1.6.27]# ll /usr/local/mfs/  total 20  drwxr-xr-x. 2 root root 4096 Dec 28 16:41 bin            # bin 目錄下是客戶端的命令 drwxr-xr-x. 3 root root 4096 Dec 28 16:41 etc  drwxr-xr-x. 2 root root 4096 Dec 28 16:41 sbin  drwxr-xr-x. 4 root root 4096 Dec 28 16:41 share  drwxr-xr-x. 3 root root 4096 Dec 28 16:41 var

 

 

 

3、從客戶端上掛載mfs文件系統

 

a、創建數據目錄掛載點

[root@mfs-client mfs-1.6.27]# mkdir /mfsdata  [root@mfs-client mfs-1.6.27]# chown -R mfs.mfs /mfsdata  [root@mfs-client mfs-1.6.27]# ll -d /mfsdata  drwxr-xr-x. 2 mfs mfs 4096 Dec 28 16:44 /mfsdata

b、掛載mfs文件系統

由於我們之前設置了需要密碼驗證才能掛載成功,因此這里會提示我們需要輸入密碼

[root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2  mfsmaster register error: Password is needed [root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -p       # 使用 -p 后面,下面會提示輸入密碼  MFS Password:  mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to root:root  [root@mfs-client mfs-1.6.27]# df -h  Filesystem Size Used Avail Use% Mounted on  /dev/sda3 18G 949M 16G 6% /  tmpfs 491M 491M 0% /dev/shm  /dev/sda1 194M 28M 157M 15% /boot  172.16.100.1:9421 22G 22G 0% /mfsdata

 

4、掛載后本地寫入文件測試

 

寫入測試前,我們查看下主和備服務器的元數據文件及變化日志文件。

[root@mfs-client mfs-1.6.27]# cd /mfsdata/ [root@mfs-client mfsdata]# touch a  [root@mfs-client mfsdata]# echo redhat > a  [root@mfs-client mfsdata]# cat a  redhat  [root@mfs-client mfsdata]# rm -rf a  [root@mfs-client mfsdata]# ls

在客戶端寫入完成之后,我們可以來觀察一下 Master Server 端的變化

[root@mfs-master-1 mfs]# cat changelog.0.mfs  1: 1419799640|SESSION():2  2: 1419799701|SESSION():3  3: 1419799756|CREATE(1,a,f,420,1000,1000,0):2  4: 1419799756|ACQUIRE(2,3)  5: 1419799756|ATTR(2,420,1000,1000,1419803408,1419803408)  6: 1419799759|LENGTH(2,0)  7: 1419799759|WRITE(2,0,1):1  8: 1419799759|LENGTH(2,7)  9: 1419799759|UNLOCK(1)  10: 1419799760|ACCESS(2)  11: 1419799761|RELEASE(2,3)  12: 1419799762|UNLINK(1,a):2  13: 1419799763|ACCESS(1)

我們再來查看一下,Metalogger Server 端的變化:

[root@mfs-metalogger ~]# cd /usr/local/mfs/var/mfs/ [root@mfs-metalogger mfs]# cat changelog_ml.1.mfs  0: 1419799516|SESSION():1  1: 1419799640|SESSION():2  2: 1419799701|SESSION():3  3: 1419799756|CREATE(1,a,f,420,1000,1000,0):2  4: 1419799756|ACQUIRE(2,3)  5: 1419799756|ATTR(2,420,1000,1000,1419803408,1419803408)  6: 1419799759|LENGTH(2,0)  7: 1419799759|WRITE(2,0,1):1  8: 1419799759|LENGTH(2,7)  9: 1419799759|UNLOCK(1)  10: 1419799760|ACCESS(2)  11: 1419799761|RELEASE(2,3)  12: 1419799762|UNLINK(1,a):2  13: 1419799763|ACCESS(1)


5、掃尾操作

 

a、配置環境變量

[root@mfs-metalogger ~]# echo '# add moosefs to the path variable' >> /etc/profile  [root@mfs-metalogger ~]# echo 'PATH=/usr/local/mfs/bin/:$PATH' >> /etc/profile  [root@mfs-metalogger ~]# tail -2 /etc/profile  # add moosefs to the path variable  PATH=/usr/local/mfs/bin/:$PATH [root@mfs-metalogger ~]# source /etc/profile

b、配置客戶端開機自動掛載

       如果需要Client能夠在開機的時候自動掛載,我們就需要自動把密碼傳遞進去。mfsmount自帶了-o參數,我們可以把密碼配置在其后來實現開機自動掛載。

[root@mfs-client mfs-1.6.27]# umount /mfsdata/  [root@mfs-client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat  mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to root:root  [root@mfs-client mfs-1.6.27]# df -h  Filesystem Size Used Avail Use% Mounted on  /dev/sda3 18G 949M 16G 6% /  tmpfs 491M 0 491M 0% /dev/shm  /dev/sda1 194M 28M 157M 15% /boot  172.16.100.1:9421 22G 0 22G 0% /mfsdata [root@mfs-client mfs-1.6.27]# echo 'Moosefs boot automatically mount' >> /etc/rc.local [root@mfs-client mfs-1.6.27]# echo '/usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat' >> /etc/rc.local [root@mfs-client mfs-1.6.27]# tailf -2 /etc/rc.local Moosefs boot automatically mount /usr/local/mfs/bin/mfsmount /mfsdata -H 172.16.100.2 -o mfspassword=redhat

 

OK!

       以上就是 MooseFS 的部署流程,希望能對51博友有所幫助。針對 MooseFS 更深一步的研究,比如 MooseFS的特性,MooseFS 的日常管理維護以及 MooseFS 的監控和災難恢復等等,我將會放在下一篇博文中去說。

本文出自 “Not Only Linux” 博客,請務必保留此出處http://nolinux.blog.51cto.com/4824967/1601385

 

https://my.oschina.net/guol/blog/40604

https://www.oschina.net/p/moosefs

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM