MFS分佈式文件系統

一:生產環境中遇到的問題

公司之前的圖片服務器採用的是 NFS, 隨着業務量增加, 多臺服務器通過 NFS 方式共享一個服務器的存儲空間, 使得 NFS 服務器不堪重負, 經常出現超時問題。

而且 NFS 存在着單點故障問題, 儘管可以用 rsync 同步數據到另外一臺服務器上做 NFS 服務的備份, 但這對提高整個系統的性能毫無幫助。

基於這樣一種需求, 我們需要對 NFS 服務器進行優化或採取別的解決方案, 然而優化並不能應對日益增多的客戶端的性能要求, 因此選擇的解決方案是採用分佈式文件系統。

採用分佈式文件系統後, 服務器之間的數據訪問不再是一對多的關係,而是多對多的關係, 這樣可以使性能得到大幅提升。
在當前多種常用的分佈式文件系統中, 我們採用了 MFS(MooseFS)。

MFS 正式推出是在2008 年 5 月, 是一個具有容錯功能的、 高可用、 可擴展的海量級分佈式文件系統。

MFS 把數據分散在多臺服務器上, 但用戶看到的只是一個源。

MFS 也像其他類 UNIX 文件系統一樣,包含了層級結構、 文件屬性, 可以創建特殊的文件(塊設備、 字符設備、 管道、 套接字)、符號鏈接和硬鏈接。

二:分佈式簡介

分佈式文件系統(Distributed File System) 是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,

而是通過計算機網絡與節點相連。簡單來說就是把一些分散的(分佈在局域網內各個計算機上) 共享文件夾,

集合到一個文件夾內(虛擬共享文件夾)。

對於用戶來說, 要訪問這些共享文件夾時, 只要打開這個虛擬共享文件夾, 就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾, 用戶感覺不到這些共享文件是分散於各個計算機上的。

分佈式文件系統的好處是集中訪問、 簡化操作、 數據容災、 提高文件存取性能

三:MFS原理

MFS 是一個具有容錯性的網絡分佈式文件系統, 它把數據分散存放在多個物理服務器上,
而呈現給用戶的則是一個統一的資源。

四:MFS文件系統的組成

元數據服務器(Master): 在整個體系中負責管理文件系統, 維護元數據

元數據日誌服務器(MetaLogger): 備份 Master 服務器的變化日誌文件, 文件類型爲
changelog_ml.*.mfs。 當 Master 服務器數據丟失或者損壞,
可以從日誌服務器中取得文件恢復

數據存儲服務器(Chunk Server): 真正存儲數據的服務器。 存儲文件時, 會把文件分塊保存,
並在數據服務器之間複製, 數據服務器越多, 能使用的“容量”
就越大, 可靠性就越高, 性能越好。

客戶端(Client): 可以像掛載 NFS 一樣掛載 MFS 文件系統, 其操作是相同的。

五:MFS的工作流程

●MFS 讀取數據的處理過程
【1】客戶端向元數據服務器發出讀請求。
【2】元數據服務器把所需數據存放的位置(Chunk Server 的 IP 地址和 Chunk 編號) 告知客戶端。
【3】客戶端向已知的 Chunk Server 請求發送數據。
【4】Chunk Server 向客戶端發送數據。

●MFS 寫入數據的處理過程
【1】客戶端向元數據服務器發送寫入請求。
【2】元數據服務器與 Chunk Server 進行交互(只有當所需的分塊 Chunks 存在的時候才進行這個交互),
但元數據服務器只在某些服務器創建新的分塊 Chunks,創建成功後由Servers 告知元數據服務器操作成功
【3】元數據服務器告知客戶端, 可以在哪個 Chunk Server 的哪些 Chunks 寫入數據。
【4】客戶端向指定的 Chunk Server 寫入數據
【5】該 Chunk Server 與其他 Chunk Server 進行數據同步, 同步成功後 Chunk Server 告知客戶端數據寫入成功。
【6】客戶端告知元數據服務器本次寫入完畢。

六:實操

6.1 環境

主機 操作系統 IP地址 主要軟件
master centos7 192.168.100.40 moosefs-3.0.100-1.tar.gz
metalogger centos7 192.168.100.41 moosefs-3.0.100-1.tar.gz
chunk1 centos7 192.168.100.42 moosefs-3.0.100-1.tar.gz
chunk2 centos7 192.168.100.43 moosefs-3.0.100-1.tar.gz
chunk3 centos7 192.168.100.44 moosefs-3.0.100-1.tar.gz
client centos7 192.168.100.45 moosefs-3.0.100-1.tar.gz,fuse-2.9.2.tar.gz

6.2 思路

1、搭建 MFSmaster。
2、搭建 MFS 日誌服務器。
3、搭建 chunk 存儲端。
4、使用 MFS 掛在到客戶端。
5、創建 MFS 監控。
6、學習 MFS 維護及災難恢復。

6.3 環境準備

六臺服務器上關閉防火牆、關閉核心防護、配置主機名、配置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.40	mfsmaster
192.168.100.41	metalogger
192.168.100.42	chunk1
192.168.100.43	chunk2
192.168.100.44	chunk3
192.168.100.45	client

MFS節點都執行下面操作,client另外說明

●安裝相關依賴包
yum -y install gcc zlib-devel
●創建mfs用戶(客戶端節點不用創建,其他節點都創建)
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
安裝源碼包   ##上傳到/opt目錄
[root@mfsmaster ~]# cd /opt
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/

6.4 配置master服務器

編譯安裝

[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 配置文件模板

/usr/local/mfs/etc/mfs/mfsmaster.cfg

/usr/local/mfs/etc/mfs/mfsexports.cfg

/usr/local/mfs/etc/mfs/mfstopology.cfg

/usr/local/mfs/var/mfs/metadata.mfs

[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]# ll
總用量 24
-rw-r--r-- 1 root root 4057 4月  11 23:48 mfsexports.cfg.sample
-rw-r--r-- 1 root root 8597 4月  11 23:48 mfsmaster.cfg.sample
-rw-r--r-- 1 root root 2175 4月  11 23:48 mfsmetalogger.cfg.sample
-rw-r--r-- 1 root root 1052 4月  11 23:48 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      16024/mfsmaster     
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      16024/mfsmaster     
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN 

[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster stop         #####停止

6.5 搭建MetaLogger server

編譯安裝

[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 主配置文件

/usr/local/mfs/etc/mfs/mfsmetalogger.cfg

[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# ll
總用量 24
-rw-r--r-- 1 root root 4057 4月  12 07:55 mfsexports.cfg.sample
-rw-r--r-- 1 root root 8597 4月  12 07:55 mfsmaster.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 07:55 mfsmetalogger.cfg.sample
-rw-r--r-- 1 root root 1052 4月  12 07:55 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.40

[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@metalogger mfs]# netstat -anpt | grep mfs
tcp        0      0 192.168.100.41:44248    192.168.100.40:9419     ESTABLISHED 14207/mfsmetalogger 

6.6 搭建chunkserver1

[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 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# ll
總用量 32
-rw-r--r-- 1 root root 3491 4月  12 08:13 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:13 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:13 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.40

[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      21590/mfschunkserve 
tcp        0      0 192.168.100.42:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.6 搭建chunkserver2

[root@chunk2 moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

[root@chunk2 moosefs-3.0.100]# make && make install

●複製 mfschunk 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk2 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk2 mfs]# ll
總用量 12
-rw-r--r-- 1 root root 3491 4月  12 08:22 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:22 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:22 mfsmetalogger.cfg.sample

[root@chunk2 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk2 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

●修改 mfschunk 主配置文件, 指定 master。

[root@chunk2 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.40

[root@chunk2 mfs]# vi mfshdd.cfg
/data

[root@chunk2 mfs]# mkdir /data
[root@chunk2 mfs]# chown -R mfs:mfs /data

[root@chunk2 mfs]# /usr/local/mfs/sbin/mfschunkserver start

[root@chunk2 mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21590/mfschunkserve 
tcp        0      0 192.168.100.43:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.7 搭建chunkserver3

[root@chunk3 moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

[root@chunk3 moosefs-3.0.100]# make && make install

●複製 mfschunk 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk3 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk3 mfs]# ll
總用量 32
-rw-r--r-- 1 root root 3491 4月  12 08:13 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:13 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:13 mfsmetalogger.cfg.sample

[root@chunk3 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk3 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

●修改 mfschunk 主配置文件, 指定 master。

[root@chunk3 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.40

[root@chunk3 mfs]# vi mfshdd.cfg
/data

[root@chunk3 mfs]# mkdir /data
[root@chunk3 mfs]# chown -R mfs:mfs /data

[root@chunk3 mfs]# /usr/local/mfs/sbin/mfschunkserver start

[root@chunk3 mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21590/mfschunkserve 
tcp        0      0 192.168.100.44:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.8 搭建client

●安裝相關依賴包

yum -y install gcc zlib-devel

●安裝 FUSE 上傳fuse-2.9.2.tar.gz到/opt目錄

[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.40     ####master地址
[root@client ~]# df -hT
文件系統                類型      容量  已用  可用 已用% 掛載點
/dev/mapper/centos-root xfs        50G  4.1G   46G    9% /
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   13M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt
/dev/sda1               xfs      1014M  179M  836M   18% /boot
/dev/mapper/centos-home xfs       245G   33M  245G    1% /home
tmpfs                   tmpfs     378M   12K  378M    1% /run/user/42
tmpfs                   tmpfs     378M     0  378M    0% /run/user/0
192.168.100.40:9421     fuse.mfs  150G   13G  138G    9% /opt/mfs

###如果要卸載 MFS, 使用命令 umount /opt/mfs 即可###

七:MFS 常用操作

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

●創建文件測試如下

[root@client ~]# cd /opt/mfs/
[root@client mfs]# touch gsy
[root@client mfs]# mfsgetgoal gsy
gsy: 3

八:其他命令

8.1 Master Server----啓動監控程序

[root@mfsmaster ~]#  /usr/local/mfs/sbin/mfscgiserv

【在真機中打開瀏覽器訪問】
http://192.168.100.40:9425
http://192.168.100.40:9425/mfs.cgi?masterhost=mfsmaster //注意主機名

其中各部分的含義如下。
Info 部分: 顯示了 MFS 的基本信息。
Servers 部分: 列出現有 Chunk Server。
Disks 部分: 列出現有 Chunk Server 硬盤信息。
Exports 部分: 列出可被掛載的目錄。
Mounts 部分: 列出被掛載的目錄。
Operations 部分: 顯示正在執行的操作。
Resources 部分: 列出當前存儲信息。
Quitas 部分: 列出當前配額信息。
Master charts 部分: 顯示 Master Server 的操作情況, 讀、 寫、 刪除等操作。
Server charts 部分: 顯示 Chunk Server 的操作情況、 數據傳輸率及系統狀態。

8.2 MFS 集羣的啓動與停止

MFS 集羣啓動的順序如下
(1) 啓動 mfsmaster 進程。
(2) 啓動所有的 mfschunkserver 進程。
(3) 啓動 mfsmetalogger 進程(如果配置了 mfsmetalogger)。
(4) 在所有的客戶端掛載 MFS 文件系統。

MFS 集羣停止的順序如下。
(1) 在所有的客戶端卸載 MFS 文件系統。
(2) 用 mfschunkserver stop 命令停止 chunkserver 進程。
(3) 用 mfsmetalogger stop 命令停止 metalogger 進程。
(4) 用 mfsmaster stop 命令停止 master 進程

8.3 MFS 災難恢復

整個 MFS 體系中, 直接斷電只有 Master 有可能無法啓動, 可以在 master 上使用命令
/usr/local/mfs/sbin/mfsmaster -a 修復

MFS 元數據通常有兩部分的數據
1、主要元數據文件 metadata.mfs, 當 mfsmaster 運行時會被命名爲 metadata.mfs.back。

2、元數據改變日誌 changelog.*.mfs, 存儲了過去的 N 小時的文件改變(N 的數值是由
BACK_LOGS 參數設置的, 參數的設置在 mfschunkserver.cfg 配置文件中)。

3、在 Master 發生故障時, 可以從 MetaLogger 中恢復 Master

4、安裝一臺 mfsmaster, 利用同樣的配置來配置這臺 mfsmaster。

5、將 metalogger 上 /usr/local/mfs/var/mfs/目錄下的文件複製到 mfsmaster 相應的目
錄中

[root@mfsmaster ~]#scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

●利用 mfsmetarestore 命令合併元數據 changelogs。

[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a

如果是全新安裝的 Master, 恢復數據後, 要更改 metalogger 和 chunkserver 配置
MASTER_HOST 的 IP, 客戶端也需要重新掛載

的文件改變(N 的數值是由
BACK_LOGS 參數設置的, 參數的設置在 mfschunkserver.cfg 配置文件中)。

3、在 Master 發生故障時, 可以從 MetaLogger 中恢復 Master

4、安裝一臺 mfsmaster, 利用同樣的配置來配置這臺 mfsmaster。

5、將 metalogger 上 /usr/local/mfs/var/mfs/目錄下的文件複製到 mfsmaster 相應的目
錄中

[root@mfsmaster ~]#scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

●利用 mfsmetarestore 命令合併元數據 changelogs。

[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a

如果是全新安裝的 Master, 恢復數據後, 要更改 metalogger 和 chunkserver 配置
MASTER_HOST 的 IP, 客戶端也需要重新掛載

發佈了116 篇原創文章 · 獲贊 27 · 訪問量 9460
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章