您好,登錄后才能下訂單哦!
MFS介紹
MFS(MooseFS ) 是一個具有容錯功能的、高可用、可擴展的海量級分布式文件系統。MFS 把數據分散在多臺服務器上,但是客戶看到的只是一個源。MFS 也像其他類 UNIX 文件系統一樣,包含了層級結構和文件屬性,可以創建特殊的文件(塊設備、字符設備、管道、套接字)、符號鏈接和硬鏈接。
MFS 原理
( 1)MFS 文件系統組成
1).元數據服務器(Master):在整個系統中負責管理文件系統,維護元數據。
2).元數據日志服務器(MetaLogger):備份 Master 服務器的變化日志文件,文件類型為 changelog_ml.*.mfs 。當Master 服務器數據丟失或者損壞時, 可以從日志服務器中取得文件,進行恢復。
3).數據存儲服務器(Chunk Server):真正存儲數據的服務器。存儲文件時,會把文件分塊保存,并在數據庫服務器之間進行復制。數據服務器越多,能使用的容量就越大,可靠性就越高,性能也就越好。
4).客戶端(Client):可以像掛載 NFS 一樣掛載 MFS 文件系統,其操作是相同的。
(2)MFS 讀取數據的處理過程。
1). 客戶端向元數據服務器發出讀請求。
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 。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。