MFS 分布式文件系統


一、MFS企業應用場景

多台web服務器通過nfs共享一個存儲,雖然業務上滿足需求,但在性能與容量上無法勝任更高的要求,nfs服務器不堪重負,出現超時問題,同時也存在單點故障問題。盡管可以使用rsync同步數據到另一台服務器上做nfs服務的備份,但對提高整個系統的性能毫無幫助。可對nfs進行優化或者采取別的解決方案,但是優化並不能滿足日益增多的客戶端的性能要求。
解決方案是采用分布式文件系統。采用分布式文件系統后,服務器之間的數據訪問不再是一對多的關系,而是多對多的關系(即多web服務器對多文件服務器),這樣可以使性能得到大幅提升。
MFS分布式文件系統,即moosefs,可提供容量PB級別的共享存儲,無需昂貴的專業硬件服務器便可完成構件。具有冗余容錯功能,高可用、可擴展的海量級別分布式文件系統,保證數據的安全性。
MFS把數據分散在多台服務器上,但用戶看到的只是一個源。

二、MFS分布式文件系統的原理

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

  • 好處:集中訪問、簡化操作、數據容災、提高文件存取性能、在線擴容。
  • MFS時一個具有容錯性的網絡分布式文件系統,它把數據分散存放在多個物理服務器上,而呈獻給用戶的是一個統一的資源,對於這個統一的源,可掛載使用。
組成 作用
master 元數據服務器 在整個系統中負責管理文件系統,維護元數據。
metalogger 元數據日志服務器 備份master服務器的變化日志文件,文件類型為changelog_ml.*.mfs。當master服務器數據丟失或損壞,可以從日志服務器中取得文件恢復。
chunk server 數據存儲服務器 真正存儲數據的服務器。存儲文件時,會把文件分塊保存,並在數據服務器之間復制,數據服務器越多,能使用的容量越大,可靠性越高,性能越好。
客戶端 client 可以像掛載nfs一樣掛載mfs文件系統,操作相同。
  • MFS 讀取數據的處理過程
    客戶端(client)向元數據服務器(master)發出讀請求——>元數據服務器把所需數據存放的位置(chunk server的IP地址和chunk編號)告知客戶端——>客戶端向已知的chunk server請求發送數據——>chunk server向客戶端發送數據

  • MFS 寫入數據的處理過程
    客戶端(client)向元數據服務器(master)發送寫請求——>元數據服務器與chunk server進行交互(只有當所需的分塊chunks存在的時候進行這個交互),但元數據服務器只在某些服務器創建新的分塊chunks,創建完告知元數據服務器操作成功——>元數據服務器告知客戶端,可以在哪個chunk server的哪些chunks寫入數據——>客戶端向指定的chunk server寫入數據——>該chunk server與其他chunk server進行數據同步,之后chunk server告知客戶端數據寫入成功——>客戶端告知元數據服務器本次寫入完畢

三、模擬搭建mfs文件系統

服務器 IP 提前准備
master 192.168.2.11 mfs-1.6.27
metalogger 192.168.2.12 mfs-1.6.27
chunk server1 192.168.2.13 mfs-1.6.27 增加一塊5G硬盤
chunk server2 192.168.2.14 mfs-1.6.27 增加一塊5G硬盤
chunk server3 192.168.2.15 mfs-1.6.27 增加一塊5G硬盤
client 192.168.2.16 mfs-1.6.27、fuse-2.9.2

由於自己搭建的時候不太方便同時寫博客,搭建成功了才寫的,大家學習搭建的時候完全可以將這部分復制成一個腳本執行。當然前提你要做好上面的環境准備,自行百度下載,(不用糾結版本)

1.master 配置

useradd -M -s /sbin/nologin mfs
yum -y install zlib-devel
tar -xf mfs-1.6.27-5.tar.gz -C /usr/src/
cd /usr/src/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/
ls
mfsexports.cfg.dist    mfsmetalogger.cfg.dist
mfsmaster.cfg.dist     mfstopology.cfg.dist
#被掛載目錄及權限配置文件
cp mfsexports.cfg.dist mfsexports.cfg 
#主配置文件   
cp mfsmaster.cfg.dist mfsmaster.cfg      
cp mfstopology.cfg.dist mfstopology.cfg
cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs
/usr/local/mfs/sbin/mfsmaster start
#驗證是否啟動
ps aux |grep mfs|grep -v grep

2.搭建 metalogger server(換虛擬機了,注意,對應IP,別搞混了)

useradd -M -s /sbin/nologin mfs
yum -y install zlib-devel
tar xf mfs-1.6.27-5.tar.gz -C /usr/src/
cd /usr/src/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

vim mfsmetalogger.cfg
MASTER_HOST=192.168.2.11 //元數據服務器的master的IP地址
這個步驟用sed能改,自己思考一下,但建議還是親自打開修改,以免失誤
ll -d /usr/local/mfs/var/mfs/
/usr/local/mfs/sbin/mfsmetalogger start
ps aux |grep mfs |grep -v grep

3.搭建三台chunk server(三台方法相同)

fdisk -l|grep /dev/
fdisk /dev/sdb
接下來的步驟是對/dev/sdb分區和格式化,分一個區,大小直接回車,w保存
partx -a /dev/sdb
mkfs.ext4 /dev/sdb1
mkdir /data
mount /dev/sdb1 /data/
chown -R mfs.mfs /data/
df -hT

man partx
The partx is not an fdisk program -- adding and removing partitions does not change the disk, it just tells the kernel about the presence and numbering of on-disk partitions.

useradd -M -s /sbin/nologin mfs
yum -y install zlib-devel
tar xf mfs-1.6.27-5.tar.gz -C /usr/src/
cd /usr/src/mfs-1.6.27/
./configure --prefix=/usr/loca/mfs --with-default-user-mfs --with-default-group=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount && make && make install
cd /usr/local/mfs/etc/mfs
ls
mfschunkserver.dist    mfshdd.cfg.dist

cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST=192.168.2.11
可以用sed解決    sed -i -e '/MASTER_HOST/s/#//;/MASTER_HOST/s/mfsmaster/192.168.2.11/' mfschunkserver.cfg

vim mfshdd.cfg
/data    //添加此行,/data是給mfs的分區,生產環境最好是使用一個獨立的分區或獨立的磁盤掛載到此目錄
可以用 echo '/data' >>/usr/local/mfs/etc/mfs/mfshdd.cfg

/usr/local/mfs/sbin/mfschunkserver start
ps aux |grep mfs |grep -v grep

由於三台服務器配置相同,為了提高效率,可以將我這段代碼整理成shell腳本實現,在完成分區和格式化后,執行此腳本。
還有一種好方法,用ansible實現,將這些IP加入主機清單,快的很,我寫到這兒的時候,已經很不耐煩了,希望大家能夠用ansible實現。不知道ansible不要緊,參考本人博客https://www.cnblogs.com/liuwei-xd/p/11108837.html

4.客戶端(client)的配置

useradd -M -s /sbin/nologin mfs
yum -y install zlib-devel
tar xf fuse-2.9.2.tar.gz -C /usr/src/
tar xf mfs-1.6.27-5.tar.gz -C /usr/src/

cd /usr/src/fuse-2.9.2/
./configure && make && make install
cd
echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> /etc/profile
echo "export PATH=$PATH:/usr/local/mfs/bin/" >> /etc/profile
./etc/profile
cd /usr/src/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 /mnt/mfs
modprobe fuse
mfsmount /mnt/mfs/ -H 192.168.2.11
df -hT //驗證是否掛載成功

四、MFS的一些常用操作

  1. mfsgetgoal命令:用來查詢文件被復制的份數。-r:可以對整個目錄遞歸式查詢
  2. mfssetgoal命令:可以設置文件被復制的份數。生產環境里面chunk server的數量至少大於2,文件副本得小於等於chunk server的數量。

客戶端創建文件測試:

touch /mnt/mfs/test
mfsgetgoal /mnt/mfs/test
/mnt/mfs/test:3

五、MFS監控

mfscgiserv是用Python編寫的一個web服務器,其監聽端口是9425,可以在master server上通過一個命令/usr/loca/mfs/sbin/mfscgiserv來啟動。用戶可以通過瀏覽器就可以全面監控所有客戶,chunk server、master server以及客戶端的各種操作。
http://192.168.2.11:9425

六、MFS維護與災難恢復

  1. MFS集群的啟動與停止
    啟動的順序如下:
    啟動mfsmaster進程——>啟動所有的mfschunkserver進程——>啟動mfsmetalogger進程——>在所有的客戶端掛載MFS文件系統

停止的順序如下:
在所有的客戶端卸載MFS文件系統——>用mfschunkserver -s命令停止chunkserver進程——>用mfsmetalogger -s停止metalogger進程——>用mfsmaster -s停止master進程
2. MFS災難恢復
直接斷電后,會導致master可能無法啟動,在master端可以用/usr/loca/mfs/sbin/mfsmetarestore -a恢復
3.master發生故障時,可以從metalogger中恢復master,步驟如下:
1)安裝以前配置再安裝一台mfsmaster
2)將metalogger上/usr/local/mfs/var/mfs/目錄下的文件復制到mfsmaster相應的目錄中
在metalogger端執行
scp /usr/loca/mfs/var/mfs/* 192.168.2.11:/usr/local/mfs
在master端執行
cd /usr/local/mfs
/usr/local/mfs/sbin/mfsmetarestore -m metadate_ml.mfs.back -o
會顯示一串ok

MFS分布式文件系統到此模擬實驗完畢,博主純手打,大家練習的時候有問題先檢查一下是否有手誤,再去百度。做./configure的時候一定要細心,其實分清楚在哪個IP上做的是哪個選項,你就明白了mfs分布式文件系統的原理了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM