搭建MFS分佈式文件系統

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 文件系統,具體的拓撲圖如下所示:

3.jpg

實驗環境如下


主機 操作系統IP 地址 主要軟件
Master Server  Centos 7 192.168.91.147mfs-1.6.27-5.tar.gz
Metalogger Server  Centos 7192.168.91.149mfs-1.6.27-5.tar.gz
Chunk Server 1  Centos 7192.168.91.148mfs-1.6.27-5.tar.gz
Chunk Server 2   Centos 7192.168.91.150mfs-1.6.27-5.tar.gz
Client   Centos 7192.168.91.146mfs-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.jpg


總結:

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

(2)MFS 文件系統的組成包括:元數據服務器(Master)、元數據日誌服務器(MetaLogger)、數據存儲服務器(Chunk Server)和客戶端(Client)

(3)元數據服務器(Master)需要用到的配置文件有兩個,分別是 mfsmaster.dfg 和 mfsexports.cfg。

(4)在元數據服務器(Master)發生故障時,可以從 Metaloggwr 中恢復 Master 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章