玩轉Raspberry Pi 4之搭建MooseFS系統

  ​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/

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