MFS介紹node
MFS(MooseFS ) 是一個具備容錯功能的、高可用、可擴展的海量級分佈式文件系統。MFS 把數據分散在多臺服務器上,可是客戶看到的只是一個源。MFS 也像其餘類 UNIX 文件系統同樣,包含了層級結構和文件屬性,能夠建立特殊的文件(塊設備、字符設備、管道、套接字)、符號連接和硬連接。python
MFS 原理c++
( 1)MFS 文件系統組成web
1).元數據服務器(Master):在整個系統中負責管理文件系統,維護元數據。數據庫
2).元數據日誌服務器(MetaLogger):備份 Master 服務器的變化日誌文件,文件類型爲 changelog_ml.*.mfs 。當Master 服務器數據丟失或者損壞時, 能夠從日誌服務器中取得文件,進行恢復。vim
3).數據存儲服務器(Chunk Server):真正存儲數據的服務器。存儲文件時,會把文件分塊保存,並在數據庫服務器之間進行復制。數據服務器越多,能使用的容量就越大,可靠性就越高,性能也就越好。瀏覽器
4).客戶端(Client):能夠像掛載 NFS 同樣掛載 MFS 文件系統,其操做是相同的。服務器
(2)MFS 讀取數據的處理過程。網絡
1). 客戶端向元數據服務器發出讀請求。app
2). 元數據服務器把所需數據存放的位置( Chunk Server 的IP 地址和 Chunk 編號)告知客戶端。
3). 客戶端向己知的 Chunk Server 請求發送數據。
4). Chunk Server 向客戶端發送數據。
(3). MFS 寫入數據的處理過程。
1).客戶端向元數據服務器發出寫入請求。
2).元數據服務器與 Chunk Server 進行交互(只有當所需的分塊 Chunks 存在的 時候才進行這個交互),單元數據服務器只在某些服務器建立新的分塊 Chunks ,建立成功後由 Chunk Server 告知元數據服務器操做成功。
3). 元數據服務器告知客戶端,能夠在哪一個 Chunk Server 的哪些 Chunks 寫入數據。
4). 客戶的向指定的 Chunk Server 寫入數據。
5).該 Chunk Server 與其餘 Chunk Server 進行數據同步,同步成功後 Chunk Server 告知客戶端數據寫入成功。
6).客戶端告知元數據服務器本次寫入完畢。
實驗環境
本次實驗使用5臺服務器模擬搭建 MFS 文件系統,具體的拓撲圖以下所示:
實驗環境以下
主機 操做系統 IP 地址 主要軟件 Master Server Centos 7 192.168.91.147 mfs-1.6.27-5.tar.gz Metalogger Server Centos 7 192.168.91.149 mfs-1.6.27-5.tar.gz Chunk Server 1 Centos 7 192.168.91.148 mfs-1.6.27-5.tar.gz Chunk Server 2 Centos 7 192.168.91.150 mfs-1.6.27-5.tar.gz Client Centos 7 192.168.91.146 mfs-1.6.27-5.tar.gz
fuse-2.9.2.tar.gz
連接:https://pan.baidu.com/s/17N08A1JTAitFDJhJTJmwlQ (MFS軟件包)
提取碼:b7z9
(1)分別在這5臺服務器關閉防火牆,安裝編譯環境1.搭建Master server
[root@localhost ~]# yum install gcc gcc-c++ zlib-devel –y
[root@localhost ~]# useradd -s /sbin/nologin mfs
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
(2)建立用戶
[root@master Y2C]# useradd -s /sbin/nologin mfs //建立 mfs 用戶
(3)安裝源碼包
[root@master Y2C]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@master Y2C]# cd /opt/mfs-1.6.27/
[root@master mfs-1.6.27]# ./configure \
> --prefix=/usr/local/mfs \ //指定安裝路徑
> --with-default-user=mfs \ //指定默認用戶爲 mfs
> --with-default-group=mfs \ //指定默認組
> --disable-mfschunkserver \ //禁用 Chunk Server
> --disable-mfsmount //禁用客戶端[root@master mfs-1.6.27]# make && make install
(4)複製文件(在 master 服務器中配置文件不用修改)
[root@master mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@master mfs]# ls
mfsexports.cfg.dist mfsmaster.cfg.dist mfsmetalogger.cfg.dist mfstopology.cfg.dist //生成4個配置文件
[root@master mfs]# cp mfsexports.cfg.dist mfsexports.cfg //權限配置文件
[root@master mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg //master 配置文件
[root@master mfs]# cp mfstopology.cfg.dist mfstopology.cfg //元數據日誌文件[root@master mfs]# cd /usr/local/mfs/var/mfs/
[root@master mfs]# ls
metadata.mfs.empty
[root@master mfs]# cp metadata.mfs.empty metadata.mfs //master運行過程當中自動產生的元數據文件
(5)啓動 Master Server
[root@master mfs]# /usr/local/mfs/sbin/mfsmaster start
[root@master mfs]# netstat -ntap | grep mfsmaster //查看端口是否啓動(有3個端口)
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 9061/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 9061/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 9061/mfsmaster中止 Master Server 的命令是 /usr/local/mfs/sbin/mfsmaster –s
2.搭建 MetaLogger Server
(1)安裝編譯環境,關閉防火牆。
[root@metalogger ]# yum install gcc gcc-c++ zlib-devel –y
[root@metalogger ]# systemctl stop firewalld
[root@metalogger ]# setenforce 0
(2)建立 mfs 用戶
[root@metalogger ]# useradd -s /sbin/nologin mfs
(3)安裝源碼包(與 Master Server 配置同樣)
[root@metalogger] tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@metalogger] cd /opt/mfs-1.6.27/
[root@metalogger]./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount[root@metalogger] make && make install
(4)複製文件
[root@metalogger mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@metalogger mfs]# ls
mfsexports.cfg.dist mfsmaster.cfg.dist mfsmetalogger.cfg.dist mfstopology.cfg.dist
[root@metalogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg //複製元數據日誌文件
(5)修改元數據日誌文件的配置文件
[root@metalogger mfs]# vim mfsmetalogger.cfg
# WORKING_USER = mfs //運行 masterserver 的用戶
# WORKING_GROUP = mfs //運行 masterserver 的組
# SYSLOG_IDENT = mfsmetalogger //表示 mfsmetalogger 產生的日誌
# LOCK_MEMORY = 0 //是否執行 mlockall(),以免 masterserver 進程溢出(默認值爲0)
# NICE_LEVEL = –19 //運行的優先級(若是能夠,默認是 -19;注意:進程必須用 root 啓動)
# DATA_PATH = /usr/local/mfs/var/mfs //數據存放路徑
# BACK_LOGS = 50 //metadata 改變的 log 文件數目(默認是50)
# BACK_META_KEEP_PREVIOUS = 3
# META_DOWNLOAD_FREQ = 24
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.91.147 //修改成 Master server 的 IP 地址
# MASTER_PORT = 9419 //鏈接端口地址
# MASTER_TIMEOUT = 60
(6)啓動 mfsmetalogger
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@metalogger mfs]# netstat -ntap | grep mfsmetalogger //查看端口
tcp 0 1 192.168.91.149:40552 220.250.64.225:9419 SYN_SENT 59501/mfsmetalogger
3.搭建 Chunk Server(本次實驗兩臺 Chunk Server 搭建步驟是相同的,具體步驟以下)
(1)安裝編譯環境
[root@chunkserver ~]# systemctl stop firewalld.service
[root@chunkserver ~]# setenforce 0
[root@chunkserver ~]# yum install gcc gcc-c++ zlib-devel –y
(2)建立 mfs 用戶
[root@chunkserrver ]# useradd -s /sbin/nologin mfs
(3)安裝源碼包
[root@chunkserver ~]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@chunkserver Y2C]# cd /opt/mfs-1.6.27/
[root@chunkserver mfs-1.6.27]# useradd -s /sbin/nologin mfs
[root@chunkserver mfs-1.6.27]# ./configure \
> --prefix=/usr/local/mfs \
> --with-default-user=mfs \
> --with-default-group=mfs \
> --disable-mfsmaster \ //禁用 mfsmaster
> --disable-mfsmount //禁用客戶端[root@chunkserver mfs]# make && make install
(4)複製文件,並修改 Chunkserver 的配置文件
[root@chunkserver mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@chunkserver mfs]# ls
mfschunkserver.cfg.dist mfshdd.cfg.dist
[root@chunkserver mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@chunkserver mfs]# cp mfshdd.cfg.dist mfshdd.cfg[root@chunkserver mfs]# vim mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19# DATA_PATH = /usr/local/mfs/var/mfs
# MASTER_RECONNECTION_DELAY = 5
# BIND_HOST = *
MASTER_HOST = 192.168.91.147 //修改成 Master Server 的 IP 地址
# MASTER_PORT = 9420# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
# HDD_TEST_FREQ = 10
(5)添加存儲目錄
[root@chunkserver mfs]# vim mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
/data //添加一行 /data ,在這裏 /data 是一個給 MFS 的分區,生產環境最好使用獨立的分區或磁盤關在到此目錄
[root@chunkserver mfs]# mkdir /data //建立 /data 目錄
[root@chunkserver mfs]# chown -R mfs.mfs /data //給 mfs用戶和組對於 /data 的執行權限
(6)啓動 ChukServer
[root@chunkserver mfs]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@chunkserver mfs]# netstat -ntap | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 43697/mfschunkserve
tcp 0 0 192.168.91.148:52454 192.168.91.147:9420 ESTABLISHED 43697/mfschunkserve
另外一臺的 ChunkServer 也是同樣的配置
chunk server 2
[root@chunkserver2 mfs]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@chunkserver2 mfs]# netstat -ntap | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 47743/mfschunkserve
tcp 0 0 192.168.91.150:36058 192.168.91.147:9420 ESTABLISHED 47743/mfschunkserve
4搭建客戶端
(1)安裝編譯環境
[root@client ~]# systemctl stop firewalld.service
[root@client ~]# setenforce 0
[root@client ~]# yum install gcc gcc-c++ zlib-devel –y
(2)安裝 FUSE,MFS 客戶端依賴於 FUSE
[root@client Y2C]# tar zxvf fuse-2.9.2.tar.gz -C /opt/
[root@client Y2C]# cd /opt/fuse-2.9.2/
[root@client fuse-2.9.2]# ./configure[root@client fuse-2.9.2]# make && make install
而後設置於環境變量
[root@client fuse-2.9.2]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH //在末行加入
[root@client fuse-2.9.2]# source /etc/profile //刷新環境變量
(3)安裝 MFS 客戶端
[root@client fuse-2.9.2]# useradd -s /sbin/nologin mfs //建立 mfs 用戶
[root@client Y2C]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@client Y2C]# cd /opt/mfs-1.6.27/
[root@client mfs-1.6.27]# ./configure \
> --prefix=/usr/local/mfs \
> --with-default-user=mfs \
> --with-default-group=mfs \
> --disable-mfsmaster \ //禁用 master
> --disable-mfschunkserver \ //禁用 chunkserver
> --enable-mfsmount //啓用客戶端[root@client mfs-1.6.27]# make && make install
(4)掛載 MFS 文件系統
[root@client mfs-1.6.27]# mkdir /opt/mfs //建立掛載點
[root@client mfs-1.6.27]# modprobe fuse //加載 fuse 模塊到內核
[root@client mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.91.147 //掛載 MFS (指定到 Master Server 服務器)
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[root@client mfs-1.6.27]# df –h //查看掛載狀況
文件系統 容量 已用 可用 已用% 掛載點
/dev/sda2 20G 3.6G 17G 18% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 18M 975M 2% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda5 5.0G 50M 5.0G 1% /opt
/dev/sda3 10G 37M 10G 1% /home
/dev/sda1 997M 158M 839M 16% /boot
tmpfs 199M 4.0K 199M 1% /run/user/42
tmpfs 199M 40K 199M 1% /run/user/0
//192.168.91.1/rhel6 120G 50G 71G 41% /aaa
192.168.91.147:9421 33G 0 33G 0% /opt/mfs要卸載 MFS,使用命令 umount /opt/mfs
(5)MFS 經常使用操做
MFS 在客戶端安裝完畢後,會生成 /usr/local/mfs/bin/ 目錄,在這個目錄下有不少命令是用戶所須要的。爲了方便使用這些命令,能夠將 /usr/local/mfs/bin/ 加到環境變量中。
[root@client mfs-1.6.27]# vim /etc/profile
export PATH=/usr/local/mfs/bin/:$PATH
[root@client mfs-1.6.27]# source /etc/profile
mfsgetgoal 命令用來查詢文件被複制的分數,,利用 –r 命令能夠對整個目錄進行遞歸, goal 是指文件被複制的分數
[root@client mfs-1.6.27]# mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 1 : 1
mfssetgoal 命令用來設置文件被複制的分數,生產環境中 Chunk Server 節點數量應至少大於2,文件副本數小於等於 Chunk Server 服務器的數量
[root@client mfs-1.6.27]# mfssetgoal -r 2 /opt/mfs
/opt/mfs:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@client mfs-1.6.27]# mfsgetgoal -r /opt/mfs/
/opt/mfs/:
directories with goal 2 : 1
建立文件測試以下
[root@client mfs-1.6.27]# cd /opt/mfs
[root@client mfs]# touch test
[root@client mfs]# ls
test
[root@client mfs]# mfsgetgoal test
test: 2
(6)MFS 監控
Mfscgiserv 是用 python 編寫的一個 web 服務器,其監聽端口是 9425,能夠再 Master Server 上經過命令 /usr/local/mfs/sbin/mfscgiserv 來啓動,用戶利益瀏覽器就能夠全名監控全部客戶掛載、Chunk Server 、Master Server,以及客戶端的各類操做。
[root@master mfs]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
在客戶端經過瀏覽器訪問 http://192.168.91.147:9425/
總結:
(1)MFS 是一個具備容錯性的網絡分佈式文件系統,它把數據分散放在多個物理服務器上,而呈現給客戶的是一個統一的資源。
(2)MFS 文件系統的組成包括:元數據服務器(Master)、元數據日誌服務器(MetaLogger)、數據存儲服務器(Chunk Server)和客戶端(Client)
(3)元數據服務器(Master)須要用到的配置文件有兩個,分別是 mfsmaster.dfg 和 mfsexports.cfg。
(4)在元數據服務器(Master)發生故障時,能夠從 Metaloggwr 中恢復 Master 。