NFS網絡文件系統在性能與容量上沒法勝任更高的要求,而本篇講的MFS(MooseFS)能夠提供容量PB級別的共享存儲,無需昂貴的專業硬件服務器,自身就擁有冗餘功能及動態擴容功能,能保證數據的安全性。`
分佈式文件系統(distributed file system)是指文件系統管理的物質存儲資源不必定直接鏈接在本地節點上,而是經過計算機網絡與節點相連。簡單說就是把一些分佈在局域網內各個計算機上的共享文件夾,集合到一個虛擬共享文件夾內,客戶端訪問只須要打開這個虛擬共享文件夾便可。 分佈式文件系統的優勢:集中訪問、簡化操做、數據容災、提升了文件的存儲性能。
MFS是一個具備容錯性的網絡分佈式文件系統,它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一整合的資源。
* 元數據服務器(Master):在整個體系中負責管理文件系統,維護元數據。 * 元數據日誌服務器(MetaLogger):備份Master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs 當Master服務器數據丟失或者損壞時,能夠從日誌服務器中取得進行恢復。 * 數據存儲服務器(Chunk server):真正存儲數據的服務器。將文件分塊保存,並相互進行復制。 * 客戶端(Client):能夠像掛載NFS同樣掛載MFS文件系統,其操做是相同的。
* 客戶端向元數據服務器發出讀請求。 * 元數據服務器把所需數據存放的位置(Chunk server的IP地址和Chunk編號)告知客戶端。 * 客戶端向已知的Chunk server請求發送數據。 * Chunk server向客戶端發送數據。
* 客戶端向元數據服務器發送寫入請求。 * 元數據服務器與Chunk server進行交互,但元數據服務器只在某些服務器建立新的分塊Chunks,建立成功後由Chunk server告知元數據服務器操做成功。 * 元數據服務器告知客戶端,能夠在哪一個Chunk server的哪些Chunks寫入數據。 * 客戶端向指定的Chunk server寫入數據。 * 該Chunk server與其餘Chunk server進行數據同步,同步成功後Chunk server告知客戶端數據寫入成功。 * 客戶端告知元數據服務器本次寫入完畢。
主機 | 操做系統 | IP地址 | 主要軟件 |
---|---|---|---|
Master Server | CentOS7.5 x86_64 | 192.168.138.138 | mfs-1.6.27-5.tar.gz |
Metalogger Server | CentOS7.5 x86_64 | 192.168.138.128 | mfs-1.6.27-5.tar.gz |
Chunk Server01 | CentOS7.5 x86_64 | 192.168.138.130 | mfs-1.6.27-5.tar.gz |
Chunk Server02 | CentOS7.5 x86_64 | 192.168.138.139 | mfs-1.6.27-5.tar.gz |
Client | CentOS7.5 x86_64 | 192.168.138.140 | mfs-1.6.27-5.tar.gz/fuse-2.9.2.tar.gz |
安裝環境包:c++
* yum install -y zlib-devel gcc gcc-c++ #安裝所需的環境包 * useradd mfs -s /sbin/nologin #建立用戶mfs
解壓下載好的軟件包並進行手工編譯安裝:vim
* tar zxvf mfs-1.6.27-5.tar.gz -C /opt/ * cd mfs-1.6.27 #切換到opt/mfs-1.6.27下插入以下配置 * ./configure \ --prefix=/usr/local/mfs \ --with-default-user=mfs \ --with-default-group=mfs \ --disable-mfschunkserver \ --disable-mfsmount * make && make install
切換到配置文件下複製並去掉模板的dist後綴,開啓配置文件:瀏覽器
* cd /usr/local/mfs/etc/mfs/ 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
* vim mfsmaster.cfg #不須要改動 * vim mfsexports.cfg #不須要改動
關閉防火牆、關閉加強×××:安全
* systemctl stop firewalld.service * setenforce 0
* /usr/local/mfs/sbin/mfsmaster start #開啓服務 * ps -ef | grep mfs #查看監聽狀態 * /usr/local/mfs/sbin/mfsmaster -s #中止
安裝編譯環境、關閉防火牆、關閉加強×××:服務器
* yum install -y zlib-devel gcc gcc-c++ * systemctl stop firewalld.service * setenforce 0
建立mfs用戶,解壓軟件包進行手工編譯:網絡
* useradd -s /sbin/nologin mfs * tar xzvf mfs-1.6.27-5.tar.gz -C /opt/ * 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
切換到配置文件下複製並去掉模板的dist後綴,開啓配置文件架構
* cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
* vim mfsmetalogger.cfg MASTER_HOST = 192.168.138.138 去掉#註釋 添加主機地址
* cd /usr/local/mfs/var/mfs mv metadata.mfs.empty metadata.mfs * /usr/local/mfs/sbin/mfsmetalogger start #開啓服務
先搭建第一臺chunk server:分佈式
* systemctl stop firewalld.service * setenforce 0 * yum install -y zlib-devel gcc gcc-c++ * useradd -s /sbin/nologin mfs * tar xzvf mfs-1.6.27-5.tar.gz -C /opt/
* cd /opt/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.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfg
* vim mfschunkserver.cfg MASTER_HOST = 192.168.138.138 去掉#註釋 添加主機地址
* vim mfshdd.cfg /data #末尾添加`` 提供存儲空間 * mkdir /data * chown -R mfs:mfs /data
* /usr/local/mfs/sbin/mfschunkserver start * netstat -ntap * 提示: 第一臺 chunk server搭建完成,第二臺和第一臺安裝配置是同樣的,這裏就再也不寫了。
* systemctl stop firewalld.service * setenforce 0 * yum install -y zlib-devel * tar xzvf fuse-2.9.2.tar.gz -C /opt/
* cd /opt/fuse-2.9.2 ./configure * make && make install
* vim /etc/profile export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH #末尾插入 * source /etc/profile
* 安裝mfs客戶端: * useradd mfs -s /sbin/nologin * tar zxvf mfs-1.6.27-5.tar.gz -C /opt/ * cd /opt/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 /opt/mfs * modprobe fuse #加載fuse模塊到內核 * /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.138.138 #指向master主機 * df -hT #查看掛載 * umount /opt/mfs #須要時可解掛載
* 優化客戶端: * vim /etc/profile * export PATH=/usr/local/mfs/bin:$PATH #設置環境變量 在末尾插入 * cd /opt/mfs(可在mfs裏寫入內容進行驗證:echo "this is test" > test.txt) * source /etc/profile #從新加載 * mfsgetgoal -r /opt/mfs/ * mfsgetgoal -r 2 /opt/mfs/ #複製2份文件
* /usr/local/mfs/sbin/mfscgiserv * http://192.168.138.138:9425 #客戶端瀏覽器上進行訪問測試
* 上述測試訪問到的MFS監控表中各部分的含義以下: Info部分:顯示了MFS的基本信息 Server部分:列出現有的Chunk Server Disks部分:列出每一臺Chunk Server的磁盤目錄及使用量 Exports部分:列出被共享的目錄,便可被掛載的目錄 Mounts部分:顯示被掛載的狀況 Operations部分:顯示正在執行的操做 Master Charts部分:顯示Master Server的操做狀況,包括讀取、寫入、建立目錄、刪除目錄等