MFS 分佈式文件系統

1、MFS企業應用場景

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

2、MFS分佈式文件系統的原理

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

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

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

3、模擬搭建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.2七、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沒關係,參考本人博客http://www.javashuo.com/article/p-sdzjqtdn-dt.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 //驗證是否掛載成功

4、MFS的一些經常使用操做

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

客戶端建立文件測試:

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

5、MFS監控

mfscgiserv是用Python編寫的一個web服務器,其監聽端口是9425,能夠在master server上經過一個命令/usr/loca/mfs/sbin/mfscgiserv來啓動。用戶能夠經過瀏覽器就能夠全面監控全部客戶,chunk server、master server以及客戶端的各類操做。
http://192.168.2.11:9425

6、MFS維護與災難恢復

  1. MFS集羣的啓動與中止
    啓動的順序以下:
    啓動mfsmaster進程——>啓動全部的mfschunkserver進程——>啓動mfsmetalogger進程——>在全部的客戶端掛載MFS文件系統

中止的順序以下:
在全部的客戶端卸載MFS文件系統——>用mfschunkserver -s命令中止chunkserver進程——>用mfsmetalogger -s中止metalogger進程——>用mfsmaster -s中止master進程

  1. 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分佈式文件系統的原理了。

相關文章
相關標籤/搜索