多臺web服務器經過nfs共享一個存儲,雖然業務上知足需求,但在性能與容量上沒法勝任更高的要求,nfs服務器不堪重負,出現超時問題,同時也存在單點故障問題。儘管可使用rsync同步數據到另外一臺服務器上作nfs服務的備份,但對提升整個系統的性能毫無幫助。可對nfs進行優化或者採起別的解決方案,可是優化並不能知足日益增多的客戶端的性能要求。
解決方案是採用分佈式文件系統。採用分佈式文件系統後,服務器之間的數據訪問再也不是一對多的關係,而是多對多的關係(即多web服務器對多文件服務器),這樣可使性能獲得大幅提高。
MFS分佈式文件系統,即moosefs,可提供容量PB級別的共享存儲,無需昂貴的專業硬件服務器即可完成構件。具備冗餘容錯功能,高可用、可擴展的海量級別分佈式文件系統,保證數據的安全性。
MFS把數據分散在多臺服務器上,但用戶看到的只是一個源。web
分佈式文件系統是指文件系統管理的物理存儲資源不必定直接鏈接本地節點上,而是經過計算機網絡與節點相連。就是把一些分散的(分佈在局域網內各個計算機上)共享文件夾,集合到一個文件夾內(虛擬共享文件夾)。對於用戶來講,要訪問這些共享文件夾時,只要打開這個虛擬共享文件夾,就能夠看到全部鏈接到虛擬共享文件夾內的共享文件,用戶感受不到這些共享文件夾是分散於各個計算機上的。shell
組成 | 做用 |
---|---|
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告知客戶端數據寫入成功——>客戶端告知元數據服務器本次寫入完畢瀏覽器
服務器 | 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 //驗證是否掛載成功
客戶端建立文件測試:
touch /mnt/mfs/test mfsgetgoal /mnt/mfs/test /mnt/mfs/test:3
mfscgiserv
是用Python編寫的一個web服務器,其監聽端口是9425
,能夠在master server上經過一個命令/usr/loca/mfs/sbin/mfscgiserv
來啓動。用戶能夠經過瀏覽器就能夠全面監控全部客戶,chunk server、master server以及客戶端的各類操做。
http://192.168.2.11:9425
中止的順序以下:
在全部的客戶端卸載MFS文件系統——>用mfschunkserver -s命令中止chunkserver進程——>用mfsmetalogger -s中止metalogger進程——>用mfsmaster -s中止master進程
scp /usr/loca/mfs/var/mfs/* 192.168.2.11:/usr/local/mfs
cd /usr/local/mfs
/usr/local/mfs/sbin/mfsmetarestore -m metadate_ml.mfs.back -o
MFS分佈式文件系統到此模擬實驗完畢,博主純手打,你們練習的時候有問題先檢查一下是否有手誤,再去百度。作./configure的時候必定要細心,其實分清楚在哪一個IP上作的是哪一個選項,你就明白了mfs分佈式文件系統的原理了。