MFS分佈式文件系統

分佈式原理

  • 分佈式文件系統(Distributed File Systemm)是指文件系統管理的物理存儲資源不必定直接鏈接在本地節點上,而是經過計算機網絡與節點相連
  • 是把一些分散的(分佈在局域網內各個計算機上)共享文件夾,集合到一個文件夾內(虛擬共享文件夾)
  • 對於用戶來講,要訪問這些共享文件夾時,只要打開這個虛擬共享文件夾,就能夠看到全部連接到虛擬共享文件夾內的共享文件夾,用戶感受不到這些共享文件是分散在各個計算機上的
  • 分佈式文件系統的好處是集中訪問、簡化操做、數據容災,以及提升文件的存取性能。

MFS原理

  • MFS是一個具備容錯性的網絡分佈式文件系統,它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源

MFS文件系統的組成

  • 元數據服務器(Master):在整個體系中負責管理文件系統,維護元數據
  • 元數據日誌服務器(MetaLogger):備份Master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs。當Master服務器數據丟失或者損壞時,能夠從日誌服務器中取得文件,進行修復。
  • 數據存儲服務器(Chunk Server):真正存儲數據的服務器。存儲文件時,會把文件分塊保存,在數據服務器之間進行復制。數據服務器越多,能使用的「容量」就越大,可靠性就越高,性能也就越好。
  • 客戶端(Client):能夠像掛載NFS同樣掛載MFS文件系統,其操做是相同的。

MFS讀取數據的處理過程

  • 客戶端向元數據服務器發出讀請求
  • 元數據服務器把所需數據存放的位置(Chunk Server的IP地址和Chunk編號)告知客戶端
  • 客戶端向已知的Chunk Server請求發送數據
  • Chunk Server向客戶端發送數據

MFS寫入數據的處理過程

  • 客戶端向元數據服務器發送寫入請求
  • 元數據服務器與Chunk Server進行交互(只有當所需的分塊Chunks存在的時候才進行交互),但元數據服務器只在某些服務器建立新的分塊Chunks,建立成功後由Chunk Server告知元數據服務器操做成功。
  • 元數據服務器告知客戶端,能夠在哪一個Chunk Server的哪些Chunks寫入數據。
  • 客戶端向指定的Chunk Server寫入數據
  • 該Chunk Server與其餘Chunk Server進行數據同步,同步成功後Chunk Server告知客戶端數據寫入成功
  • 客戶端告知元數據服務器本次寫入完畢

實踐搭建

搭建Master Server

systemctl stop firewalld.service    //關閉防火牆
setenforce 0                        //關閉selinux
yum install gcc gcc-c++ zlib-devel -y    //安裝環境包
useradd -s /sbin/nologin mfs          //創建程序用戶
mount.cifs //192.168.80.2/shares/mfs /mnt/    //掛載軟件包
cd /mnt/
tar zxvf mfs-1.6.27-5.tar.gz -C /opt/     //解壓軟甲包到opt目錄
cd /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           //編譯安裝
cd /usr/local/mfs/etc/mfs/     //進入安裝路徑
cp mfsmaster.cfg.dist mfsmaster.cfg             //改名開啓master配置文件
cp mfsexports.cfg.dist mfsexports.cfg            //改名開啓掛載權限配置文件
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg       //改名開啓源數據日誌文件配置
cd ../../var/mfs/
cp metadata.mfs.empty metadata.mfs           //master服務器運行時產生的源數據將寫入此文件
ln -s /usr/local/mfs/sbin/mfsmaster /usr/local/sbin/    //創建連接文件,方便系統識別命令
mfsmaster start         //啓動服務
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
exports file has been loaded
mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly              //成功啓動
ps -ef | grep mfs                          //查看進程是否開啓
mfs       15839      1  0 15:20 ?        00:00:00 mfsmaster start    //進程已開啓
root      15844   1570  0 15:22 pts/0    00:00:00 grep --color=auto mfs
mfsmaster -s                                //中止服務
sending SIGTERM to lock owner (pid:15839)
waiting for termination ... terminated      //成功關閉
ps -ef | grep mfs    //查看進程是否關閉
root      15847   1570  0 15:23 pts/0    00:00:00 grep --color=auto mfs 
/usr/local/mfs/sbin/mfsmaster start     //再次啓動服務

搭建Metalogger Server

systemctl stop firewalld.service      //關閉防火牆
setenforce 0                          //關閉salinux
useradd -s /sbin/nologin mfs          //建立程序用戶
yum install zlib-devel gcc gcc-c++ -y     //安裝環境包
mount.cifs //192.168.80.2/shares/mfs /mnt/    //掛載軟件包
cd /mnt/
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-mfschunkserver \            //關閉節點服務(在存儲節點使用)
--disable-mfsmount                    //關閉掛載功能(在客戶端使用)
make && make install                 //編譯安裝d /usr/local/mfs/etc/mfs/
cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg      //改名開啓源數據日誌文件配置
vim mfsmetalogger.cfg                            //編輯配置文件
...
MASTER_HOST = 192.168.80.10            //指定master地址
...
:wq
/usr/local/mfs/sbin/mfsmetalogger start         //啓動服務
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly       //成功啓動
ps -ef | grep mfs                       //查看進程是否開啓
mfs       16180      1  0 16:11 ?        00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
root      16182   1897  0 16:12 pts/0    00:00:00 grep --color=auto mfs

搭建兩臺Chunk Server,兩臺的操做步驟徹底同樣

systemctl stop firewalld.service       //關閉防火牆
setenforce 0
yum install zlib-devel gcc gcc-c++ -y      //安裝環境包
useradd -s /sbin/nologin mfs                 //建立程序用戶
mount.cifs //192.168.80.2/shares/mfs /mnt/    //掛載軟件包
cd /mnt/
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-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.80.10                 //指向主服務器
...
:wq
vim mfshdd.cfg                     //編輯硬盤空間配置文件
...
/data                              //編輯數據存放路徑
:wq
mkdir /data                      //建立數據存放目錄
chown -R mfs:mfs /data            //添加屬主屬組
/usr/local/mfs/sbin/mfschunkserver start        //啓動
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts     
mfschunkserver daemon initialized properly             //成功開啓
ps -ef | grep mfs              //查看程序是否啓動
mfs        6127      1  0 16:58 ?        00:00:00 /usr/local/mfs/sbin/mfschunkserver start
root       6153   1467  0 17:00 pts/0    00:00:00 grep --color=auto mfs

客戶client端配置

systemctl stop firewalld.service     //關閉防火牆  
setenforce 0                         //關閉selinux 
yum install gcc gcc-c++ zlib-devel -y     //安裝環境包
mount.cifs //192.168.80.2/shares/mfs /mnt/    //掛載文件目錄
cd /mnt/
tar zxvf 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    //添加環境變量聲明
:wq
source /etc/profile                                  //從新加載化境變量
useradd -s /sbin/nologin mfs                            //建立程序用戶 
cd /mnt/
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 \                    //禁用chunk服務
--enable-mfsmount                            //開啓掛載服務
make && make install                       //編譯安裝
mkdir /opt/mfs                   //建立掛載點,掛載master空間
modprobe fuse                  //加載fuse模塊到內核
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.80.10       //掛載master空間
df -hT                                            //查看磁盤空間
...
192.168.80.10:9421        fuse.mfs   37G     0   37G    0% /opt/mfs    //成功掛載
vim /etc/profile        //添加環境變量,優化啓動
...
export PATH=/usr/local/mfs/bin:$PATH         //編輯環境變量聲明
:wq
source /etc/profile                          //從新加載環境變量文件
mfsgetgoal -r /opt/mfs     //Mfsgetgoal命令用來查詢文件被複制的份數,利用-r命令能夠對整個目錄進行遞歸,goal是指文件被複制的份數
/opt/mfs:
directories with goal 1 : 
mfssetgoal -r 2 /opt/mfs         //指定複製兩份
/opt/mfs:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
/usr/local/mfs/sbin/mfscgiserv     //執行啓動監控

在瀏覽器訪問服務

MFS分佈式文件系統

相關文章
相關標籤/搜索