MFS(一)---mfs詳解與部署

一、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的哪些Chunks寫入數據。
  • 客戶端向指定的Chunk Server寫入數據
  • 該Chunk Server與其他Chunk Server進行數據同步,同步成功後Chunk Server告知客戶端數據寫入成功
  • 客戶端告知元數據服務器本次寫入完畢

MFS的刪除文件過程

  • 客戶端有刪除操作時,首先向Master發送刪除信息;
  • Master定位到相應元數據信息進行刪除,並將chunk server上塊的刪除操作加入隊列異步清理;
  • 響應客戶端刪除成功的信號

MFS修改文件內容的過程

  • 客戶端有修改文件內容時,首先向Master發送操作信息;
  • Master申請新的塊給.swp文件,
  • 客戶端關閉文件後,會向Master發送關閉信息;
  • Master會檢測內容是否有更新,若有,則申請新的塊存放更改後的文件,刪除原有塊和.swp文件塊;
  • 若無,則直接刪除.swp文件塊。

MFS重命名文件的過程

  • 客戶端重命名文件時,會向Master發送操作信息;
  • Master直接修改元數據信息中的文件名;返回重命名完成信息;

MFS遍歷文件的過程

  • 遍歷文件不需要訪問chunk server,當有客戶端遍歷請求時,向Master發送操作信息;
  • Master返回相應元數據信息;
  • 客戶端接收到信息後顯示

二、MFS的部署

部署可以參考官網:https://moosefs.com/download/#current

主機準備

主機 ip 作用
server1 172.25.1.1 master
server2 172.25.1.2 chunk server
server3 172.25.1.3 chunk server
foundation1 172.25.1.250 master

主機版本:rhel7.6
所有主機的selinux和防火牆均屬於關閉狀態。

yum源

對所有節點,yum源是相同的

可以通過以下命令獲取:

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

如果時el6或者el8直接將el7更改即可。

下載完repo文件後將gpgcheck關閉

[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
MooseFS.repo  redhat.repo  rhel.repo
[root@server1 yum.repos.d]# vim MooseFS.repo 
[root@server1 yum.repos.d]# cat MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0					#改爲0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1

同時在所有節點作master的解析:

# vim /etc/hosts
# cat /etc/hosts
172.25.1.1 server1 mfsmaster

master配置

安裝:

[root@server1 ~]#  yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y

其主配置文件是/etc/mfs/mfsmaster.cfg

啓動服務和cgi-server:

[root@server1 ~]# systemctl enable --now moosefs-master
[root@server1 ~]# systemctl enable --now moosefs-cgiserv.service 

啓動後查看端口:

[root@server1 ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      3821/mfsmaster      
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      3821/mfsmaster      
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      3821/mfsmaster      
tcp        0      0 0.0.0.0:9425            0.0.0.0:*               LISTEN      3852/python2        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3097/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3300/master         
tcp        0      0 172.25.1.1:22           172.25.1.250:53068      ESTABLISHED 3315/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      3097/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3300/master  

可以看到開啓服務後打開了9419,9420,9421,9425幾個端口,其中,9421爲監聽客戶端連接的端口,9419爲用於監聽metalogger(冷備)、masters和supervisors連接的端口,9420爲chunkserver連接的偵聽端口,9425爲cgi-server的端口,可以在瀏覽器訪問172.25.1.1:9425

在這裏插入圖片描述
可以看出的當前就只有一個master。

chunk server配置

以下以server2爲例,server3的操作和server2類似,首先安裝:

[root@server2 ~]# yum install moosefs-chunkserver -y

在chunk server中,/etc/mfs/mfshdd.cfg用來指定其存儲路徑

創建存儲路徑:

[root@server2 mfs]# mkdir /mnt/chunk1
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/			#更改所有者和所有組

制定存儲路徑:

[root@server2 mfs]# vim mfshdd.cfg
[root@server2 mfs]# tail -1 mfshdd.cfg
/mnt/chunk1

配置後啓動服務:

[root@server2 mfs]# systemctl enable --now moosefs-chunkserver

服務啓動後查看開啓的端口:

[root@server2 mfs]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      3874/mfschunkserver 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3087/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3309/master         
tcp        0      0 172.25.1.2:45240        172.25.1.1:9420         ESTABLISHED 3874/mfschunkserver 
tcp        0      0 172.25.1.2:22           172.25.1.250:49848      ESTABLISHED 3632/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      3087/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3309/master         

可以看出開啓了一個9422端口,並且打開了一個隨即端口45240和master的9420端口進行通信。啓動後查看網頁端:
在這裏插入圖片描述可以看到server2已經加入了集羣。

在server3中將chunk1改爲chunk2即可。啓動後查看網頁端:
在這裏插入圖片描述
可以看出看出兩個chunk server已經加入集羣。

client客戶端配置

安裝客戶端:

[root@foundation1 ~]# yum install moosefs-client -y

三、初步使用mfs

新建mfs目錄:

[root@foundation1 ~]# cd /mnt/
[root@foundation1 mnt]# mkdir mfs

掛載該目錄:

[root@foundation1 mfs]# mfsmount /mnt/mfs/

查看掛載情況:

[root@foundation1 mfs]# mount
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

可以看到掛載的是mfsmaster(server1)的9421端口。

創建測試文件目錄:

[root@foundation1 mfs]# mkdir data1
[root@foundation1 mfs]# mkdir data2
[root@foundation1 mfs]# mfsgetgoal data1/			#若報錯可以退出這個目錄重新進,然後再新建
data1/: 2
[root@foundation1 mfs]# mfsgetgoal data2/
data2/: 2

以上結果表示兩個目錄都保存了2份。

可以使用以下命令將備份數改爲1份:

[root@foundation1 mfs]# mfssetgoal -r 1 data1/
data1/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@foundation1 mfs]# 
[root@foundation1 mfs]# mfsgetgoal data1/
data1/: 1
[root@foundation1 mfs]# mfsgetgoal data2/
data2/: 2

可以看到data1已經保存爲1份.拷貝測試文件:

[root@foundation1 mfs]# cp /etc/passwd data1/
[root@foundation1 mfs]# cp /etc/fstab data2/

查看拷貝文件的信息:

[root@foundation1 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.1.3:9422 (status:VALID)
[root@foundation1 mfs]# 
[root@foundation1 mfs]# mfsfileinfo data2/fstab 
data2/fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.1.2:9422 (status:VALID)
		copy 2: 172.25.1.3:9422 (status:VALID)

可以看到再data1中的文件只有一個備份保存在server3,而在data2中的文件有兩個備份,保存在server2和server3各一份。

當我們把server3的mfs服務關閉後:

[root@server3 ~]# systemctl stop moosefs-chunkserver

在這裏插入圖片描述查看data2中的文件:

[root@foundation1 mfs]# cat data2/fstab 

#
# /etc/fstab
# Created by anaconda on Thu May  2 18:01:16 2019
#
。。。。。。

可以正常查看,查看data1中的文件:

[root@foundation1 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!

可以看出沒有可用拷貝,訪問文件會卡住。

現在恢復server3:

[root@server3 ~]# systemctl start moosefs-chunkserver

在這裏插入圖片描述恢復後查看data1中的文件就可以正常查看:

[root@foundation1 mfs]# cat data1/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
......

接下來進行切分的實驗,默認chunk的大小爲64M,當文件大於64M時會進行切分:

在data1中新建一個100M的文件:

[root@foundation1 data1]# dd if=/dev/zero of=bigfile bs=1M count=100

查看這個文件的信息:

[root@foundation1 data1]# mfsfileinfo bigfile 
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 172.25.1.3:9422 (status:VALID)
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 172.25.1.2:9422 (status:VALID)

可以看出被切分成兩個chunk,這樣就可以保證寫入和讀取的速度,這也就是分佈式文件系統的意義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章