1. 程式人生 > >超詳細搭建MFS分布式文件系統

超詳細搭建MFS分布式文件系統

以及 技術分享 com type har oop ado web服務器 df -h

MFS企業應用場景

多臺Web服務器通過NFS共享一個存儲,雖然業務功能上滿足了需求,但是在性能與容量上無法勝任更高的要求,NFS服務器不堪重負,會出現超時問題,同時NFS存在著單點故障問題。此時盡管可以用rsync同步數據到另外臺服務器上做NFS服務的備份,但對提高整個系統的性能毫無幫助。可對NFS服務器進行優化或采取別的解決方案但是,優化並不能應對日益增多的客戶端的性能要求,解決方案是采用分布式文件系統。采用分布式文件系統後,服務器之間的數據訪問不再是一對多的關系,而是多對多的關系,這樣可以使性能得到大幅提升

MFS分布式文件系統

MFS分布式文件系統即moosefs,可提供容量PB級別的共享存儲,無需昂貴的專業硬件服務器便可完成構建具有冗余容錯功能,高可用、可擴展的海量級分布式文件系統,保證數據的安全性,MFS把數據分散在多臺服務器上,但用戶看到的只是一個源。

分布式文件系統原理

分布式文件系統是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。就是把一些分散的(分布在局域網內各個計算機上)共享文件夾,集合到一個文件夾內(虛擬共享文件夾)。對於用戶來說,要訪問這些共享文件夾時,只要打開這個虛擬共享文件夾,就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾,用戶感覺不到這些共享文件是分散於各個計算機上的。

分布式文件系統優勢

  • 集中訪問
  • 簡化操作
  • 數據容災
  • 提高文件存取性能、在線擴容

MFS文件系統的組成

  • 元數據服務器(Master):在整個體系中負責管理文件系統,維護元數據。目前版本只支持單個Master服務器,存在單點故障的風險,建議采用性能穩定的服務器充當

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

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

  • 客戶端(Client):可以像掛載NFS一樣掛載MFS文件系統,其操作是相同的
    技術分享圖片

MFS讀取數據原理

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

3.客戶端向己知的Chunk Serve請求發送數據
4.Chunk Server向客戶端發送數據

MFS寫入數據原理

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

實驗環境

主機名 IP地址 操作系統 主要軟件
master 192.168.100.71 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz
metalogger 192.168.100.72 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz
chunk01 192.168.100.73 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz
chunk02 192.168.100.74 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz
chunk03 192.168.100.75 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz
client 192.168.100.76 CentOS_7.3_x86_64 mfs-1.6.27-5.tar.gz;fuse-2.9.2.tar.gz

搭建步驟

一、搭建Master Server

1、安裝相關編譯器、工具包

[root@master ~]# yum -y install gcc gcc-c++ zlib-devel

2、創建進程用戶

[root@master ~]# useradd -s /sbin/nologin mfs

3、安裝mfs軟件包

[root@master ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@master ~]# cd mfs-1.6.27/
[root@master mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

解析:
prefix                 #指定安裝目錄
with-default-user      #指定運行用戶
with-default-group     #指定運行組
disable-mfschunkserver #禁用mfs的chunk功能
disable-mfsmount       #禁言mfs的mount功能

[root@master mfs-1.6.27]# make && make install #編譯及編譯安裝

4、修改相關文件信息

[root@master ~]# cd /usr/local/mfs/etc/mfs/
[root@master mfs]# cp mfsexports.cfg.dist mfsexports.cfg #掛載以及權限設定文件
[root@master mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
[root@master mfs]# cp mfstopology.cfg.dist mfstopology.cfg #日誌文件

[root@master ~]# cd /usr/local/mfs/var/mfs/
[root@master mfs]# cp metadata.mfs.empty metadata.mfs #master元數據文件

5、詳解主配置文件

[root@master ~]# cd /usr/local/mfs/etc/mfs/
[root@master mfs]# vim mfsmaster.cfg

# WORKING_USER = mfs             #運行master服務的用戶
# WORKING_GROUP = mfs            #運行master服務的組
# SYSLOG_IDENT = mfsmaster       #在syslog中表示是mfsmaster產生的日誌,在syslog的標識,說明由master服務產生的
# LOCK_MEMORY = 0                #是否執行mlockall(),避免master進程溢出(默認為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連接的端口IP地址(默認是9420)

# MATOCL_LISTEN_HOST = *         
# MATOCL_LISTEN_PORT = 9421

# CHUNKS_LOOP_MAX_CPS = 100000 
# CHUNKS_LOOP_MIN_TIME = 300    #chunks的回環頻率(默認是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

6、詳解被掛載目錄及權限配置文件

[root@master ~]# cd /usr/local/mfs/etc/mfs/
[root@master mfs]# vim mfsexports.cfg

# Allow everything but "meta".
*                       /       rw,alldirs,maproot=0

# Allow "meta".
*                       .       rw
#詳解
根據文件的顯示,可以看出,該文件每一個條目分為三個部分
第一部分:客戶端的IP地址
第二部分:被掛載的目錄
第三部分:客戶端擁有的權限

客戶端的IP地址部分
*:代表所有的IP地址
192.168.100.71:代表單個IP地址
192.168.100.0/24:代表整個網段
192.168.100.71-192.168.100.100:代表指定網段

被掛載的目錄部分
/:標識MFS根
.:標識MFSMETA文件系統

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

7、優化路徑

[root@master ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

8、啟動服務

[root@master ~]# mfsmaster start
[root@master ~]# netstat -anpt | grep ‘mfs‘
技術分享圖片

9、編輯啟動腳本

[root@master ~]# vim /lib/systemd/system/mfs.service


[Unit]
Description=mfs
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmaster start   #啟動服務
ExecStop=/usr/local/mfs/sbin/mfsmaster stop    #關閉服務
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[root@master ~]# systemctl enable mfs.service #服務開機自啟動
[root@master ~]# systemctl stop mfs.service #關閉服務
[root@master ~]# systemctl start mfs.service #啟動服務

二、搭建MetaLogger Server

1、安裝相關編譯器、工具包

[root@metalogger ~]# yum -y install gcc gcc-c++ zlib-devel

2、創建進程用戶

[root@metalogger ~]# useradd -s /sbin/nologin mfs

3、安裝mfs軟件包

[root@metalogger ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@metalogger ~]# cd mfs-1.6.27
[root@metalogger mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@metalogger mfs-1.6.27]# make && make install

4、修改主配置文件

[root@metalogger ~]# cd /usr/local/mfs/etc/mfs/
[root@metalogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@metalogger mfs]# vim mfsmetalogger.cfg
技術分享圖片

5、優化路徑

[root@metalogger ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

6、啟動服務

[root@metalogger ~]# mfsmetalogger start
[root@metalogger ~]# netstat -anpt | grep ‘mfsmetalogger‘
技術分享圖片

三、搭建Chunk Server(三臺Chunk Server主機搭建步驟相同,其余兩臺搭建過程略……)

1、安裝相關編譯器、工具包

[root@chunk01 ~]# yum -y install gcc gcc-c++ zlib-devel

2、創建進程用戶

[root@chunk01 ~]# useradd -s /sbin/nologin mfs

3、安裝mfs軟件包

[root@chunk01 ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@chunk01 ~]# cd mfs-1.6.27
[root@chunk01 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[root@chunk01 mfs-1.6.27]# make && make install

4、修改相應配置文件

[root@chunk01 ~]# cd /usr/local/mfs/etc/mfs/
[root@chunk01 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@chunk01 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@chunk01 mfs]# vim mfschunkserver.cfg
技術分享圖片

[root@chunk01 mfs]# vim mfshdd.cfg
技術分享圖片

5、創建MFS分區目錄

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

6、優化路徑

[root@chunk01 ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

7、啟動服務

[root@chunk01 ~]# mfschunkserver start
[root@chunk01 ~]# netstat -anpt | grep ‘mfschunkserver‘
技術分享圖片

四、配置客戶端

1、安裝相關編譯器、工具包

[root@client ~]# yum -y install gcc gcc-c++ zlib-devel

2、安裝fuse軟件包

[root@client ~]# tar xvfz fuse-2.9.2.tar.gz
[root@client ~]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure && make && make install

3、設置環境變量

[root@client ~]# vim /etc/profile

#末行添加
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

[root@client ~]# source /etc/profile #重新加載系統環境變量配置文件

4、創建進程用戶

[root@client ~]# useradd -s /sbin/nologin -M mfs

5、安裝mfs軟件包

[root@client ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@client ~]# cd mfs-1.6.27
[root@client mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmaster --enable-mfsmount
[root@client mfs-1.6.27]# make && make install

6、掛載MFS文件系統

[root@client ~]# mkdir /mnt/mfs #創建掛載點
[root@client ~]# modprobe fuse #加載fuse模塊到內核
[root@client ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.100.71 #掛載MFS
[root@client ~]# df -h #查看掛載情況
技術分享圖片

7、master開啟web監控服務

[root@master ~]# mfscgiserv start

8、訪問MFS監控工具

http://192.168.100.71:9425/mfs.cgi #client端訪問web
技術分享圖片

超詳細搭建MFS分布式文件系統