文章目錄
一、MFS簡介
MFS 正式推出是在2008 年 5 月, 是一個具有容錯功能的、 高可用、 可擴展的海量級分佈式文件系統。 MFS 把數據分散在多臺服務器上, 但用戶看到的只是一個源。 MFS 也像其他類 UNIX 文件系統一樣,包含了層級結構、 文件屬性, 可以創建特殊的文件(塊設備、 字符設備、 管道、 套接字)、符號鏈接和硬鏈接。
1.1、MFS優勢
- 集中訪問
- 簡化操作
- 數據容災
- 提高文件存取性能
1.2、MFS原理
MFS 是一個具有容錯性的網絡分佈式文件系統, 它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
1.3、MFS文件系統的組成
-
元數據服務器(Master): 在整個體系中負責管理文件系統, 維護元數據
-
元數據日誌服務器(MetaLogger): 備份 Master 服務器的變化日誌文件, 文件類型爲 changelog_ml.*.mfs。 當 Master 服務器數據丟失或者損壞,可以從日誌服務器中取得文件恢復
-
數據存儲服務器(Chunk Server): 真正存儲數據的服務器。 存儲文件時, 會把文件分塊保存, 並在數據服務器之間複製, 數據服務器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。
-
客戶端(Client): 可以像掛載 NFS 一樣掛載 MFS 文件系統, 其操作是相同的。
二、MFS分佈式文件系統部署
2.1、部署準備
準備六臺虛擬機,都要關閉防火牆、關閉核心防護、配置主機名、配置yum,配置hosts文件。
●關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
●關閉核心防護
setenforce 0
vi /etc/sysconfig/selinux
SELINUX=disabled
●配置主機名
hostnamectl set-hostname mfsmaster
hostnamectl set-hostname metalogger
hostnamectl set-hostname chunk1
hostnamectl set-hostname chunk2
hostnamectl set-hostname chunk3
hostnamectl set-hostname client
●配置hosts文件
vi /etc/hosts
192.168.100.129 mfsmaster
192.168.100.131 metalogger
192.168.100.132 chunk1
192.168.100.133 chunk2
192.168.100.134 chunk3
192.168.100.135 client
●安裝編譯包
yum -y install gcc gcc-c++ make zlib-devel
2.2、搭建 Master Server
//創建用戶
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
//安裝源碼包
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/
[root@mfsmaster moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@mfsmaster moosefs-3.0.100]# make && make install
//複製 master 配置文件
[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]# ll
總用量 24
總用量 24
-rw-r--r--. 1 root root 4057 3月 24 17:05 mfsexports.cfg.sample
-rw-r--r--. 1 root root 8597 3月 24 17:05 mfsmaster.cfg.sample
-rw-r--r--. 1 root root 2175 3月 24 17:05 mfsmetalogger.cfg.sample
-rw-r--r--. 1 root root 1052 3月 24 17:05 mfstopology.cfg.sample
[root@mfsmaster mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@mfsmaster mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@mfsmaster mfs]# cp mfstopology.cfg.sample mfstopology.cfg
[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs
[root@mfsmaster mfs]# chown mfs:mfs /usr/local/mfs/var/mfs
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start #####啓動
####停止 Master Server 的命令是/usr/local/mfs/sbin/mfsmaster stop###
[root@mfsmaster mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 100461/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 100461/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 100461/mfsmaster
端口介紹:
9419----元數據日誌服務器
9420----元數據存儲
9421----客戶端用的
2.3、搭建 MFS 日誌服務器
//創建用戶
[root@metalogger ~]# useradd -s /sbin/nologin -M mfs
//安裝源碼包
[root@metalogger opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@metalogger opt]# cd /opt/moosefs-3.0.100/
[root@metalogger moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@metalogger moosefs-3.0.100]# make && make install
//安裝源碼包 複製 metalogger 主配置文件
[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# ll
總用量 24
-rw-r--r--. 1 root root 4057 3月 24 17:06 mfsexports.cfg.sample
-rw-r--r--. 1 root root 8597 3月 24 17:06 mfsmaster.cfg.sample
-rw-r--r--. 1 root root 2175 3月 24 17:06 mfsmetalogger.cfg.sample
-rw-r--r--. 1 root root 1052 3月 24 17:06 mfstopology.cfg.sample
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
//修改metalogger主配置文件, 指定master地址
[root@metalogger mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.100.129
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@metalogger mfs]# netstat -anpt | grep mfs
tcp 0 0 192.168.100.131:45736 192.168.100.129:9419 ESTABLISHED 16271/mfsmetalogger
2.4、搭建 chunk 存儲端
三臺chunk存儲服務器的配置一樣,所以就不一一展示了。
//創建用戶
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
//安裝源碼包
[root@chunk1 opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@chunk1 opt]# cd /opt/moosefs-3.0.100/
[root@chunk1 moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[root@chunk1 moosefs-3.0.100]# make && make install
//複製 mfschunk 配置文件
[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# ll
總用量 12
-rw-r--r--. 1 root root 3491 3月 24 17:21 mfschunkserver.cfg.sample
-rw-r--r--. 1 root root 1648 3月 24 17:21 mfshdd.cfg.sample
-rw-r--r--. 1 root root 2175 3月 24 17:21 mfsmetalogger.cfg.sample
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg
//修改 mfschunk 主配置文件, 指定 master。
[root@chunk1 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.129
[root@chunk1 mfs]# vi mfshdd.cfg
#在文件末尾添加以下目錄
/data
[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
[root@chunk1 mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 21544/mfschunkserve
tcp 0 0 192.168.100.132:49788 192.168.100.129:9420 ESTABLISHED 21544/mfschunkserve
2.5、搭建客戶端並掛載MFS
- 客戶端通過 mfsmount 與 MFS文件文件系統進行溝通,管理服務器(接收和修改文件元數據)、chunkservers(實際的文件交換數據)。
- mfsmount 是基於FUSE的機制 (用戶空間文件系統中)
//安裝fuse-2.9.2.tar.gz包
[root@client ~]# cd /opt
[root@client opt]# tar xzvf fuse-2.9.2.tar.gz -C /opt
[root@client opt]# cd 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]# vi /etc/profile
#在文件末尾添加以下代碼
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client fuse-2.9.2]# source /etc/profile #執行使之生效
//安裝 MFS 客戶端
[root@client fuse-2.9.2]# cd /opt
[root@client opt]# useradd -s /sbin/nologin -M mfs #創建系統用戶
[root@client opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@client opt]# cd /opt/moosefs-3.0.100/
[root@client moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
[root@client moosefs-3.0.100]# make && make install
//掛載 MFS 文件系統
[root@client moosefs-3.0.100]# cd ~
[root@client ~]# mkdir /opt/mfs
[root@client ~]# modprobe fuse # 加載 fuse 模塊到內核
[root@client ~]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.129 ####master地址
//設置永久掛載
寫掛載腳本,配置成開機自啓。
cd /etc/profile.d/
vi mt.sh
#!/bin/bash
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.40 >/dev/null 2>&1
chmod +x mt.sh
三、MFS的使用
3.1、優化並使用命令測試
MFS 在客戶端安裝完畢後, 會生成/usr/local/mfs/bin/目錄, 在這個目錄下有很多命令是用戶所需要的。
爲了方便使用這些命令, 可將/usr/local/mfs/bin 路徑加入到環境變量中
[root@client ~]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=/usr/local/mfs/bin:$PATH ###此處添加
[root@client ~]# source /etc/profile
● mfsgetgoal 命令用來查詢文件被複制的份數,利用 -r 命令可以對整個目錄進行遞歸操作。
goal 是指文件被複制的份數
[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 2 : 1
● mfsgetgoal 命令用來設置文件被複制的份數, 生產環境 Chunk Server節點數量應至少
大於 2, 文件副本數小於等於 Chunk Server服務器的數量
[root@client ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
##創建文件測試mfssetgoal命令的結果
[root@client ~]# cd /opt/mfs/
[root@client bin]# cd /opt/mfs/
[root@client mfs]# touch abc
[root@client mfs]# mfsgetgoal abc
abc: 3
3.2、使用 MFS 網頁版監控
【Master Server----啓動監控程序】
[root@mfsmaster ~]# /usr/local/mfs/sbin/mfscgiserv
【在真機中打開瀏覽器訪問】
http://192.168.100.129:9425/mfs.cgi?masterhost=mfsmaster //注意主機名和IP地址
其中各部分的含義如下。
Info 部分: 顯示了 MFS 的基本信息。
Servers 部分: 列出現有 Chunk Server。
Disks 部分: 列出現有 Chunk Server 硬盤信息。
Exports 部分: 列出可被掛載的目錄。
Mounts 部分: 列出被掛載的目錄。
Operations 部分: 顯示正在執行的操作。
Resources 部分: 列出當前存儲信息。
Quitas 部分: 列出當前配額信息。
Master charts 部分: 顯示 Master Server 的操作情況, 讀、 寫、 刪除等操作。
Server charts 部分: 顯示 Chunk Server 的操作情況、 數據傳輸率及系統狀態。