MFS分佈式文件系統

一、MooseFS


  • MooseFS是一個具有容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
  • Moose文件系統(MooseFS)是由Core Technology開發的開源,POSIX兼容的分佈式文件系統。MooseFS旨在爲數據中心提供容錯,高可用,高性能,可擴展的通用網絡分佈式文件系統。最初是專有軟件,它於2008年5月5日作爲開源向公衆發佈。
  • 目前有兩個版本的MooseFS:
    MooseFS - 根據GPLv2許可發佈,
    MooseFS專業版(MooseFS Pro) - 以二進制包形式的專有許可證發佈。
  • 官網地址:http://www.moosefs.com/

二、組成


MooseFS遵循與Fossil(文件系統),Google File System,Lustre或Ceph類似的設計原則。文件系統包括三個組件:

  • 元數據服務器(Master) - 維護和管理文件的位置(佈局),文件訪問和命名空間層次結構。當前版本的MooseFS支持多個元數據服務器和自動故障轉移。客戶端只與MDS通信以檢索/更新文件的佈局和屬性; 數據本身直接在客戶端和塊服務器之間傳輸。元數據服務器是用戶空間守護程序 ; 元數據保存在內存中,並且懶惰地存儲在本地磁盤上。
  • 元數據日誌服務器(Metalogger)- 紀錄數據的改動情況,定期從MDS中提取元數據以存儲它以進行備份。從版本1.6.5開始,這是一個可選功能。
  • 塊服務器(Chunk Server) - 存儲數據並可選地在它們之間進行復制。雖然可擴展性限制尚未發佈,但可能有很多。迄今爲止報告的最大集羣包括160臺服務器。[7] Chunk服務器也是一個用戶空間守護程序,它依賴於底層本地文件系統來管理實際存儲。
  • 客戶端 - 與Master和ChunkServer交談。MooseFS客戶端通過FUSE將文件系統掛載到用戶空間。

三、原理


MFS讀過程

  • 客戶端向Master發送讀請求
  • Master去緩存的數據庫(非MySQL)中搜索客戶端所需數據的位置,並告知客戶端(Chunk Server IP、Chunk編號)
  • 客戶端去指定Chunk Server的對應Chunk編號讀取數據
  • 客戶端通知Master讀取完畢

MFS寫過程

  • 客戶端向Master發送寫請求
  • Master通知Chunk Server(誰空閒,如空閒新建Chunk編號),找到後將知道的Chunk Server IP和編號告知客戶端
  • 客戶端向指定IP和編號存儲數據
  • 客戶端告知Master寫入完畢
  • Master通知Metalogger有新數據寫入(Matelogger紀錄新增加文件位置和對應Chunk Server),日誌記錄完畢後,連接關閉

四、功能


爲實現高可靠性和高性能,MooseFS提供以下功能:

  • 容錯 - MooseFS使用複製,可以跨塊服務器複製數據,每個文件/目錄設置複製比率(N)。如果(N-1)個副本失敗,則數據仍然可用。目前,MooseFS沒有提供任何其他容錯技術。因此,對於非常大的文件的容錯需要大量的空間--N *文件大小而不是文件大小+(N * stripeize),如RAID 4,RAID 5或RAID 6的情況。MooseFS版本4.x PRO將具有RAID6。
  • 條帶化 - 大文件分爲塊(最多64 兆字節),可以存儲在不同的塊服務器上,以實現更高的聚合帶寬。
  • 負載平衡 - MooseFS嘗試平等地使用存儲資源,當前算法似乎只考慮消耗的空間。
  • 安全性 - 除了經典的POSIX文件權限之外,自1.6版本發佈以來,MooseFS提供了一個簡單的,類似NFS的身份驗證 / 授權。
  • 相干快照 - 快速,低開銷的快照。
  • 透明的“垃圾桶” - 刪除的文件將保留一段可配置的時間。
  • 數據分層/存儲類 - 可以“標記”服務器,創建稱爲“存儲類”的標籤定義,並決定數據存儲在哪些類型的服務器上[8]
  • “項目”配額支持
  • POSIX鎖,flock鎖支持

四、數據存儲方式


  • 文件以chunk大小存儲,每chunk最大爲64M。小於64M的,該chunk的大小即爲該文件大小,超過64M的文件將被均分,每一份(chunk)的大小以不超過64M爲原則;文件可以有多份copy,即除原始文件以外,該文件還存儲的份數。當goal爲1時,表示只有一份copy,這份copy會被隨機存到一臺chunkserver上。當goal的數大於1時,每一份copy會被分別保存到其它chunkserver上。goal的大小不要超過chunkserver的數量,否則多出的copy,不會有chunkserver去存,goal設置再多實際上也就沒有意義的。copy的份數,一般設爲大於1份,這樣如果有一臺chunkserver壞掉後,至少還有一份copy,當這臺又被加進來後,會將失去的那份copy補回來,始終保持原有的copy數。而如果goal設爲1,那麼當存儲該copy的chunkserver壞掉,之後又重新加入回來,copy數將始終是0,不會恢復到之前的1個copy
  • chunkserver上的剩餘存儲空間要大於1GB,新的數據纔會被允許寫入,否則,你會看到No space left的提示
  • 多個chunker並不影響寫的速度,但是能加快讀的速度,在原來的基礎上增加一個chunker時,數據會自動同步到新增的chunker上以達到數據的平衡和均衡
  • MFS分佈式文件系統

五、部署MFS


環境準備

Role IP OS RPM
Master 192.168.0.21 CentOS6.7_64bit mfs-1.6.27-5.tar.gz
MetaLogger 192.168.0.22 CentOS6.7_64bit mfs-1.6.27-5.tar.gz
Chunk Server 1 192.168.0.23 CentOS6.7_64bit mfs-1.6.27-5.tar.gz
Chunk Server 2 192.168.0.24 CentOS6.7_64bit mfs-1.6.27-5.tar.gz
Client 192.168.0.25 CentOS6.7_64bit mfs-1.6.27-5.tar.gz fuse-2.9.2.tar.gz

搭建Master Server

a.安裝環境包並創建用戶

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.21
NETMASK=255.255.255.0
yum -y install zlib-devel    //安裝依賴環境
useradd -s /sbin/nologin mfs    //創建mfs運行用戶
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27    //解包
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount    //配置選項
make && make install    //編譯並安裝
cd /usr/local/mfs/
ll                         //看下安裝完成生成的目錄
drwxr-xr-x 2 root root 4096 Dec  3 11:24 bin         //客戶端工具
drwxr-xr-x 3 root root 4096 Dec  3 11:24 etc         //服務器的配置文件都放在該目錄中 
drwxr-xr-x 2 root root 4096 Dec  3 11:24 sbin       //服務端啓動程序。如:元數據服務器端程序 mfsmaster、數據存儲服務器端服務程序mfschunkserver 
drwxr-xr-x 4 root root 4096 Dec  3 11:24 share     //文檔 
drwxr-xr-x 3 root root 4096 Dec  3 11:24 var         //元數據目錄(可在配置文件中自定義到其他目錄)

b.複製文件

cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg    //Master配置文件
cp mfstopology.cfg.dist mfstopology.cfg    //輸出目錄配置文件
cp mfsexports.cfg.dist mfsexports.cfg    //元數據日誌
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
//首次安裝 master 時,會自動生成一個名爲 metadata.mfs.empty 的元數據文件 metadata,該文件是空的。MooseFS master 運必須有文件 metadata.mfs

c.啓動Master Server
master 會打開 9420 端口等待 chunkserver 數據存儲服務器連接

/usr/local/mfs/sbin/mfsmaster start    //啓動master服務
ps -ef | grep mfs
 ll /usr/local/mfs/var/mfs/         //查看生成的日誌文件
    -rw-r----- 1 mfs mfs     95 Dec 24 14:30 metadata.mfs
    -rw-r----- 1 mfs mfs     95 Dec 24 14:28 metadata.mfs.back.1
    -rw-r--r-- 1 mfs mfs      8 Dec 24 14:13 metadata.mfs.empty
    -rw-r----- 1 mfs mfs     10 Dec 24 14:28 sessions.mfs
    -rw-r----- 1 mfs mfs 762516 Dec 24 14:30 stats.mfs
/usr/local/mfs/sbin/mfsmaster stop     //服務的關閉方法
/usr/local/mfs/sbin/mfscgiserv start    //啓動web統計
IE --> 192.168.0.21:9425    //訪問web統計界面

搭建MetaLogger Server

a.安裝環境包並創建用戶

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.22
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
make && make install

b.複製文件

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
vim mfsmetalogger.cfg
MASTER_HOST = 192.168.0.21
//MASTER_HOST,這個文件中需要修改的是 MASTER_HOST 變量,這個變量的值是 MASTER SERVER 的 IP 地址 

c.啓動Metalogger Server

/usr/local/mfs/sbin/mfsmetalogger start
ps -ef | grep mfs

搭建Chunk Server 1

a.安裝環境包並創建用戶

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.23
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make && make install

b.複製文件

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.0.21
vim mfshdd.cfg
/data
//數據存放的目錄,一般爲一塊磁盤的掛載目錄
mkdir /data
chown -R mfs:mfs /data

c.啓動Chunk服務

/usr/local/mfs/sbin/mfschunkserver start
ps -ef | grep mfs

搭建Chunk Server2

a.安裝環境包並創建用戶

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.24
NETMASK=255.255.255.0
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
tar -zxvf mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make && make install

b.複製文件

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.0.21
vim mfshdd.cfg
/data
mkdir /data && chown mfs:mfs /data

c.啓動Chunk服務

/usr/local/mfs/sbin/mfschunkserver start
ps -ef | grep mfs

client掛載MFS文件系統

a.安裝fuse

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.25
NETMASK=255.255.255.0
tar -zxvf fuse-2.9.2.tar.gz -C /usr/src/ && cd /usr/src/fuse-2.9.2
./configure && make && make install
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile

b.安裝MFS客戶端

useradd -s /sbin/nologin mfs
tar -zxvf ~/mfs-1.6.27-5.tar.gz -C /usr/src/ && cd /usr/src/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
make && make install

c.掛載MFS文件系統

modprobe fuse      //加載fuse模塊到內核
vim /etc/rc.local    //開機自動加載
modprobe fuse
/usr/local/mfs/bin/mfsmount /media -H 192.168.0.21    //掛載
[root@mfs_client ~]# /usr/local/mfs/bin/mfssetgoal -r 1 -H /media/
//更改隨機copy的次數
[root@mfs_client ~]# /usr/local/mfs/bin/mfsgetgoal -H /media/
//查看當前copy的次數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章