1. 程式人生 > >詳細講解MFS分布式文件系統搭建(內含源碼包)

詳細講解MFS分布式文件系統搭建(內含源碼包)

apr change tab -h limit config col 掛載點 通過命令

初步了解分布式原理:

分布式文件系統(Distributed File Systemm)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。簡單來說,就是把一些分散的(分布在局域網內各個計算機上)共享文件夾,集合到一個文件夾內(虛擬共享文件夾)。對於用戶來說,要訪問這些共享文件夾時,只要打開這個虛擬共享文件夾,就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾,用戶感覺不到這些共享文件是分散在各個計算機上的。分布式文件系統的好處是集中訪問、簡化操作、數據容災,以及提高文件的存取性能。

MFS原理:

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

MFS文件系統的組成:

#元數據服務器(Master):在整個體系中負責管理文件系統,維護元數據。
#元數據日誌服務器(MetaLogger):備份Master服務器的變化日誌文件,文件類型為changelog_ml.*.mfs。當Master服務器數據丟失或者損壞時,可以從日誌服務器中取得文件,進行修復。
#數據存儲服務器(Chunk Server):真正存儲數據的服務器。存儲文件時,會把文件分塊保存,在數據服務器之間進行復制。數據服務器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
#客戶端(Client):可以像掛載NFS一樣掛載MFS文件系統,其操作是相同的。

MFS讀取數據的處理過程:

#客戶端向元數據服務器發出讀請求
#元數據服務器把所需數據存放的位置(Chunk Server的IP地址和Chunk編號)告知客戶端
#客戶端向已知的Chunk Server請求發送數據
#Chunk Server向客戶端發送數據

MFS寫入數據的處理過程:

#客戶端向元數據服務器發送寫入請求
#元數據服務器與Chunk Server進行交互(只有當所需的分塊Chunks存在的時候才進行交互),但元數據服務器只在某些服務器創建新的分塊Chunks,創建成功後由Chunk Server告知元數據服務器操作成功。
#元數據服務器告知客戶端,可以在哪個Chunk Server的哪些Chunks寫入數據。

#客戶端向指定的Chunk Server寫入數據
#該Chunk Server與其他Chunk Server進行數據同步,同步成功後Chunk Server告知客戶端數據寫入成功
#客戶端告知元數據服務器本次寫入完畢

下面為MFS文件系統的基本組成架構:
技術分享圖片

下面我通過實驗進行說明:
實驗環境:
技術分享圖片

mfs軟件包鏈接:https://pan.baidu.com/s/1QDIMfqZGjlqUfRRwZfDFqQ
提取碼:d3mi
一、搭建Master Server
下載編譯環境

yum install gcc gcc-c++ zlib-devel -y

關閉防火墻

systemctl stop firewalld.service
setenforce 0

建立管理用戶

useradd -s /sbin/nologin mfs

解壓源碼包

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

對本臺服務器進行配置,因為在進行源碼包編譯時,它是默認安裝了所有模塊的,而這臺是Master所以需要禁用chunkserver和mount兩個模塊

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

編譯安裝

make && make install

復制文件

cd /usr/local/mfs/etc/mfs/
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs

將該文件的屬組和屬主改為mfs

chown -R mfs.mfs /usr/local/mfs

本臺服務器需要用到的配置文件有兩個:mfsmaster.cfg(主配置文件)和mfsexports.cfg(被掛載目錄及權限配置文件)。這兩個文件不需要做任何修改就可以開始工作
mfsmaster.cfg文件常用參數如下:

#WORKING_USER = mfs #運行masterserver的用戶
#WORKING_GROUP = mfs #運行masterserver的組
#SYSLOG_IDENT = mfsmaster #在syslog中表示是mfsmaster產生的日誌
#LOCK_MEMORY = 0 #是否執行mlockall(),以避免mfsmaster進程溢出(默認為0)
#NICE_LEVEL = -19 #運行的優先級(如果可以,默認是-19;註意:進程必須用root啟動)

#EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg #被掛載目錄及其權限控制文件的存放位置

#TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg

#DATA_PATH = /usr/local/mfs/var/mfs #數據存放路徑

#BACK_LOGS = 50 #metadata改變的log文件數目(默認是50)
#BACK_META_KEEP_PREVIOUS = 1

#REPLICATIONS_DELAY_INIT = 300
#REPLICATIONS_DELAY_DISCONNECT = 3600

#MATOML_LISTEN_HOST = #metalogger監聽的IP地址(默認是,代表任何IP)
#MATOML_LISTEN_PORT = 9419 #metalogger監聽的端口地址(默認是9419)
#MATOML_LOG_PRESERVE_SECONDS = 600

#MATOCS_LISTEN_HOST = #用於chunkserver連接的IP地址(默認是,代表任何IP)
#MATOCS_LISTEN_PORT = 9420 #用於chunkserver連接的端口地址(默認是9420)

#MATOCL_LISTEN_HOST = #用於客戶端掛接連接的IP地址(默認是,代表任何IP)
#MATOCL_LISTEN_PORT = 9421 #用於客戶端掛接連接的端口地址(默認是4921)

#CHUNKS_LOOP_MAX_CPS = 100000
#CHUNKS_LOOP_MIN_TIME = 300 #chunk的回環頻率(默認是300秒)

#CHUNKS_SOFT_DEL_LIMIT = 10
#CHUNKS_HARD_DEL_LIMIT = 25
#CHUNKS_WRITE_REP_LIMIT = 2 #在一個循環裏復制到一個chunkserver的最大chunk數
#CHUNKS_READ_REP_LIMIT = 10 #在一個循環裏從一個chunkserver復制的最大chunk數
#ACCEPTABLE_DIFFERENCE = 0.1

#SESSION_SUSTAIN_TIME = 86400
#REJECT_OLD_CLIENTS = 0

#deprecated:
#CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
#LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile

mfsexports.cfg文件參數格式如下:

#Allow everything but "meta".

  • / rw,alldirs,maproot=0

#Allow "meta".

  • . rw

該文件每一個條目分為三部分
第一部分:客戶端的IP地址
第二部分:被掛接的目錄
第三部分:客戶端擁有的權限

地址可以指定的幾種表現形式:

#*——所有的IP地址
#n.n.n.n——單個IP地址
#n.n.n.n/b——IP網絡地址/子網掩碼
#f.f.f.f-t.t.t.t——IP段

目錄部分的標識如下:

#/標識MFS根
#.表示MFSMETA文件系統

權限部分的標識如下

#ro——只讀模式共享
#rw——讀寫的方式共享
#alldirs——允許掛載任何指定的子目錄
#admin——管理員權限
#maproot——映射為root,還是指定的用戶
#Password——指定客戶端密碼

啟動Master Server

/usr/local/mfs/sbin/mfsmaster start

查看進程,如果有MFS的進程表示服務成功開啟

ps -ef | grep mfs

這是關閉Master Server命令

/usr/local/mfs/sbin/mfsmaster -s

二、搭建Metalogger Server
安裝編譯環境

yum install gcc gcc-c++ zlib-devel -y

關閉防火墻

systemctl stop firewalld.service
setenforce 0

創建管理用戶

useradd -s /sbin/nologin mfs

解壓安裝包

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

配置模塊,因為本臺服務器是Log服務器,所以需要禁用掉mfschunkserver和mfsmount兩個模塊

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

編譯安裝

make && make install

復制文件,本臺服務器只需要開啟日誌文件即可

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

在文件中將地址指向Master Server的地址

vim mfsmetalogger.cfg
MASTER_HOST = 192.168.199.129

將文件的屬組和屬主都改為mfs

chown -R mfs.mfs /usr/local/mfs/

開啟MetaLog Server服務

/usr/local/mfs/sbin/mfsmetalogger start

查看進程,如果有MFS進程表示服務成功開啟

ps -ef | grep mfs

關閉服務用如下命令

/usr/local/mfs/sbin/mfsmetalogger -s

三、搭建兩臺Chunk Server,兩臺的操作步驟完全一樣
安裝編譯環境

yum install gcc gcc-c++ zlib-devel -y

創建管理用戶

useradd -s /sbin/nologin mfs

關閉防火墻

systemctl stop firewalld.service
setenforce 0

解壓安裝包

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

配置模塊,本臺服務器是Chunk Server,所以需要禁用掉mfsmaster和mfsmount兩個模塊

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

編譯安裝

make && make install

開啟mfschunkserver和mfshdd兩個文件

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg

在chunk文件下將地址指向 Master Server

vim mfschunkserver.cfg
MASTER_HOST = 192.168.199.129

在mfshdd文件下添加一行/data,在這裏/data是一個給MFS的分區,生存環境最好使用獨立的分區或磁盤掛載到此目錄

vim mfshdd.cfg
#mount points of HDD drives

#/mnt/hd1
#/mnt/hd2
#etc.
/data

創建掛載目錄

mkdir /data
chown -R mfs.mfs /data

開啟服務

/usr/local/mfs/sbin/mfschunkserver start

想要關閉可以使用如下命令

/usr/local/mfs/sbin/mfschunkserver -s

查看進程,可以檢測服務是否開啟

ps -ef | grep mfs

四、客戶端配置
安裝編譯環境,MFS客戶端依賴於FUSE,所以需要安裝fuse的安裝包和開發包

yum install gcc gcc-c++ zlib-devel fuse fuse-devel -y

關閉防火墻

systemctl stop firewalld.service
setenforce 0

添加環境變量PKG_CONFIG_PATH,環境變量PKG_CONFIG_PATH是用來設置.pc文件的搜索路徑的,pkg-config按照設置路徑的先後順序進行搜索,直到找到指定的.pc 文件為止

vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile

創建進程管理用戶

useradd -s /sbin/nologin mfs

解壓安裝包

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

配置模塊,本臺服務器是Client,所以需要禁用掉mfsmaster和mfschunkserver兩個模塊,同時開啟mfsmount模塊

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount

編譯安裝

make && make install

創建掛載點

mkdir /opt/mfs

加載fuse模塊到內核

modprobe fuse

掛載MFS

/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.199.129

查看掛載情況

df -hT
192.168.199.129:9421 fuse.mfs 13G 0 13G 0% /opt/mfs

優化客戶端
MFS在客戶端安裝完畢後,會生成/usr/local/mfs/bin目錄,在這個目錄下有很多命令文件,為了方便使用這些命令,可以將該路徑添加到環境變量中

vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
source /etc/profile

Mfsgetgoal命令用來查詢文件被復制的份數,利用-r命令可以對整個目錄進行遞歸,goal是指文件被復制的份數

mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 1 : 1

Mfsaetgoal命令用來設置文件被復制的份數,生產環境Chunk Server節點數量應至少大於2,文件副本數小於等於Chunk Server服務器的數量

mfssetgoal -r 2 /opt/mfs
/opt/mfs:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0

創建測試文件

cd /opt/mfs
touch test
mfsgetgoal test
test: 2

MFS監控 (在Master Server上執行)
Mfsgiserv是用python編寫的一個WEB服務器,其監聽端口是9425,可以在Master Server上通過命令/usr/local/mfs/sbin/mfscgiserv 來啟動

/usr/local/mfs/sbin/mfscgiserv #在客戶端上執行
http://192.168.199.129:9425 #通過瀏覽器訪問該地址

下圖為登錄訪問的頁面:

技術分享圖片

詳細講解MFS分布式文件系統搭建(內含源碼包)