截錄MooseFS官網一小段說明 http://www.moosefs.org/
其中提到mfs 具高可用HA容錯特性與容量動態擴充優點,且將提升用戶端存取效能
Near 之前曾發表過Windows DFS 實驗文章(有興趣讀者可回頭查尋),Near將此次主題設定
以MFS(moosefs)架構下實現Linux OS 分散檔案系統架構,先Share Near 設計拓樸
LAB設計環境設計簡易說明:(請參考下圖),
Fedora 15 * 2 : 擔任 MFS master 與 Metalogger Role
CentOS 5.6*2 擔任兩台資料儲存Server,越多台擴充效能與資料分散儲存力較具彈性
Ubuntu 11.04*1 擔任 MFS Client 端: 我們將利用此台Server掛載MFS Server 目錄
後段將測試Chunk1(.171)掛點後,是否不影響Ubuntu 存取mfs 掛載目錄

本文LAB實作步驟參考官方方式 於Fedora 與 CentOS 上預先安裝RpmForge Reposity
當然您也可以用源碼編譯方式安裝Moosefs套件(截錄官網一小段說明)
MooseFS packages for RHEL/CentOS 3/4/5/6
(maintained by RPMforge team) are available from the
RPMforge repository. Instructions for configuring RPMforge are here:
http://wiki.centos.org/AdditionalResources/Repositories/RPMForge
[套件預先安裝之前置作業準備] #接下來Lab 內容說明時將不再贅述
shell> yum -y install mfs mfs-cgi
# mfs master 與 metalogger 及 chunk server 與cgi web 監控mfs 運行套件
#Ubuntu 11.04(MFS Client端): 請預先安裝 fuse-utils pkg-config 套件
>apt-get install fuse-utils pkg-config
接者請至 http://zlib.net/ 官網下載 zlib-1.2.5.tar.gz 套件編譯安裝(安裝moosefs必要元件)
>wget http://zlib.net/zlib-1.2.5.tar.gz #若未裝此zlib套件,等會安裝moosefs將不成功
>tar zxvf zlib-1.2.5.tar.gz
>cd zlib-1.2.5
#至官網下載最新穩定版本moosefs,編譯安裝於ubuntu11.04
> useradd mfs -s /usr/sbin/nologin #預先建立一個mfs帳號供mfs程式使用
> tar zxvf mfs-1.6.20-2.tar.gz #截至本日官網發表最新版本
> cd mfs-1.6.20-2
> ./configure #我們指定mfs主程式安裝於/usr/local/mfs 目錄下
>./configure --prefix=/usr/local/mfs --with-default-user=mfs \
--with-default-group=mfs --enable-mfsmount
> make && make install
所有主機安裝套件皆安裝OK後將接下來進入正式主題介紹
首先檢查一下套件安裝成果

mooseFS 主要組態檔皆位於 /etc/mfs/ 目錄下,
然後當我們安裝完成後,在此目錄下預先建立幾個範例檔案,我們可以直接copy修改
範本檔有以下幾個 # 標示粉紅色字樣檔案為master必需
mfsmaster.cfg.dist
mfsmetalogger.cfg.dist
mfsexports.cfg.dist
mfshdd.cfg.dist
mfschunkserver.cfg.dist
於/var/mfs 底下尚有 metadata.mfs.empty
(A)
編輯Master 主要設定檔 /etc/mfs/mfsmaster.cfg
> cd /etc/mfs
> cp mfsmaster.cfg.dist mfsmaster.cfg
> cp mfsexports.cfg.dist mfsexports.cfg
> vi mfsmaster.cfg #組態內容展現如下
裡面其中幾個參數說明
EXPORTS_FILENAME = /etc/mfs/mfsexports.cfg
#類似NFS,我們同樣需編寫分享內容與權限配置(稍後說明)
DATA_PATH=/var/mfs
#指定存放Master Role Log 變動檔案異動資料,建議排成備份此資料夾
下圖指示Master Role主機與其他Role溝通所LISTEN Port 預設如下
master to metaloggle: 使用9419
master to chunkserver: 使用9420
master to client: 使用9421
接下來我們要配置/etc/mfs/mfsexports.cfg #我們將配置存取網路或主機與權限
#下圖中我們配置讓192.168.0.193(ubuntu1104)可以掛載mfs 之區,具RW權限,與掛載成功後,
映射為root權限身份
> vi /etc/mfs/mfsexports.cfg
192.168.0.193/24 / rw,alldirs,maproot=0
> cd /var/mfs
> cp metadata.mfs.empty metadat.mfs
所有上述配置皆OK後,我們現在可以著手啟動master (mfs1) mfsmaster service
> /etc/init.d/mfsmaster start
> chkconfig mfsmaster on

檢視master (mfs1) 啟動情況
> tail -f /var/log/messages # 下圖中找不到metalogger主機與chunkserver
待我們回頭組態好metalogger回頭再觀看log
> netstat -an | grep '94' #查看9419,9420,9421 幾個port 已經處於listen 狀態

Near's TIP: 本人預先在mfs1主機之/etc/hosts 寫下幾筆紀錄對應如下
#將有助於我們等會使用mfs web bui 界面檢視
192.168.0.192 metalogger
192.168.0.171 chunksrevr1
192.168.0.172 chunkserver2
192.168.0.193 ubuntu1104
另外請在非master主機上之 /etc/hosts 檔案中加入一筆record
192.168.0.191 mfsmaster
[ Metalogger 組態 : 192.168.0.192(mfs2)
> cd /etc/mfs #metalogger 僅需配置mfsmetalogger.cfg 組態
> cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
> vi mfsmetalogger.cfg
#參數設定前方註解符號表示默認預設設定,若需更改請移除參數後修改設定值
# MASTER_HOST = mfsmaster #我們前幾步驟已將mfsmaster指定mfs1(.191)
# MASTER_PORT = 9419 #master listen metalogger port 為9419

# BACK_LOGS = 50 #存放日誌個數,超過50自動輪替
# META_DOWNLOAD_FREQ = 24 #間隔24hr下載從master備份檔案

所有上述配置皆OK後,我們現在可以著手啟動metalogger(mfs2) mfsmetalogger service
> /etc/init.d/mfsmetalogger start
> chkconfig mfsmetalogger on
檢視切換master (mfs1) Listen情況
> tail -f /var/log/messages
# 下圖中已經找到metalogger主機但尚未正確設定chunkserver
待我們回頭組態好chunkserver回頭再觀看log變化

[ Chunkserver 組態 : 192.168.0.171(node1) 與 192.168.0.172(node2)]
> cd /etc/mfs #chunkserver 僅需配置mfschunkserver.cfg & mfshdd.cfg 組態
> cp mfschunkserver.cfg.dist mfschunkserver.cfg
> cp mfshdd.cfg.dist mfshdd.cfg
> vi mfschunkserver.cfg
修改參數
MASTER_HOST = mfsmaster #指定master 位置
HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg #組態mount 配置

> vi mfshdd.cfg #本例指定存放Data磁區為/var/hit
> mkdir -p /var/hit #建立目錄使用權限
> chown -R daemon.daemon /var/hit

所有上述配置皆OK後,我們現在可以著手啟動mfschunkserver(node1) mfschunkserver service
> /etc/init.d/mfschunkserver start
> chkconfig mfschunkserver on
#請在node2 做與node1 一樣組配置,這此本人習慣用copy方式,將設定檔複製至node2(較效率)
下圖中我們切換回mfs1(master),再次查尋/var/log/messages

接下來我們也把chunkserver2.172 (node2)也on 上線,來看
從下圖中,我們可以看見.172 (node2) 也成功上線了

[ MFS-Clinet 組態 : 192.168.0.193(ubuntu1104) ]
由於Near在本文最前方[摘要說明]已經提到預先安裝好 moosefs client 套件
我們來撿視套件安裝成果,相關套件皆已安裝

mfs-client 角色很簡單,就如同我們Mount NFS 相差無異,簡易介紹使用如下
ubuntu1104> mkdir -p /mnt/hits #建立一個mount 目錄掛載空間
ubuntu1104> /usr/local/mfs/bin/mfsmount /mnt/hits -H mfsmaster
#上述指令使用mfsmount 指令將mfs 空間 掛載於本地端/mnt/hits 上
下圖中,我們使用df -h 查看,目前主機掛載情況,發現MFS分區已成功Mount
可用Size: 為Chunkserver1 & Chunkserver 2 兩台主機可用剩餘空間之加總
Near 建議Chunk1 & Chunk 2 規劃設計: 硬碟空間各自規劃獨立分割一個目錄並掛載
Ex: 在Chunk上加入一顆80G 硬碟,建立Mount目錄: /mnt/chunkser1,然後新增磁區
(假設為sdb),將其格式化後(ext3)後 再mount 到mnt/chunkser1 較佳(方便Quota管理)

[ MFSCgiserv_Moosefs_Web bui 監控界面]
mooseFS 內附Cgi網頁監控程式; mfscgiserv
預設未Enabled, 請切換至mfs1 ,啟動apache 然後執行該command: mfscgiserv
Then 我們打開Broswer觀察: 以本Lab而言為: http://192.168.0.191:9425
下圖中我們點選Mounts- tab : 可查看目前Client 端掛載情形

下圖中我們點選Servers- tab : 可監控各台主機連繫狀況,Chunk Server 使用情形..等數據

下圖中我們點選Exports- tab : 可查看master(mfs1): mfsexports.cfg 之組態內容

下圖中我們點選Master Charts- tab : 可查看master(mfs1): 硬體使用率 之相關數據圖表

下圖中我們點選Server Charts- tab : 可查看ChunkServer: 硬體使用率 之相關數據圖表

測試當chunk1(node1) 斷線時,Client 是否不遺失Data &
Client 端是否會因此掛載連線中斷?
[情境說明]
確定Ubuntu 11.04 主機已成功掛載mfs 目錄 ,各台主機皆為健康運作中
停用mfschunkserver(node1) service
> /etc/init.d/mfschunksrver stop #下圖中確定chunk1 node 不在線上,只剩下chunk2 node

切換至Ubuntu 11.04 主機可以發現/mnt/hits 並未連線中斷,仍持續Work
Then
>touch /mnt/hits/king2 #產生一個新data測試
#下圖中存取讀寫仍ok...MooseFS 具 Fail Over HA功能(LAB目標達成)

[Lab 實作後感言]
Near: MooseFS 施作起來不難,但要構思如何發表在blog上花了不少時間
[Lab 操作時參考資料]
MooseFS 官方網站 http://www.moosefs.org/
田逸先生/MIS 實戰寶典