玩转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/

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