MFS分佈式文件系統html
在公司內部經過nfs方式共享一個服務器的存儲空間,使得nfs服務器不堪重負,常常出現超時問題,爲了提升整個系統的性能,因此採用mfs分佈式文件系統,mfs分佈式文件系統是一個具備容錯功能、高可用、可擴展的海量級分佈式文件系統,mfs把數據分散在多臺服務器中,但用戶看到的只有一個源。python
MFS讀取數據的處理過程:linux
1.client向master請求讀數據web
2.master把所需數據存放的位置(chunk-server的ip及chunks編號)告知clientvim
3.client向chunk-server請求發送數據瀏覽器
4.chunk-server給client發送數據bash
MFS寫入數據的處理過程:服務器
1.client向master發送寫請求網絡
2.master與chunk-server交互,確認能提供寫入數據的chunk-server及其chunks編號分佈式
3.master將確認好的chunk-server的ip及chunks編號發給client
4.client將數據寫入到chunk-server的chunks編號的磁盤上
5.chunk-server與其餘chunk-server進行數據同步,成功後告知client寫入成功
6.client告知master寫入結束
1.搭建元數據服務器mster server:192.168.100.157
yum -y install zlib-devel 安裝依賴包
useradd -s /sbin/nologin mfs 建立用戶
wget ftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz 下載源碼包
tar zxf mfs-1.6.27-5.tar.gz 解壓
cd 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/ cd到配置文件目錄
cp mfsmaster.cfg.dist mfsmaster.cfg 複製主配置文件,無需更改
cp mfsexports.cfg.dist mfsexports.cfg 複製被掛載目錄及權限配置文件
cp mfstopology.cfg.dist mfstopology.cfg 複製配置文件
cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs 複製配置文件
ls
/usr/local/mfs/sbin/mfsmaster start 啓動masterserver
netstat -utpln |grep mfs 查看其端口
##關閉mfsmaster使用/usr/local/mfs/sbin/mfsmaster -s 關閉masterserver
2.搭建元數據日誌服務器metalogger:192.168.100.156
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz
tar zxf mfs-1.6.27-5.tar.gz
cd 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 複製配置文件
sed -i '/mfsmaster/a MASTER_HOST =192.168.100.157' mfsmetalogger.cfg 修改masterserver服務器的地址
vim mfsmetalogger.cfg ##驗證修改
/usr/local/mfs/sbin/mfsmetalogger start 啓動服務,關閉服務將start換成-s
ps aux |grep mfs 查看進程
3.搭建數據存儲服務器chunk-server:192.168.100.153-155
1)chunk1:192.168.100.155
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz
tar zxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--disable-mfsmount
make &&make install
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.distmfschunkserver.cfg 複製主配置文件
cp mfshdd.cfg.dist mfshdd.cfg 複製掛載信息的配置文件
sed -i '/BIND_HOST/a MASTER_HOST =192.168.100.157' mfschunkserver.cfg 修改主配置文件中的masterserver
vim mfschunkserver.cfg 驗證
echo "/data" >>mfshdd.cfg 在掛載信息的配置文件中添加須要共享的目錄,最好此目錄是獨立的磁盤或者分區
mkdir /data
chown -R mfs:mfs /data/ 受權
/usr/local/mfs/sbin/mfschunkserverstart 啓動服務,中止服務將start換成-s
ps aux |grep mfs 查看進程
cd
編寫腳本:方便別的數據存儲服務器的配置
exit ##從新登陸
cat .bash_history>config_chunk_mfs.sh ##將歷史命令重定向到腳本中
vi config_chunk_mfs.sh ##修改內容以下,注意刪除兩vim命令
#!/bin/bash
#by linuxfan.cn 2016.3.21
yum -y install zlib-devel
useradd -s /sbin/nologin mfs
wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz
tar zxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
make &&make install
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.distmfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
sed -i '/BIND_HOST/a MASTER_HOST =192.168.100.157' mfschunkserver.cfg
echo "/data" >>mfshdd.cfg
mkdir /data
chown -R mfs:mfs /data/
/usr/local/mfs/sbin/mfschunkserver start
ps aux |grep mfs
cd
:wq
2)配置chunk2及chunk3:192.168.100.154-153
scp root@192.168.100.155:/root/config_chunk_mfs.sh ./ 下載chunk1的腳本到本地
sh -x config_chunk_mfs.sh 執行腳本
4.配置client端口:192.168.100.152
yum -y install zlib-devel
wgetftp://ftp.linuxfan.cn/tools/fuse-2.9.2.tar.gz mfs客戶端依賴於FUSE
wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz
tar zxf fuse-2.9.2.tar.gz 編譯安裝fuse
cd fuse-2.9.2
./configure &&make &&makeinstall
cd
echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH">>/etc/profile 設置環境變量
source /etc/profile 加載環境變量
echo $PKG_CONFIG_PATH 查看環境變量
useradd -s /sbin/nologin mfs 建立用戶
tar xf mfs-1.6.27-5.tar.gz 編譯安裝mfs
cd 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
cd
mkdir /mnt/mfs 建立掛載點
modprobe fuse 加載fuse模塊到內核
lsmod |grep fuse 查看模塊
/usr/local/mfs/bin/mfsmount /mnt/mfs -H192.168.100.157 掛載mfs
df -h 查看掛載狀況
echo "exportPATH=/usr/local/mfs/bin:$PATH" >>/etc/profile 客戶端安裝完畢後,會生成/usr/local/mfs/bin/目錄,爲了方便使用mfs的命令,須要將其加入到環境變量中
source /etc/profile 加載環境變量
echo $PATH 查看環境變量
5.啓用MFS監控:192.168.100.157
mfscgiserv是用python編寫的web服務,監聽端口9425:
/usr/local/mfs/sbin/mfscgiserv 啓動
netstat -utpln |grep 9425 查看端口
使用瀏覽器訪問:http://192.168.100.157:9425
6.MFS-client客戶端的使用:
sed -i '47aMANPATH /usr/local/mfs/share/man'/etc/man.config ##爲mfs的命令添加man幫助
man mfsmount ##查看幫助
mfsgetgoal -r /mnt/mfs/ 查看文件在存儲服務器複製的份數, -r 表示遞歸
mfssetgoal -r 2 /mnt/mfs/ ##設置文件複製的份數,份數必須小於等於存儲服務器的數量
cd /mnt/mfs/ cd到掛載點
touch test 建立測試文件
mfsgetgoal test 查看測試文件複製幾份
7.維護MFS及災難恢復:
1)MFS集羣的啓動與中止:
MFS的啓動順序:master元數據服務器-->chunkserver存儲服務器-->metalogger元數據日誌服務器-->client客戶端
MFS中止的順序:client(umount)客戶端-->chunkserver(-s)存儲服務器-->metalogger(-s)元數據日誌服務器-->master(-s)元數據服務器
2)恢復master:新安裝mfsmaster一樣配置-->複製metalogger的配置文件-->合併元數據changelogs
scproot@192.168.100.156:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
/usr/local/mfs/sbin/mfsmetarestore -mmetadata_ml.mfs.back -o metadata.mfs chagelog_ml.*.mfs
注:若更換master元數據服務器,存儲服務器和客戶端須要從新更改master服務器的ip地址
3)若直接斷電可能致使master有可能沒法啓動,能夠在master上執行/usr/local/mfs/sbin/mfsmetarestore-a進行修復
mfs是一個具備容錯性的網絡分佈式文件系統,他把數據分佈在多臺物理服務器中,而呈現給用戶的則是一個源;
mfs文件系統的組成包括元數據服務器master、元數據日誌服務器metalogger、數據存儲服務器chunk server、客戶端client;
元數據服務器master須要用到的配置文件有兩個,分別是mfsmaster.cfg和mfsexports.cfg;
在元數據服務器master發生故障時,能夠從metalogger日誌服務器中恢復master;
可使用keepalived雙機熱備實現master服務器的高可用;
注意在客戶端在掛載點建立文件時,能夠設置此文件在存儲服務器的複製份數,如有兩臺存儲服務器(每臺的共享目錄容量爲10G),客戶端數據複製兩份,那麼這兩個存儲服務器都會存在客戶端建立的文件,此時兩臺存儲服務器的容量就是10G;三臺10G存儲服務器時,客戶端文件複製兩份,那麼存儲的總容量就是20G;
http://www.open-open.com/lib/view/open1375192526108.html 對比文件系統的區別
1.模擬一臺數據存儲服務器宕機,測試mfs文件系統;
2.實時增長一臺數據存儲服務器,驗證mfs擴容結果;
3.模擬master發生故障,從metalogger中恢復master;