- 基本概念
1.MooseFS是一個具有容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源
2.MooseFS文件系統結構包括以下四種角色
(1)管理服務器master
管理服務器:負責各個數據存儲服務的管理文件讀寫調度,文件空間回收以及恢復,多節點拷貝
(2)數據存儲服務器data server(chunk servers)
真正存儲用戶數據的服務器存儲文件時,首先把文件分成塊,然後這些塊在數據服務器chunkserver之間賦值(複製份數可以手工指定,建議設置副本數爲數據服務器可以爲多個,並且數據越多,可使用的“磁盤空間越大,”可靠性也越高
(3)元數據日誌服務器:
負責備份master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,以便於在master server出現問題的時候解體器 進行工作
(4)客戶端掛載使用client computers
使用MFS文件系統來存儲和訪問的主機名稱爲MFS的客戶端,成功掛載MFS系統以後,就可以像以前NFS一樣共享這個虛擬性的存儲了
3.MFS特性
(1)通用文件系統,不需要修改上層應用就可以使用
(2)可以在線擴容,體系架構可伸縮性極強
(3)部署簡單
(4)高可用,可設置任意的文件冗餘程度
(5)可回收在指定時間內刪除的文件
(6)提供netapp,emc,ibm等商業存儲的snapshot特性
(7)google filesystem的一個c實現
(8)提供web gui監控接口
(9)提高隨機讀或寫的效率
(10) 提高海量小文件的讀寫效率
4.MFS的讀數據過程
- client當需要一個數據時,首先向master server發起查詢請求;
- 管理服務器檢索自己的數據,獲取到數據所在的可用數據服務器位置ip|port|chunkid;
- 管理服務器將數據服務器的地址發送給客戶端;
- 客戶端向具體的數據服務器發起數據獲取請求;
- 數據服務器將數據發送給客戶端;
5.MFS的寫數據過程
- 當客戶端有數據寫需求時,首先向管理服務器提供文件元數據信息請求存儲地址(元數據信息如:文件名|大小|份數等);
- 管理服務器根據寫文件的元數據信息,到數據服務器創建新的數據塊;
- 數據服務器返回創建成功的消息;
- 管理服務器將數據服務器的地址返回給客戶端(chunkIP|port|chunkid);
- 客戶端向數據服務器寫數據;
- 數據服務器返回給客戶端寫成功的消息;
- 客戶端將此次寫完成結束信號和一些信息發送到管理服務器來更新文件的長度和最後修改時間
6.MFS的刪除文件過程
- 客戶端有刪除操作時,首先向Master發送刪除信息;
- Master定位到相應元數據信息進行刪除,並將chunk server上塊的刪除操作加入隊列異步清理;
- 響應客戶端刪除成功的信號
7. MFS修改文件內容的過程
- 客戶端有修改文件內容時,首先向Master發送操作信息;
- Master申請新的塊給.swp文件,
- 客戶端關閉文件後,會向Master發送關閉信息;
- Master會檢測內容是否有更新,若有,則申請新的塊存放更改後的文件,刪除原有塊和.swp文件塊;
- 若無,則直接刪除.swp文件塊
8.MFS重命名文件的過程
- 客戶端重命名文件時,會向Master發送操作信息;
- Master直接修改元數據信息中的文件名;返回重命名完成信息;
一、搭建mfs分佈式文件系統的步驟:
1.server1作爲master節點
(1)添加地址解析
[root@server1 ~]# vim /etc/hosts
172.25.19.1 server1 mfsmaster
(2)安裝軟件
[root@server1 ~]# cd 3.0.103/
[root@server1 3.0.103]# ls
[root@server1 3.0.103]# yum install -y
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
(3)開啓moosefs-master服務
[root@server1 3.0.103]# cd /etc/mfs
[root@server1 mfs]# systemctl start moosefs-master
[root@server1 mfs]# netstat -atnlp
開啓了9419-9421端口
(4)開啓moosefs-cgiserv服務,使用的是9425端口
[root@server1 mfs]# systemctl start moosefs-cgiserv
[root@server1 mfs]# netstat -atnlp
(5)打開瀏覽器訪問172.25.19.1:9425,可以看到web界面
將chunkserver的安裝包傳給server2
[root@server1 3.0.103]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm server2:
2.server2 作爲chunkserver節點
(1)安裝軟件包
[root@server2 ~]# ls
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server2 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
(2)添加地址解析
[root@server2 ~]# vim /etc/hosts
(3)查看/etc/mfs目錄
[root@server2 ~]# cd /etc/mfs
[root@server2 mfs]# ls
mfschunkserver.cfg mfshdd.cfg
mfschunkserver.cfg.sample mfshdd.cfg.sample
(4)創建一個掛載目錄
[root@server2 mfs]# mkdir /mnt/chunk1
(5)給server2添加一個虛擬硬盤
在虛擬機圖形管理器中添加
可以看到磁盤設備中出現了/dev/vda
[root@server2 ~]# fdisk -l
劃分分區,將所有的都劃分爲一個分區
[root@server2 mfs]# fdisk /dev/vda
再次查看分區情況
[root@server2 mfs]# fdisk -l
(6)格式化
[root@server2 mfs]# mkfs.xfs /dev/vda1
(7)掛載設備
[root@server2 mfs]# mount /dev/vda1 /mnt/chunk1/
[root@server2 mfs]# df
(8)將掛載目錄寫入配置文件
[root@server2 mfs]# ls
mfschunkserver.cfg mfshdd.cfg
mfschunkserver.cfg.sample mfshdd.cfg.sample
[root@server2 mfs]# vim mfshdd.cfg
(9)修改掛載目錄的所有人所有組
[root@server2 mfs]# ll -d /mnt/chunk1
drwxr-xr-x 2 root root 6 May 18 10:25 /mnt/chunk1
[root@server2 mfs]# ls /mnt/chunk1/
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/
[root@server2 mfs]# df
(10)開啓chunkserver服務
[root@server2 mfs]# systemctl start moosefs-chunkserver
(11)瀏覽器中查看到信息
將安裝包傳給server3
[root@server2 ~]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm server3:
3.server3:作爲另一個chunkserver節點
(1)安裝軟件包
[root@server3 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
warning: moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID cf82adba: NOKEY
Preparing... (1################################# [100%]
Updating / installing...
1:moosefs-chunkserver-3.0.103-1.rhs ( ################################# [100%]
(2)創建掛載目錄
[root@server3 ~]# mkdir /mnt/chunk2
(3)修改所有人所有組
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/
(4)添加地址解析
[root@server3 ~]# vim /etc/hosts
(5)編輯配置文件,開啓服務
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
[root@server3 ~]# systemctl start moosefs-chunkserver
(6)瀏覽器中可以查看到
注意:當前節點沒有添加磁盤劃分分區,默認是掛載到/下
4.物理機作爲客戶端client節點
(1)安裝軟件包
[root@foundation19 ~]# cd 3.0.103/
[root@foundation19 3.0.103]# ls
[root@foundation19 3.0.103]# yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
(2)創建掛載目錄,編輯配置文件
[root@foundation19 3.0.103]# mkdir /mnt/mfs
[root@foundation19 3.0.103]# vim /etc/mfs/mfsmount.cfg
(3)添加地址解析
[root@foundation19 3.0.103]# vim /etc/hosts
(4)掛載
[root@foundation19 3.0.103]# mfsmount
[root@foundation19 3.0.103]# df
-
默認是64塊
減小尋址時間 -
整個分佈式文件系統的元數據都在master節點上
-
對於master來說
內存大小決定了可存放的文件數量 -
當master節點掛掉之後,千萬不要df
二、離散存儲
1.在客戶機的掛載目錄下新建兩個目錄,查看數據存儲服務器的個數(默認有幾個chunk節點,就備份幾份)
[root@foundation19 ~]# cd /mnt/mfs
[root@foundation19 mfs]# ls
[root@foundation19 mfs]# mkdir dir1
[root@foundation19 mfs]# mkdir dir2
[root@foundation19 mfs]# ls
dir1 dir2
[root@foundation19 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation19 mfs]# mfsgetgoal dir2
dir2: 2
2.更改dir1的存儲服務器的個數,再次查看
[root@foundation19 mfs]# mfssetgoal -r 1 dir1
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation19 mfs]#
[root@foundation19 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation19 mfs]# mfsgetgoal dir2
dir2: 2
3.複製/etc/passwd文件到dir1目錄下,查看信息 ,他在server2上存儲
[root@foundation19 mfs]# cp /etc/passwd dir1
[root@foundation19 mfs]# cd dir1
[root@foundation19 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.19.2:9422 (status:VALID)
4.將/etc/fstab文件複製到dir2下,查看信息,他備份了兩份
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# ls
[root@foundation19 dir2]# cp /etc/fstab .
[root@foundation19 dir2]# ls
fstab
[root@foundation19 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.19.2:9422 (status:VALID)
copy 2: 172.25.19.3:9422 (status:VALID)
5.在dir1下劃分一個bigfile,查看bigfile的信息,也是隻備份了一份,但由於文件太大所以分成了四塊備份
[root@foundation19 dir2]# cd ../dir1
[root@foundation19 dir1]# ls
passwd
[root@foundation19 dir1]# dd if=/dev/zero of=bigfile bs=1M count=200
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# ls
bigfile passwd
6.在dir2下再劃分一個bigfile2 ,查看信息,備份了兩份
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# dd if=/dev/zero of=bigfile2 bs=1M count=200
[root@foundation19 dir2]# ls
bigfile2 fstab
[root@foundation19 dir2]# mfsfileinfo bigfile2
7.現在關閉server2的chunkserver服務,在客戶機上查看幾個文件的信息
[root@server2 ~]# systemctl stop moosefs-chunkserver
可以看到dir2中的文件只剩一份,但是dir1中的文件都無法訪問,注意這個時候如果vim打開文件會卡死
[root@foundation19 dir2]# mfsfileinfo bigfile2
[root@foundation19 dir2]# cd ../dir1
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# mfsfileinfo passwd
8.再次開啓server2的chunkserver服務,客戶機中查看文件信息又恢復正常
[root@server2 ~]# systemctl start moosefs-chunkserver
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# mfsfileinfo passwd
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# mfsfileinfo bigfile2
三、master結點的開啓與關閉
當master節點開啓時/var/lib/mfs/metadata.mfs文件會變成.bak形式,當master節點關閉時他又會變回.mfs形式
1.切換到 metadata.mfs.back目錄,可以看到的當前沒有.mfs文件
[root@server1 3.0.103]# cd /var/lib/mfs
[root@server1 mfs]# ls
2.master節點使用的是單進程,將master進程kill掉
現在查看目錄中的文件,發現.back文件並沒有變成.mfs文件,這是因爲剛剛的關閉是非正常關閉,有數據沒有保存,再次啓動服務的時候會出問題
[root@server1 mfs]# ps ax
[root@server1 mfs]# kill -9 11513
[root@server1 mfs]# ls
注意: 當master節點宕掉之後客戶機千萬不要df查看掛載情況,否則會卡死
3.開啓master服務,報錯
[root@server1 mfs]# mfsmaster start
按照提示添加參數,開啓成功
[root@server1 mfs]# mfsmaster -a
4.正常關閉服務,查看發現沒有了.bak文件
[root@server1 mfs]# mfsmaster stop
[root@server1 mfs]# ls
5.再次開啓,又出現了.back文件
[root@server1 mfs]# mfsmaster start
[root@server1 mfs]# ls
四、恢復刪除文件
1.客戶機刪除dir1下的passwd文件,查看過期時間
[root@foundation19 dir1]# ls
bigfile passwd
[root@foundation19 dir1]# rm -f passwd
[root@foundation19 dir1]# mfsgettrashtime .
.: 86400
2.創建元數據掛載目錄,這個目錄必須是空的,掛載目錄
[root@foundation19 ~]# mkdir /mnt/mfsmeta
[root@foundation19 ~]# cd /mnt/mfsmeta/
[root@foundation19 mfsmeta]# ls
[root@foundation19 mfsmeta]# cd
[root@foundation19 ~]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
掛載之後df無法查看,但是mount可以查看到
[root@foundation19 ~]# df
[root@foundation19 ~]# mount
3.切換到掛載目錄,查看發現有一個trash目錄,這裏面存放的就是刪除的文件
找到passwd的位置
[root@foundation19 ~]# cd /mnt/mfsmeta/
[root@foundation19 mfsmeta]# ls
sustained trash
[root@foundation19 mfsmeta]# cd trash/
[root@foundation19 trash]# ls
[root@foundation19 trash]# ls | wc -l
4097
[root@foundation19 trash]# find -name *passwd*
./004/00000004|dir1|passwd
./005/00000005|dir1|passwd
這裏有兩個是因爲我之前還刪除過一次,我們只恢復一個即可
4.切換到005目錄,將00000005|dir1|passwd複製到undel目錄下
[root@foundation19 trash]# cd 005/
[root@foundation19 005]# ls
00000005|dir1|passwd undel
[root@foundation19 005]# mv 00000005\|dir1\|passwd undel/ //移動到undel目錄下才會恢復
5.切換到dir1目錄下查看到passwd文件已經恢復
[root@foundation19 005]# cd /mnt/mfs/dir1
[root@foundation19 dir1]# ls
bigfile passwd