Mfs分布式檔案系統
前言:前面我們學習過NFS,以及虛拟化課程的時候我們學習過openfiler,這兩個都是屬于存儲伺服器。但是他們有着共同的缺點,就是性能不好,因為都是通過共享方式共享一個存儲空間,使得伺服器不堪重負,會出現逾時的問題,而且存在着單點故障問題,盡管可以用rsync同步資料到另外一台伺服器上做備份,但性能友善沒有任何提升。而分布式檔案系統把資料分散存儲在不同的伺服器上,讀取資料的時候相當于同時讀取,不像nfs是一對多的關系,而是多對多的關系,這樣可以使得性能得到大幅提升。
今天我們學習使用MFS搭建分布式檔案系統,MFS具有容錯功能,高可用,可擴充的功能。MFS把資料分散在多台伺服器上,但使用者看到的隻是一個源。
- 用戶端向中繼資料伺服器發出讀請求
- 中繼資料伺服器把所需資料存放的位置(Chunk Server的IP位址和Chunk編号)告知用戶端
- 用戶端向已知的Chunk Server請求發送資料
-
Chunk Server向用戶端發送資料
3)寫入的過程
- 用戶端向中繼資料伺服器發送寫入請求
- 中繼資料伺服器與Chunk Server進行互動,但中繼資料伺服器隻在某些伺服器建立新的分塊Chunks,建立成功後由Chunk Servers告知中繼資料伺服器操作成功
- 中繼資料伺服器告知用戶端,可以在哪個Chunk Server的哪些Chunks寫入資料
- 用戶端向指定的Chunk Server寫入資料
- 該Chunk Server與其他Chunk Server進行資料同步,同步成功後Chunk Server告知用戶端資料寫入成功
- 用戶端告知中繼資料伺服器本次寫入完畢
- 實驗環境
- 實驗拓撲
九爺帶你部署Mfs分布式檔案系統 - 虛拟機環境
九爺帶你部署Mfs分布式檔案系統 - 實驗步驟
- 搭建master server
- 停止防火牆并且安裝支援包
九爺帶你部署Mfs分布式檔案系統 - 建立使用者
九爺帶你部署Mfs分布式檔案系統 -
安裝源碼包
[root@centos3 ~]# tar zxf mfs-1.6.27-5.tar.gz
[root@centos3 ~]# cd mfs-1.6.27
[root@centos3 mfs-1.6.27]# ./configure \
> --prefix=/usr/local/mfs \//指定安裝目錄
> --with-default-user=mfs \//指定程式運作使用者
> --with-default-group=mfs \//指定程式運作組
> --disable-mfschunkserver \//禁用Chunk功能
> --disable-mfsmount \//禁用mfsmount功能
[root@centos3 mfs-1.6.27]# make && make install //編譯安裝
九爺帶你部署Mfs分布式檔案系統 九爺帶你部署Mfs分布式檔案系統 4)複制檔案(設定配置檔案)
[root@centos3 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@centos3 mfs]# ls
mfsexports.cfg.dist mfsmetalogger.cfg.dist
mfsmaster.cfg.dist mfstopology.cfg.dist
[root@centos3 mfs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@centos3 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@centos3 mfs]# cp mfstopology.cfg.dist mfstopology.cfg
[root@centos3 mfs]# cd /usr/local/mfs/var/mfs/
metadata.mfs.empty
[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs
這個檔案存放master的變化資訊
九爺帶你部署Mfs分布式檔案系統 -
配置檔案(下面的隻是介紹一下,不用修改,預設就好)
需要用到兩個配置檔案:mfsmaster.cfg(主配置檔案)和mfsexport.cfg(被挂載目錄及通路權限)
mfsmaster.cfg常用的參數如下,預設全部都是不需要修改的,全文都是以#開頭,也就是說都是預設配置
[root@centos1 mfs]# cd /usr/local/mfs/etc/mfs/
[root@centos1 mfs]# vim mfsmaster.cfg
WORKING_USER = mfs//運作masterserver的使用者
# WORKING_GROUP = mfs//運作masterserver的組
# SYSLOG_IDENT = mfsmaster//masterserver在syslog的标示,說明是由masterserver産生的
# LOCK_MEMORY = 0//是否執行mlokall(),以避免mfsmaster程序溢出預設為0
# NICE_LEVEL = -19//運作的優先級,程序必須由root啟動
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
//被挂載目錄及其權限控制檔案的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs//資料存放路徑
# BACK_LOGS = 50 //metadata改變的log檔案數目(預設是50)
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 //延遲複制的時間(預設300)
# REPLICATIONS_DELAY_DISCONNECT = 3600 //Chunkserver斷開複制延遲(預設是3600秒)
# MATOML_LISTEN_HOST = *//metalogger監聽的IP位址預設是所有位址
# MATOML_LISTEN_PORT = 9419//metalogger監聽的端口位址(預設為9419)
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCL_LISTEN_HOST = * //用于chunkserver連接配接的IP位址(預設為*代表所有IP)
# MATOCL_LISTEN_PORT = 9421//使用者用戶端挂在的監聽端口9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300//chunks的回環頻率(預設300)
# CHUNKS_SOFT_DEL_LIMIT = 10
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2 //在一個循環裡複制到另外一個Chunkserver的最大Chunk數
# CHUNKS_READ_REP_LIMIT = 10//在一個循環裡從一個Chunkserver複制的的最大Chunk數
# ACCEPTABLE_DIFFERENCE = 0.1
# SESSION_SUSTAIN_TIME = 86400
# REJECT_OLD_CLIENTS = 0//彈出低于1.6.0的用戶端挂接(0或1,預設是0)
# deprecated:
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
# LOCK_FILE - lock system has been changed, and this option is used onl
y to search for old lockfile
mfsexport.cfg檔案參數格式如下
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
該檔案,每一個條目分為三個部分
第一部分:用戶端IP位址
第二部分:被挂載的目錄
第三部分:用戶端擁有的權限
位址可以指定幾種表現形式
*代表所有的IP位址
n.n.n.n單個ip位址
n.n.n.n/bIP網絡位址/位數掩碼
n.n.n.n/m.m.m.m IP網絡位址/子網路遮罩
f.f.f.f-t.t.t.t IP段
目錄部分的标示如下
/标示MFS根
.表示MFSMETA檔案系統
權限部分如下所示
ro——隻讀模式共享
rw——讀寫模式共享
alldirs——允許挂載任何指定的子目錄
maproot——映射為root,還是普通使用者
password——指定用戶端的密碼
以上就是對mfsmaster.cfg和mfsexport檔案的解釋,預設就是最好的,不需要做任任何修改。
-
啟動master server
第一遍啟動的時候,可能會出現以下錯誤資訊
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster start
loading sessions ... file not found
如果出現以上資訊,則關閉服務并重新啟動就可以了
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster -s
-s 表示停止服務
再啟動就不會出現任何資訊
九爺帶你部署Mfs分布式檔案系統 - 檢視是否啟動
九爺帶你部署Mfs分布式檔案系統
8)建立防火牆規則
[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9420 -j ACCEPT
[root@centos1 mfs]# iptables -I INPUT -p tcp --dport 9421 -j ACCEPT
[root@centos1 mfs]# service iptables save
-
搭建metalogger server
1)安裝mfs(同上)
九爺帶你部署Mfs分布式檔案系統
- Useradd mfs -s /sbin/nologin
九爺帶你部署Mfs分布式檔案系統 - 複制檔案 3)修改配置檔案,添加master伺服器的ip位址(注意去掉注釋和空格)
九爺帶你部署Mfs分布式檔案系統 九爺帶你部署Mfs分布式檔案系統 - 開啟服務
九爺帶你部署Mfs分布式檔案系統 5)檢視端口
[root@centos5 mfs]# netstat -anpt | grep 9419
tcp 0 0 192.168.1.2:50929 192.168.1.1:9419 ESTABLISHED 53533/mfsmetalogger
[root@centos5 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
[root@centos5 mfs]# service iptables save
- 搭建chunk server(二台chunk的搭建步驟相同)
- 安裝mfs(同上)
九爺帶你部署Mfs分布式檔案系統 九爺帶你部署Mfs分布式檔案系統 - Cd /usr/local/mfs/etc/mfs
- Cp mfschunkserver.cfg.dist mfschunkserver.cfg
- Cp mfshdd.cfg.dist mfshdd.cfg
- Vi mfschunkserver.cfg
-
修改配置檔案(一共2個)
vim mfschunkserver.cfg
vim mfshdd.cfg(添加/data)
- 建立檔案夾并開啟服務
九爺帶你部署Mfs分布式檔案系統 -
開啟例外
[root@centos5 mfs]# ps -ef | grep mfs
mfs 56269 1 0 20:54 ? 00:00:00 /usr/local/mfs/sbin/mfschunkserver start
root 56297 48740 0 20:54 pts/0 00:00:00 grep mfs
[root@centos5 mfs]# iptables -I INPUT -p tcp --dport 9422 -j ACCEPT
注意:第二台chunk的配置和上面的配置完全一樣,這裡就不在說明了
- 用戶端配置
- 安裝fuseMFS(用戶端依賴于FUSE)
九爺帶你部署Mfs分布式檔案系統 -
設定環境變量
添加下面這行
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
九爺帶你部署Mfs分布式檔案系統 - 安裝MFS用戶端
九爺帶你部署Mfs分布式檔案系統 - 挂載檔案系統
九爺帶你部署Mfs分布式檔案系統 - 檢視挂載情況
九爺帶你部署Mfs分布式檔案系統 -
設定檔案被複制的份數并測試
MFS用戶端安裝完畢後,會生成/usr/local/mfs/bin/目錄,在這個目錄下有很多指令是使用者所需的。
mfsgetgoal指令用來檢視檔案被複制的分數,利用-r指令可以對整個目錄進行遞歸,goal是指檔案比複制的分數。
[root@centos6 mfs-1.6.27]# mfsgetgoal -r /mnt/mfs/
/mnt/mfs/:
directories with goal 1 : 1
由于還沒有設定,預設為1份
指令mfssetgoal用來設定檔案被複制的分數,生産環境下Chunk server節點數量應大于2,檔案副本數小于Chunk server伺服器的數量。由于我有二台Chunk server 我将副本數量設定為1
在vim /etc/profile檔案中增加一行(為了友善執行指令)
設定查詢檔案被複制的份數:九爺帶你部署Mfs分布式檔案系統 九爺帶你部署Mfs分布式檔案系統 在/mnt/mfs中建立檔案
分别打開兩台chunk檢視/data下,都産生了加密的資料,說明成功了
- https://yqfile.alicdn.com/img_96fc64efe0b1641d09c4f44c7563c7e2.png
九爺帶你部署Mfs分布式檔案系統
5、mfs監控
mfscgiserv是用python編寫的一個web伺服器,其監聽端口是9425,可以再masster server 上通過 /usr/local/mfs/sbin/mfscgiserv來啟動,使用者利用浏覽器就可以完全監控所有客戶挂接、Chunk server、Master server等。
在一台用戶端上通過浏覽器通路http://192.168.1.1:9425
[root@centos3 mfs]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
[root@centos3 mfs]# iptables -I INPUT -p tcp --dport 9425 -j ACCEPT
-
災難恢複
MFS維護及災難恢複
1)MFS叢集的啟動與停止
MFS叢集的啟動順序如下
(1)啟動mfsmaster程序
(2)啟動所有的mfsChunkserver程序
(3)啟動mfsmetalogger程序
(4)在所有用戶端上挂載NFS檔案系統
MFS叢集的停止順序如下
(1)在所有用戶端解除安裝MFS挂載
(2)停止Chunkserver程序
(3)停止mfsmetalogger程序
(4)停止mfsmaster程序
2)MFS災難恢複
整個MFS體系中,直接斷電隻有master server程序有可能無法啟動,可以在master上使用指令/usr/local/mfs/sbin/mfsmetarestore -a修複
我們将master server 直接斷電(必須運作的時間夠20分鐘才可以斷電,否則資料很有可能直接丢失)
[root@centos1 ~]# /usr/local/mfs/sbin/mfsmaster start
init: file system manager failed !!!
error occured during initialization - exiting
[root@centos1 ~]# /usr/local/mfs/sbin/mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
progress: current change: 0 (first:0 - last:0 - 100% - ETA:finished)
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs
[root@centos1 ~]# /usr/local/mfs/sbin/mfsmaster start
-
從MetaLogger中恢複
MFS中繼資料通常有兩部分的資料,分别如下
(1)主要中繼資料檔案metadata.mfs,當mfsmaster運作時會被命名為metadata.back.mfs。
(2)中繼資料改變日志 changelog.*.mfs,存儲了過去N小時的檔案變更。
在Master 發生故障時,可以從MetaLogger中恢複,步驟如下
(1)安裝一台mfsmaster,利用同樣的配置來配置這台mfsmaster,mfsmaster程序先不要啟動
(2)将metalogger上/usr/local/mfs/var/mfs/目錄下所有檔案複制到mfsmaster相應的目錄中。
[root@centos3 mfs]# scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
[root@centos3 mfs]# /usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back -o metadata.mfs changelog_ml.*.mfs
changelog_ml.0.mfs:1: version mismatch
[root@centos3 mfs]# /usr/local/mfs/sbin/mfsmaster start
[root@centos3 mfs]# ls
Ceshi
注意:如果是全新安裝的master,恢複資料後,需要更改metalogger和chunkserver,配置MASTER_HOST的ip位址,用戶端也需要重新挂載mfs目錄。