Raspberry Pi 4 終於到手了。折騰開始!今天我們折騰MooseFS文件系統!
MooseFS是具有冗餘容錯功能的分佈式文件系統,簡稱MFS,它可以把數據存儲在多個節點上,確保一份數據多個備份副本,保證數據的安全可靠。
。
1.MFS的架構和特點
1.1 MFS文件系統結構
MFS文件系統中包括4種角色:
Master:管理節點,負責各個數據存儲服務器的管理、文件讀寫、文件空間回收以及恢復、多節點拷貝等。
Metalogger:元數據日誌服務器,可以認爲是Master的備份節點,負責備份Master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,在Master節點出問題的時候替代Master節點工作。
Chunkserver:數據存儲服務器,負責連接Master,並由Master調度,並提供 存儲空間。
Client:客戶端,通過fuse接口掛載Master上所管理的Chunkservers,掛載後的訪問類似於本地文件系統。
Metalogger,Chunkserver,Client都需要連接到Master上,Master是MFS系統的掛載入口。從這個架構,我們可以看到MFS系統的訪問都需要通過Master節點,系統龐大時可能會出現單點故障。
1.2 MFS文件系統的特點
- 基於IP地址和密碼的訪問控制
- 高可靠性,數據可以在多個Chunkserver上存儲多個副本
- 容量動態擴展,可以動態添加Chunkserver
- 有回收站功能,可以在設定的過期時間內恢復刪除的文件
2.MFS文件系統搭建
2.1 安裝MFS
MFS文件系統適配了Ubuntu、Debian、CentOS、MacOS、Raspbian等操作系統,針對這些操作系統都做了優化。安裝方式可以參考MFS官網https://moosefs.com/download/,下面我們就來實際操作一下。
由於只有一臺Raspberry Pi,所以我們就把MFS的所有節點都搭建在這臺Raspberry Pi上。
MFS官網https://moosefs.com/download/上有針對Raspbian 8和9的安裝指導,我們先確定一下Raspberry Pi的軟件版本。
pi@raspberrypi:~$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
....
Raspbain的版本是10,官方還沒有對應的版本支持,我們就先安裝Raspbian 9的版本。
我們按照官網上的指導按步驟操作。
下載並導入MFS的ppa的key。
pi@raspberrypi:~$ wget -O - https://ppa.moosefs.com/moosefs.key | apt-key add -
--2020-03-09 07:56:53-- https://ppa.moosefs.com/moosefs.key
正在解析主機 ppa.moosefs.com (ppa.moosefs.com)... 46.17.113.51
正在連接 ppa.moosefs.com (ppa.moosefs.com)|46.17.113.51|:443... E: This command can only be used by root.
已連接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:1796 (1.8K) [application/pgp-keys]
正在保存至: “STDOUT”
- 0%[ ] 0 --.-KB/s 用時 0s
無法寫入 “-” (斷開的管道)。
出現以上錯誤,我們濾過錯誤,分兩步來完成key的下載和導入。
pi@raspberrypi:~$ wget https://ppa.moosefs.com/moosefs.key
pi@raspberrypi:~$ sudo apt-key add moosefs.key
pi@raspberrypi:~$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
pub rsa2048 2012-04-01 [SC]
A0DA 38D0 D76E 8B5D 6388 7281 9165 938D 90FD DD2E
uid [ 未知 ] Mike Thompson (Raspberry Pi Debian armhf ARMv6+VFP) <[email protected]>
sub rsa2048 2012-04-01 [E]
......
pub rsa2048 2014-06-04 [SC] [有效至:2027-06-05]
0F42 5A56 8FAF F43D EA2F 6843 0427 65FC CF82 ADBA
uid [ 未知 ] MooseFS Development Team (Official MooseFS Repositories) <[email protected]>
增加apt安裝MFS的source。
pi@raspberrypi:~$ sudo echo "deb http://ppa.moosefs.com/moosefs-3/apt/raspbian/stretch stretch main" > /etc/apt/sources.list.d/moosefs.list
-bash: /etc/apt/sources.list.d/moosefs.list: 權限不夠
權限不夠,我們直接到apt的source目錄中添加文件。
pi@raspberrypi:~$ cd /etc/apt/sources.list.d
pi@raspberrypi:/etc/apt/sources.list.d$ sudo vim moosefs.list
deb http://ppa.moosefs.com/moosefs-3/apt/raspbian/stretch stretch main
pi@raspberrypi:/etc/apt/sources.list.d$ sudo apt update
然後就可以安裝MFS軟件啦!我們把4種角色都安裝在Raspberry Pi上,安裝命令參考MFS官網。
安裝Master:
apt install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli
安裝Chunkserver:
apt install moosefs-chunkserver
安裝Metalogger:
apt install moosefs-metalogger
安裝Client:
apt install moosefs-client
2.2 配置MFS
MFS安裝好之後,進入配置文件目錄修改各個節點的配置文件。
pi@raspberrypi:~$ cd /etc/mfs/
pi@raspberrypi:/etc/mfs$ ls
mfschunkserver.cfg mfsexports.cfg.sample mfsmaster.cfg mfsmetalogger.cfg.sample mfstopology.cfg
mfschunkserver.cfg.sample mfshdd.cfg mfsmaster.cfg.sample mfsmount.cfg mfstopology.cfg.sample
mfsexports.cfg mfshdd.cfg.sample mfsmetalogger.cfg mfsmount.cfg.sample
Master節點的配置文件有兩個:mfsmaster.cfg和mfsexports.cfg,其中mfsmaster.cfg配置整個MFS系統的參數,mfsexports.cfg配置MFS系統中可掛載目錄及權限。試驗中不做任何修改。
Metalogger節點的配置文件是mfsmetalogger.cfg,我們只修改配置文件中Master節點的IP地址爲Raspberry Pi的本機IP。
# MooseFS master host, IP is allowed only in single-master installations (default is mfsmaster)
MASTER_HOST = 192.168.1.9
Chunkserver節點的配置文件是mfschunkserver.cfg和mfshdd.cfg。其中mfschunkserver.cfg配置Chunkserver的參數,mfshdd.cfg配置掛載目錄或者硬盤路徑。
我們修改mfschunkserver.cfg文件中Master節點的IP地址爲Raspberry Pi的本機IP。
# MooseFS master host, IP is allowed only in single-master installations (default is mfsmaster)
MASTER_HOST = 192.168.1.9
新建mfs1目錄,並在mfshdd.cfg中配置爲掛載目錄,空間總共1GB。
/home/pi/mfs1 1GiB
這樣,MFS的簡單配置就完成了。
2.3 MFS系統的啓動和關閉
安全啓動MFS的步驟如下:
mfsmaster start #啓動 Master進程
mfschunkserver start #啓動 Chunkserver進程
mfsmetalogger start #啓動 Metalogger進程
mfsmount #客戶端掛載MFS文件系統
安全停止MFS集羣的步驟是反向執行啓動步驟,如下:
umount #客戶端卸載MFS文件系統
mfschunkserver stop #停止 Chunkserver進程
mfsmetalogger stop #停止 Metalogger進程
mfsmaster stop #停止 Master進程
2.4 MFS的可視化監控服務
MFS在Master節點上提供了監控當前運行狀態cgi服務mfscgiserv,啓動後,可以通過瀏覽器來查看MFS的運行狀態。
pi@raspberrypi:/etc/mfs$ sudo mfscgiserv start
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
在瀏覽器中訪問http://192.168.1.9:9425,就可以看到MFS系統的當前狀態了。
3.MFS功能操作
MFS啓動完成後,我們逐步來實踐MFS的掛載、讀寫、刪除、恢復等操作。
3.1 MFS的掛載
MFS系統通過mfsmount Master節點來掛載。我們新建mfstest目錄來掛載MFS。
pi@raspberrypi:~$ mkdir mfstest
pi@raspberrypi:~$ mfsmount ./mfstest/ -H 192.168.1.9
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
error in fuse_mount
出現了錯誤,按照提示,修改fuse.conf。
pi@raspberrypi:~$ sudo vim /etc/fuse.conf
......
# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other
重新掛載後,成功。用df命令也可以看到掛載成功。
pi@raspberrypi:~/mfs1$ df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/root 15G 11G 3.5G 75% /
......
192.168.1.9:9421 1.0G 0 1.0G 0% /home/pi/mfstest
3.2 讀寫操作
進入掛載目錄mfstest,添加文件。
pi@raspberrypi:~/mfstest$ touch aaaa.txt
pi@raspberrypi:~/mfstest$ ls
aaaa.txt
pi@raspberrypi:~/mfstest$ vim aaaa.txt
hello MFS.
新建目錄mfstest1,並再次掛載MFS。
pi@raspberrypi:~$ mkdir mfstest1
pi@raspberrypi:~$ mfsmount ./mfstest1 -H 192.168.1.9
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
pi@raspberrypi:~$ cd mfstest1
pi@raspberrypi:~/mfstest1$ ls
aaaa.txt
pi@raspberrypi:~/mfstest1$ vim aaaa.txt
hello MFS.
可以看到,測試文件寫入成功。
3.3 查看文件信息
MFS中查看文件信息的命令有mfsfileinfo和mfsdirinfo。
我們先看一下文件信息。
pi@raspberrypi:~/mfstest$ ls
aaaa.txt
pi@raspberrypi:~/mfstest$ mfsfileinfo aaaa.txt
aaaa.txt:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 192.168.1.9:9422 (status:VALID)
通過文件信息,可以看到測試文件aaaa.txt在MFS系統中只有一個副本,是因爲我們搭建的MFS系統中只有一個Chunkserver。當MFS系統中有多個Chunkserver時,可以通過mfssetgoal和mfsrsetgoal命令來設置文件或目錄的副本數量。文件信息中還包含了副本所在Chunkserver的IP。
我們再看一下目錄信息。
pi@raspberrypi:~/mfstest$ mkdir ttt
pi@raspberrypi:~/mfstest$ cd ttt
pi@raspberrypi:~/mfstest/ttt$ ls
pi@raspberrypi:~/mfstest/ttt$ touch bbbb.txt
pi@raspberrypi:~/mfstest/ttt$ vim bbbb.txt
testt
"bbbb.txt" 1L, 9C 已寫入
pi@raspberrypi:~/mfstest/ttt$ ls
bbbb.txt
pi@raspberrypi:~/mfstest/ttt$ cd ..
pi@raspberrypi:~/mfstest$ ls
aaaa.txt ttt
pi@raspberrypi:~/mfstest$ mfsdirinfo ttt/
ttt/:
inodes: 2
directories: 1
files: 1
chunks: 1
length: 9
size: 73728
realsize: 147456
3.4 文件的刪除和恢復
MFS有垃圾箱機制,能保證在文件刪除後的隔離時間內,恢復刪除文件。
MFS的默認隔離時間是24小時,也可以通過mfssettrashtime來設置,設置的時間是按照小時計算,設置的單位是秒,不滿一小時就按一小時計算。
pi@raspberrypi:~$ mfsgettrashtime mfstest
mfstest: 86400
pi@raspberrypi:~$ sudo mfssettrashtime 5000 mfstest
mfstest: 5000
pi@raspberrypi:~$ mfsgettrashtime mfstest
mfstest: 7200
我們重新創建一個文件,並刪除掉。
pi@raspberrypi:~/mfstest$ touch bb.txt
pi@raspberrypi:~/mfstest$ vim bb.txt
pi@raspberrypi:~/mfstest$ ls
aaaa.txt bb.txt ttt
pi@raspberrypi:~/mfstest$ rm bb.txt
pi@raspberrypi:~/mfstest$ ls
aaaa.txt ttt
刪除掉的文件,通過-m參數掛載到輔助文件系統後,就可以看到。這個輔助文件系統,可以看作爲MFS的垃圾箱。
pi@raspberrypi:~$ sudo umount mfstest1
pi@raspberrypi:~$ mfsmount -m mfstest1 -H 192.168.1.9
mfsmaster accepted connection with parameters: read-write,restricted_ip
pi@raspberrypi:~$ cd mfstest1
pi@raspberrypi:~/mfstest1$ ls
sustained trash
pi@raspberrypi:~/mfstest1$ find ./trash/ -name "*bb*"
./trash/012/00000012|bb.txt~
./trash/013/00000013|.bb.txt.swp
./trash/014/00000014|.bb.txt.swx
./trash/015/00000015|.bb.txt.swp
./trash/017/00000017|bb.txt
在垃圾箱中,可以找到刪除掉的bb.txt文件,只要把找到的文件移動到同級目錄下的undel目錄即可恢復。
pi@raspberrypi:~/mfstest1$ cd trash/017
pi@raspberrypi:~/mfstest1/trash/017$ ls
'00000017|bb.txt' undel
pi@raspberrypi:~/mfstest1/trash/017$ mv 00000017\|bb.txt ./undel/
pi@raspberrypi:~/mfstest1/trash/017$ ls
undel
回到mfstest目錄,可以看到刪除的文件已經恢復。
pi@raspberrypi:~/mfstest$ ls
aaaa.txt bb.txt ttt
4.小結
到此爲止,我們在Raspberry Pi上熟悉了MFS的搭建和基本操作,由於常用的文件讀寫性能測試工具IOZone沒有Raspberry Pi的版本,因此性能測試沒有完成。另外,由於是單臺機器搭建了所有的MFS節點,性能測試的意義不大,後續我們會搭建多節點的MFS系統,並進行讀寫性能的測試,請大家持續關注!
5.參考資料:
https://moosefs.com/download/