分佈式
1、簡介
分佈式文件系統(Distributed File System) 是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。簡單來說就是把一些分散的(分佈在局域網內各個計算機上) 共享文件夾, 集合到一個文件夾內(虛擬共享文件夾)。 對於用戶來說, 要訪問這些共享文件夾時, 只要打開這個虛擬共享文件夾, 就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾, 用戶感覺不到這些共享文件是分散於各個計算機上的。分佈式文件系統的好處是集中訪問、簡化操作、數據容災、提高文件存取性能
2、分佈式優勢
- 集中訪問
- 簡化操作
- 數據容災
- 提高文件存儲性能
MFS分佈式存儲
1、簡介
MFS 正式推出是在2008 年 5 月, 是一個具有容錯功能的、 高可用、 可擴展的海量級分佈式文件系統。 MFS 把數據分散在多臺服務器上, 但用戶看到的只是一個源。 MFS 也像其他類 UNIX 文件系統一樣,包含了層級結構、 文件屬性, 可以創建特殊的文件(塊設備、 字符設備、 管道、 套接字)、符號鏈接和硬鏈接
2、MFS原理
MFS 是一個具有容錯性的網絡分佈式文件系統, 它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源
3、MFS文件系統的組成
- 元數據服務器(Master): 在整個體系中負責管理文件系統, 維護元數據
- 元數據日誌服務器(MetaLogger): 備份 Master 服務器的變化日誌文件, 文件類型爲changelog_ml.*.mfs。 當 Master 服務器數據丟失或者損壞,可以從日誌服務器中取得文件恢復
- 數據存儲服務器(Chunk Server): 真正存儲數據的服務器。 存儲文件時, 會把文件分塊保存, 並在數據服務器之間複製, 數據服務器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。
- 客戶端(Client): 可以像掛載 NFS 一樣掛載 MFS 文件系統, 其操作是相同的
4、MFS 讀取數據的處理過程
- 客戶端向元數據服務器發出讀請求。
- 元數據服務器把所需數據存放的位置(Chunk Server 的 IP 地址和 Chunk 編號) 告知客戶端。
- 客戶端向已知的 Chunk Server 請求發送數據。
- Chunk Server 向客戶端發送數據。
5、MFS 寫入數據的處理過程
- 客戶端向元數據服務器發送寫入請求。
- 元數據服務器與 Chunk Server 進行交互(只有當所需的分塊 Chunks 存在的時候才進行這個交互),但元數據服務器只在某些服務器創建新的分塊 Chunks,創建成功後由Servers 告知元數據服務器操作成功
- 元數據服務器告知客戶端, 可以在哪個 Chunk Server 的哪些 Chunks 寫入數據。
- 客戶端向指定的 Chunk Server 寫入數據
- 該 Chunk Server 與其他 Chunk Server 進行數據同步, 同步成功後 Chunk Server 告知客戶端數據寫入成功。
- 客戶端告知元數據服務器本次寫入完畢。
實驗環境
1、基本組成架構拓撲圖
2、IP地址規劃
主機名 | 操作系統 | IP地址 |
---|---|---|
mfsmaster | CentOS 7.6 | 192.168.7.128 |
metalogger | CentOS 7.6 | 192.168.7.129 |
chunk1 | CentOS 7.6 | 192.168.7.134 |
chunk2 | CentOS 7.6 | 192.168.7.138 |
chunk3 | CentOS 7.6 | 192.168.7.135 |
client | CentOS 7.6 | 192.168.7.157 |
MFS安裝部署
實驗所需安裝包:
鏈接:https://pan.baidu.com/s/1dvmx5McKBqNfXfdkd07deg
提取碼:p42o
1、環境準備(所有服務器)
(1)關閉防火牆
(2)關閉核心功能
(3)配置主機名
(4)配置hosts
(5)將安裝包上傳至/opt目錄下
2、搭建Master Server
(1)安裝依賴包
[root@mfsmaster ~]# hostnamectl set-hostname mfsmaster
(2)創建用戶
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
(3)安裝源碼包
[root@mfsmaster ~]# cd /opt
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/
[root@mfsmaster moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@mfsmaster moosefs-3.0.100]# make && make install
(4)複製master配置文件,啓動服務
[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@mfsmaster mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@mfsmaster mfs]# cp mfstopology.cfg.sample mfstopology.cfg
[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs
[root@mfsmaster mfs]# chown mfs:mfs /usr/local/mfs/var/mfs
#啓動
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
[root@mfsmaster mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 7028/mfmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 7028/mfmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 7028/mfmaster
3、搭建MetaLogger server
(1)安裝相關依賴包
[root@metalogger ~]# yum -y install gcc zlib-devel
(2)創建用戶
[root@metalogger ~]# useradd -s /sbin/nologin -M mfs
(3)安裝源碼包 ##上傳到/opt目錄
[root@metalogger ~]# cd /opt
[root@metalogger opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@metalogger opt]# cd /opt/moosefs-3.0.100/
[root@metalogger moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@metalogger moosefs-3.0.100]# make && make install
(4)複製metalogger主配置文件
[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
(5)修改metalogger主配置文件, 指定master地址
[root@metalogger mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.7.128
(6)啓動服務
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@metalogger mfs]# netstat -anpt | grep mfs
tcp 0 0 192.168.7.129:48212 192.168.7.128:9419 ESTABLISHED 7057/mfmetalogger
4、搭建chunkserver1、chunkserver2、chunkserver3
(1)安裝相關依賴包
[root@chunk1 ~]# yum -y install gcc zlib-devel
(2)創建用戶
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
(3)安裝源碼包
[root@chunk1 ~]# cd /opt
[root@chunk1 opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@chunk1 opt]# cd /opt/moosefs-3.0.100/
[root@chunk1 moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[root@chunk1 moosefs-3.0.100]# make && make install
(4)複製mfschunk配置文件
[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg
(5)修改mfschunk主配置文件, 指定master
[root@chunk1 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.7.128
[root@chunk1 mfs]# vi mfshdd.cfg
/data
[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data
(6)啓動服務
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
[root@chunk1 mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 7187/mfchunkserver
tcp 0 0 192.168.7.134:47880 192.168.7.128:9420 ESTABLISHED 7187/mfchunkserver
5、搭建client
(1)安裝相關依賴包
[root@client ~]# yum -y install gcc zlib-devel
(2)安裝FUSE
[root@client ~]# cd /opt
[root@client opt]# tar zxvf fuse-2.9.2.tar.gz
[root@client opt]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure
[root@client fuse-2.9.2]# make && make install
(3)設置環境變量
[root@client ~]# vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client ~]# source /etc/profile
(4)安裝MFS客戶端
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
[root@client ~]# cd /opt
[root@client opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@client opt]# cd /opt/moosefs-3.0.100/
[root@client moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
[root@client moosefs-3.0.100]# make && make install
(5)掛載MFS文件系統
[root@client ~]# mkdir /opt/mfs
#加載fuse模塊到內核
[root@client ~]# modprobe fuse
#掛載
[root@client ~]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.7.128
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
6、MFS常用操作
(1)MFS 在客戶端安裝完畢後, 會生成/usr/local/mfs/bin/目錄, 在這個目錄下有很多命
令是用戶所需要的。 爲了方便使用這些命令, 可將/usr/local/mfs/bin 加入到環境變量中
[root@client ~]# vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
[root@client ~]# source /etc/profile
(2)mfsgetgoal 命令用來查詢文件被複制的份數, 利用-r 命令可以對整個目錄進行遞歸,goal 是指文件被複制的份數
[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 2 : 1
(3) 命令 mfssetgoal 用來設置文件被複制的份數, 生產環境Chunk Server節點數量應至少大於 2, 文件副本數小於等於Chunk Server服務器的數量
[root@client ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
(4)創建文件測試
[root@client ~]# cd /opt/mfs/
[root@client mfs]# touch test01
[root@client mfs]# mfsgetgoal test01
test01: 3
6、Master Server啓動監控程序
[root@mfsmaster ~]# /usr/local/mfs/sbin/mfscgiserv
使用瀏覽器打開網址http://192.168.7.128:9425
查看
其中各部分的含義如下:
- Info 部分: 顯示了 MFS 的基本信息
- Servers 部分: 列出現有 Chunk Server
- Disks 部分: 列出現有 Chunk Server 硬盤信息
- Exports 部分: 列出可被掛載的目錄
- Mounts 部分: 列出被掛載的目錄
- Operations 部分: 顯示正在執行的操作
- Resources 部分: 列出當前存儲信息
- Quitas 部分: 列出當前配額信息
- Master charts 部分: 顯示 Master Server 的操作情況, 讀、 寫、 刪除等操作
- Server charts 部分: 顯示 Chunk Server 的操作情況、 數據傳輸率及系統狀態
7、MFS 集羣的啓動與停止
(1)MFS 集羣啓動的順序如下
- 啓動 mfsmaster 進程。
- 啓動所有的 mfschunkserver 進程。
- 啓動 mfsmetalogger 進程(如果配置了 mfsmetalogger)。
- 在所有的客戶端掛載 MFS 文件系統。
(2)MFS 集羣停止的順序如下。
- 在所有的客戶端卸載 MFS 文件系統。
- 用 mfschunkserver stop 命令停止 chunkserver 進程。
- 用 mfsmetalogger stop 命令停止 metalogger 進程。
- 用 mfsmaster stop 命令停止 master 進程
8、MFS災難恢復
(1)整個 MFS 體系中, 直接斷電只有 Master 有可能無法啓動, 可以在 master 上使用命令 /usr/local/mfs/sbin/mfsmaster -a
修復
(2)MFS元數據通常有兩部分的數據,分別如下
①主要元數據文件 metadata.mfs, 當 mfsmaster 運行時會被命名爲 metadata.mfs.back
②元數據改變日誌 changelog.*.mfs, 存儲了過去的 N 小時的文件改變(N 的數值是由
BACK_LOGS 參數設置的, 參數的設置在 mfschunkserver.cfg 配置文件中)
③在 Master 發生故障時, 可以從 MetaLogger 中恢復 Master, 步驟如下:
- 安裝一臺 mfsmaster, 利用同樣的配置來配置這臺 mfsmaster。
- 將 metalogger 上 /usr/local/mfs/var/mfs/目錄下的文件複製到 mfsmaster 相應的目
錄中
[root@mfsmaster ~]#scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
- 利用 mfsmetarestore 命令合併元數據 changelogs。
[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a
- 如果是全新安裝的 Master, 恢復數據後, 要更改 metalogger 和 chunkserver 配置MASTER_HOST 的 IP, 客戶端也需要重新掛載