文章前面想說的話:這篇博客寫出來真是有點累到了,原本昨天就基本就寫好了,放在草稿裏面,今天打開就沒有了!!唉,就尼瑪離我而去了,只有重寫,而後中間虛擬機還「爆炸」重啓又搞了一會,不容易呀!!但願各位博友看到有理解錯誤的地方仍是能幫我指出來。node
1、MFS簡介vim
一、MFS是啥,能作啥?安全
MooseFS是一種分佈式文件系統,它把數據分散存放在多個物理服務器上,前面只放置一臺負責「調度」元數據服務器,最終呈現給用戶的則是一個統一的資源。相對於集中式文件系統來講,分佈式系統擁有更好的擴展性、穩定性、數據的安全性。bash
二、架構及實現原理服務器
⑴、MooseFS文件系統架構包括如下四種角色:架構
a.管理服務器 managing server (Master):負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復.多節點拷貝。tcp
b.元數據日誌服務器 Metalogger server(Metalogger):負責備份Master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,以便於在master server出問題的時候接替其進行工做。分佈式
c.數據存儲服務器 (chunkservers):負責鏈接管理服務器,遵從管理服務器調度,提供存儲空間,併爲客戶提供數據傳輸測試
d.客戶機掛載使用client computers:經過fuse內核接口掛接遠程管理服務器上所管理的數據存儲服務器,看起來共享的文件系統和本地 unix 文件系統使用同樣的效果。spa
⑵、實現原理
①MFS WIRTE 過程大概:
一、客戶端向元數據服務器發送寫入請求。
二、元數據服務器與Chunk Server進行交互(只有當所需的分塊Chunks不存在的時候才進行這個交互):
a、元數據服務器只是在某些服務器建立新的分塊chunks。
b、Chunk Servers告知元數據服務器,步驟a已經操做成功。
三、元數據服務器告知客戶端,你能夠在哪一個Chunk Server的哪些Chunks寫入數據。
四、客戶端向指定的Chunk Server寫入數據
五、Chunk Server與其餘Chunk Server進行數據同步。
六、Chunk Server之間同步成功。
七、Chunk Server告知客戶端數據寫入成功。
八、客戶端告知元數據服務器本次寫入完畢。
以下圖:
②MFS READ 過程大概:
一、客戶端向元數據服務器發出讀請求。
二、元數據服務器把所需數據存放的位置(Chunk Server的IP地址和chunk編號)告知客戶端。
三、客戶端向已知的Chunk Server請求發送數據。
四、Chunk Server向客戶端發送數據
以下圖:
2、MFS實戰部署
一、環境
系統及虛擬化軟件:CENTOS 7.三、VMworkstation
四臺虛擬機:Master(10.0.0.5)、LOG SERVER(10.0.0.6)、CHUNK SERVER1(10.0.0.31)
、CHUNK SERVER2(10.0.0.32)、CLIENT直接裝在CHUNK SERVER2上
所需軟件包和依賴包:moosefs-3.0.96.tar.gz、zlib-devel、make、gcc、fuse、fuse-devel
二、Mster服務器安裝、部署
1
2
3
4
5
6
7
8
|
##node3(10.0.0.5)上安裝MFS
[root@node3 src] #useradd mfs -s /sbin/nologin -M -g 1002 ##確保每一臺上的MFS用戶GID、UID相同
[root@node3 src] #tar -xf moosefs-3.0.96.tar.gz
[root@node3 src] #cd moosefs-3.0.96
[root@node3 moosefs-3.0.96] #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
...
[root@node3 moosefs-3.0.96] #make && make install
...
|
1
2
3
4
5
6
7
8
|
##配置Mster服務器文件
[root@node3 moosefs-3.0.96] #/usr/local/mfs/etc/mfs
[root@node3 mfs] #cp mfsexports.cfg.sample mfsexports.cfg
[root@node3 mfs] # cp mfsmaster.cfg.sample mfsmaster.cfg
[root@node3 mfs] #vim mfsexports.cfg ##只需修改此文件,通常mfsmaster.cfg使用默認便可
* / rw,alldirs,mapall=mfs:mfs,password=redhat ##最後一行添加。文件中,每個條目就是一個配置規則,而每個條目又分爲三個部分,
##其中第一部分是mfs客戶端的ip地址或地址範圍,第二部分是被掛載的目錄,第三個部分用來設置mfs客戶端能夠擁有的訪問權限
[root@node3 mfs] #cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs ##手工開啓元數據文件默認是empty文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
##MFS啓動以及檢測
[root@node3 mfs] # /usr/local/mfs/sbin/mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
mfstopology configuration file ( /usr/local/mfs/etc/mfstopology .cfg) not found - using defaults
loading metadata ...
metadata 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
[root@node3 src] # ps -ef | grep mfs #檢測服務是否開啓
mfs 1799 1 0 Oct29 ? 00:06:16 /usr/local/mfs/sbin/mfsmaster -a
root 23864 1462 0 16:46 pts /0 00:00:00 grep --color=auto mfs
[root@node3 mfs] #netstat -ntlp ##檢測端口是否開啓,原本服務器成功部署
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 1799 /mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 1799 /mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 1799 /mfsmaster
|
三、LOG SERVER安裝、部署
1
2
3
4
5
6
7
8
|
##node4(10.0.0.6) 安裝MFS
[root@node3 src] #useradd mfs -s /sbin/nologin -M -g 1002
[root@node3 src] #tar -xf moosefs-3.0.96.tar.gz
[root@node3 src] #cd moosefs-3.0.96
[root@node3 moosefs-3.0.96] #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
...
[root@node3 moosefs-3.0.96] #make && make install
...
|
1
2
3
4
5
|
##配置 LOG SERVER
[root@node4 moosefs-3.0.96] # cd /usr/local/mfs/etc/mfs/
[root@node4 mfs] # cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@node4 mfs] # vim mfsmetalogger.cfg
MASTER_HOST = 10.0.0.5 ##此行值修改成MSTER SERVER IP,鏈接日誌服務器鏈接到主服務器上備份元數據
|
1
2
3
4
5
6
7
|
##MFS啓動以及檢測
[root@node4 ~] # /usr/local/mfs/sbin/mfsmetalogger start
...
[root@node4 ~] # ps -ef | grep meta ##程序正常工做
mfs 1768 1 0 Oct29 ? 00:02:35 /usr/local/mfs/sbin/mfsmetalogger start
[root@node4 ~] # netstat -lantp|grep metalogger ##與MASTER 端口創建鏈接
tcp 0 0 10.0.0.6:60518 10.0.0.5:9419 ESTABLISHED 1768 /mfsmetalogger
|
四、CHUNK SERVER1安裝、部署
1
2
3
4
5
6
7
8
|
##node1(10.0.0.31)安裝MFS
[root@node3 src] #useradd mfs -s /sbin/nologin -M -g 1002 ##確保每一臺上的MFS用戶GID、UID相同
[root@node3 src] #tar -xf moosefs-3.0.96.tar.gz
[root@node3 src] #cd moosefs-3.0.96
[root@node3 moosefs-3.0.96] #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount ##配置發生改變
...
[root@node3 moosefs-3.0.96] #make && make install
...
|
1
2
3
4
5
6
7
8
9
10
|
##配置CHUNK SERVER1
[root@node1 moosefs-3.0.96] # cd /usr/local/mfs/etc/mfs/
[root@node1 mfs] #cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@node1 mfs] # vim mfschunkserver.cfg
MASTER_HOST = 10.0.0.5 ##修改此行值爲MASTER IP
[root@node1 mfs] #cp mfshdd.cfg.sample mfshdd.cfg
[root@node1 mfs] #mkdir /data ##建立用來儲存數據目錄
[root@node1 mfs] #chown -R mfs:mfs /data/
[root@node1 mfs] #vim mfshdd.cfg ##該文件用來設置你將 Chunk Server 的哪一個目錄共享出去給 Master Server進行管理。固然,雖然這裏填寫的是共享的目錄,可是這個目錄後面最好是一個單獨的分區。
/data ###最後一行加入儲存數據的目錄
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
###啓動MFS、狀態檢查
[root@node1 mfs] # /usr/local/mfs/sbin/mfschunkserver start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
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
###服務是否啓動
[root@node1 ~] # ps -ef | grep chunk
mfs 1818 1 0 Oct29 ? 00:08:05 /usr/local/mfs/sbin/mfschunkserver
root 9827 1623 0 17:11 pts /0 00:00:00 grep --color=auto chunk
##鏈接是否創建
[root@node1 ~] # netstat -lantp|grep 9420
tcp 0 0 10.0.0.31:43148 10.0.0.5:9420 ESTABLISHED 1818 /mfschunkserver
|
五、CHUNK SERVER2和CLIENT安裝、部署
1
2
3
4
5
6
7
8
|
##node2(10.0.0.32)安裝MFS
[root@node3 src] #useradd mfs -s /sbin/nologin -M -g 1002 ##確保每一臺上的MFS用戶GID、UID相同
[root@node3 src] #tar -xf moosefs-3.0.96.tar.gz
[root@node3 src] #cd moosefs-3.0.96
[root@node3 moosefs-3.0.96] #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --enable-mfsmount ##因爲我硬件限制,我將CLINET和CHUNK SERVER2安裝在一塊兒,配置要--enable-mfsmount
...
[root@node3 moosefs-3.0.96] #make && make install
...
|
1
2
3
4
5
6
7
8
9
|
[root@node2 moosefs-3.0.96] # cd /usr/local/mfs/etc/mfs/
[root@node2 mfs] #cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@node2 mfs] # vim mfschunkserver.cfg
MASTER_HOST = 10.0.0.5 ##修改此行值爲MASTER IP
[root@node2 mfs] #cp mfshdd.cfg.sample mfshdd.cfg
[root@node2 mfs] #mkdir /data ##建立用來儲存數據目錄
[root@node2 mfs] #chown -R mfs:mfs /data/
[root@node2 mfs] #vim mfshdd.cfg ##該文件用來設置你將 Chunk Server 的哪一個目錄共享出去給 Master Server進行管理。固然,雖然這裏填寫的是共享的目錄,可是這個目錄後面最好是一個單獨的分區。
/data
|
1
|
##服務啓動狀態檢測應與CHUNK SERVER1幾乎相同
|
1
2
3
4
5
6
7
8
|
##CLINET部分,先檢查fuse模塊是否加載
[root@node2 bin] # lsmod | grep fuse
fuse 87741 1 ##若是沒有,modeprobe fuse 加載此模塊若是在失敗應該是內核版本太低,升級內核、
##建立CLIENT 掛載目錄
[root@node2 bin] #mkdire /mfsdata
[root@node2 bin] #chown -R mfs:mfs /mfsdata/
##掛載目錄
[root@node2 bin] #/usr/local/mfs/bin/mfsmount /mfsdata -H 10.0.0.5
|
3、MFS功能測試
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
[root@node2 /] # cd /mfsdata/
[root@node2 mfsdata] # vim 111.txt
wo shi 11111
##切換到MASTER SERVER
[root@node3 mfs] # vim /usr/local/mfs/var/mfs/changelog.0.mfs
89: 1509355991|SESADD( #10705800883749376268,1,16,0000,1001,1001,1001,1001,1,9,0,4294967295,167772192,/mfsdata):2
90: 1509356218|ACQUIRE(2,5)
91: 1509356218|ATTR(5,420,1001,1001,1509356218,1509356218,0,0)
92: 1509356229|ACCESS(1)
93: 1509356231|CREATE(1,.111.txt.swp,1,384,18,1001,1001,0):12
94: 1509356231|ACQUIRE(2,12)
##切換到LOG SERVER
[root@node4 mfs] # vim changelog_ml.0.mfs
89: 1509355991|SESADD( #10705800883749376268,1,16,0000,1001,1001,1001,1001,1,9,0,4294967295,167772192,/mfsdata):2
90: 1509356218|ACQUIRE(2,5)
91: 1509356218|ATTR(5,420,1001,1001,1509356218,1509356218,0,0)
92: 1509356229|ACCESS(1)
93: 1509356231|CREATE(1,.111.txt.swp,1,384,18,1001,1001,0):12
94: 1509356231|ACQUIRE(2,12)
95: 1509356231|CREATE(1,.111.txt.swx,1,384,18,1001,1001,0):13
96: 1509356231|ACQUIRE(2,13)
##能夠看到LOG SERVER已經把MASTER SERVER 記錄備份到日誌服務器上
##在CLIENT上,還能夠具體查看數據的副本數量,更多功能有興趣本身能夠查一下
[root@node2 mfsdata] # /usr/local/mfs/bin/mfsfileinfo /mfsdata/111.txt
/mfsdata/111 .txt:
chunk 0: 0000000000000007_00000001 / ( id :7 ver:1)
copy 1: 10.0.0.31:9422 (status:VALID)
copy 2: 10.0.0.32:9422 (status:VALID)
|
4、總結
從原理架構到實際搭建部署,不知道你們有沒有發現一點,在MSTAER SERVER這個點不是有點像是單點,在實際生產環境中是儘可能容許單點的存在,特別是想在「調度器」這類角色的服務器上,他們的狀態影響着整個服務器集羣的狀態和對外提供服務的好壞。雖然放置了一臺日誌服務器,能夠從日誌服務器拿備份的元數據作恢復,可是恢復的這段時間服務就要停掉嗎??因此後面咱們要把MFS跟DRBD高可用結合起來,實現故障的自動切換。