MooseFS 源码安装

目录

一 、前言

1.Moosefs的介绍

2.Moosefs的特征

(1)层析结构(目录树)

(2)存储文件属性(权限、访问和修改时间)

(3)支持特殊文件(块设备,字符设备,管道)

(4)符号链接,软硬链接

(5)对文件系统访问可以通过IP地址或者密码进行访问限制

(6)高可靠(数据的多个拷贝存储在不同的计算机上)

(7)通过附加新的计算机或者硬盘可以实现容量的动态扩展

(8)删除文件可以根据一个可配置的时间周期进行保留

(9)不受访问和写入影响的文件连贯快照

 3.MooseFS的应用场景(分布式文件系统的应用场景)

(1)大规模高并发的数据存储及访问(小文件,大文件)

(2)大规模的数据处理,如日志分析 

4.MooseFS的官方网站: https://moosefs.com

5.Moosefs的软件包地址:百度网盘 请输入提取码提取码:pxup

6.MFS文件系统的组成

7.MFS的工作流程

(1)MFS读取数据的处理过程

(2)MFS写入数据的处理过程

(3)MFS的删除文件过程

(4)MFS重命名文件的过程

二 、MooseFS的搭建(源码安装)

1.规划节点

2.在每个节点上安装编译器和工具包并关闭防火墙

3.搭建master server

4.搭建Meta Logger Server(元数据日志服务器)

5.搭建Chunk Server(三台Chunk Server主机搭建步骤相同)

6.配置Client(客户端)

7.在Master主机上启动监控

三、MFS的应用

1.文件备份

2.数据恢复


、前言

1.Moosefs的介绍

MooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类UNIX文件系统一样,包含了层级结构(目录树),存储着文件属性(权限、最后访问和修改时间),常见特殊的文件(块设备、字符设备、管道、套接字),符号链接,硬链接

2.Moosefs的特征

(1)层析结构(目录树)

(2)存储文件属性(权限、访问和修改时间)

(3)支持特殊文件(块设备,字符设备,管道)

(4)符号链接,软硬链接

(5)对文件系统访问可以通过IP地址或者密码进行访问限制

(6)高可靠(数据的多个拷贝存储在不同的计算机上)

(7)通过附加新的计算机或者硬盘可以实现容量的动态扩展

(8)删除文件可以根据一个可配置的时间周期进行保留

(9)不受访问和写入影响的文件连贯快照

 3.MooseFS的应用场景(分布式文件系统的应用场景)

(1)大规模高并发的数据存储及访问(小文件,大文件)

(2)大规模的数据处理,如日志分析 

4.MooseFS的官方网站: https://moosefs.com

5.Moosefs的软件包地址:百度网盘 请输入提取码提取码:pxup

6.MFS文件系统的组成

元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据。

元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当Master服务器数据丢失或者损坏时,可以从日志服务器中取得文件,进行修复。

数据存储服务器(Chunk Server):真正存储数据的服务器。存储文件时,会把文件分块保存,在数据服务器之间进行复制。数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。

客户端(Client):可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。

7.MFS的工作流程

(1)MFS读取数据的处理过程

客户端向元数据服务器发出读请求

元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端

客户端向已知的Chunk Server请求发送数据

Chunk Server向客户端发送数据

(2)MFS写入数据的处理过程

客户端向元数据服务器发送写入请求

元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据

客户端向指定的Chunk Server写入数据

该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功

客户端告知元数据服务器本次写入完毕

(3)MFS的删除文件过程

客户端有删除操作时,首先向Master发送删除信息

Master定位到相应元数据信息进行删除,并将chunkserver上的删除操作加入队列异步清理

响应客户端删除成功的信号

MFS修改文件内容的过程

客户端有修改文件内容时,首先向Master发送操作信息

Master申请新的块给.swp文件

客户端关闭文件后,会向Master发送关闭信息

Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块

若无,则直接删除.swp文件块。

(4)MFS重命名文件的过程

客户端重命名文件时,会向Master发送操作信息;

Master直接修改元数据信息中的文件名;返回重命名完成信息;

https://img-blog.csdnimg.cn/9f1ec4ccefac4b2692a67571649f2edd.png

二 、MooseFS的搭建(源码安装)

1.规划节点

主机类型

IP地址

主机名

Master

192.168.32.127

Server1

Metalogger

192.168.32.128

Server2

Chunkserver1

192.168.32.130

Server3

Chunkserver2

192.168.32.132

Server4

Chunkserver3

192.168.32.131

Server5

Client

192.168.32.133

Server6

2.在每个节点上安装编译器和工具包并关闭防火墙

[root@server ~]# setenforce 0

[root@server ~]# systemctl stop firewalld

[root@server ~]# systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@server ~]# yum  install gcc gcc-c++ make   zlib-devel  fuse-devel -y

[root@server ~]# yum install -y lrz*

[root@server ~]# yum install -y unzip

[root@server ~]# yum install -y net-tools

3.搭建master server

[root@server1 ~]# useradd -M -s /sbin/nologin mfs                                 //创建进程用户

[root@server1 ~]# unzip moosefs-master.zip -d /opt                               //解压到/opt目录下

[root@server1 ~]# cd /opt/moosefs-master/                                            //进入该目录

[root@server1 moosefs-master]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs                                                                       //进行编译

[root@server1 moosefs-master]# make && make install                       //安装

[root@server1 moosefs-master]# cd /usr/local/mfs/etc/mfs/

[root@server1 mfs]# cp mfsexports.cfg.sample mfsexports.cfg            #输出目录配置文件,定义挂载以及权限设定文件

[root@server1 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg               #主配置文件

[root@server1 mfs]# cp mfstopology.cfg.sample mfstopology.cfg        #元数据日志文件

[root@server1 mfs]# cd /usr/local/mfs/var/mfs/

[root@server1 mfs]# cp metadata.mfs.empty metadata.mfs                #master元数据文件

[root@server1 mfs]# chown  -R mfs.mfs  /usr/local/mfs                    //授权

[root@server1 mfs]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/           //优化目录

[root@server1 mfs]# mfsmaster start                                                        //启动服务

open files limit has been set to: 16384

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

initializing mfsmaster modules ...

exports file has been loaded

topology file has been loaded

loading metadata ...

master <-> metaloggers module: listen on *:9419

master <-> chunkservers module: listen on *:9420

main master server module: listen on *:9421

mfsmaster daemon initialized properly

[root@server1 mfs]# netstat -anpt | grep mfs                                          //查看端口

tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      1457/mfsmaster     

tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      1457/mfsmaster     

tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      1457/mfsmaster     

编辑启动脚本

[root@server1 mfs]# echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.d/rc.local

[root@server1 mfs]# chmod +x /etc/rc.d/rc.local

4.搭建Meta Logger Server(元数据日志服务器)

[root@server1 ~]# useradd -M -s /sbin/nologin mfs                                //创建进程用户

[root@server2 ~]# unzip moosefs-master.zip -d /opt                              //解压到/opt目录下

[root@server2 ~]# cd /opt/moosefs-master/

[root@server2 moosefs-master]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs                                                                       //编译

[root@server2 moosefs-master]# make && make install                       //安装

[root@server2 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg              

[root@server2 mfs]# cp mfsexports.cfg.sample mfsexports.cfg

[root@server2 mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg

[root@server2 mfs]# cd /usr/local/mfs/var/mfs/

[root@server2 mfs]# cp metadata.mfs.empty metadata.mfs

[root@server2 mfs]# cd /usr/local/mfs/etc/mfs/

[root@server2 mfs]# vi mfsmetalogger.cfg                                               //编辑配置文件

修改以下内容:

MASTER_HOST = 192.168.32.127           #执行master服务器的ip地址,去掉注释符号

META_DOWNLOAD_FREQ = 24               #备份频率时间

[root@server2 mfs]# chown  -R mfs.mfs  /usr/local/mfs                    //授权

[root@server2 mfs]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/           //优化目录

[root@server2 mfs]# mfsmetalogger start                                                //启动服务

open files limit has been set to: 4096

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ...

mfsmetalogger daemon initialized properly

[root@server2 mfs]# netstat -anpt | grep mfsmetalogger                     //查看端口

tcp        0      0 192.168.32.128:33614    192.168.32.127:9419     ESTABLISHED 9068/mfsmetalogger

[root@server2 mfs]# echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.d/rc.local

[root@server2 mfs]# chmod +x /etc/rc.d/rc.local

5.搭建Chunk Server(三台Chunk Server主机搭建步骤相同)

安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循POSIX标准 ,chunkserver存储数据时,是在一个普通的文件系统如ext4上存储数据块或碎片(chunks/fragments)作为文件。你在chunkserver上看不到完整的文件。

[root@server3 ~]# useradd -M -s /sbin/nologin mfs                                //创建进程用户

[root@server3 ~]# unzip moosefs-master.zip -d /opt                              //解压到/opt目录下

[root@server3 ~]# cd /opt/moosefs-master/

[root@server3 moosefs-master]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs                                                                       //编译

[root@server3 moosefs-master]# make && make install                       //安装

[root@server3 moosefs-master]# cd /usr/local/mfs/etc/mfs/

[root@server3 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg

[root@server3 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

[root@server3 mfs]# vi mfschunkserver.cfg

修改以下内容:

MASTER_HOST  =  192.168.32.127       #指向master服务器的ip地址,去掉注释符号

[root@server3 mfs]#vi mfshdd.cfg                                                              //编辑配置文件

添加一行:

/data      #这是一个给MFS的分区,最好使用独立的分区,或者磁盘挂载到此目录下

[root@server3 ~]# mkdir /data                                                                    //创建/data目录

[root@server3 ~]# chown -R mfs:mfs /data/                                             //授权

[root@server3 ~]# chown -R mfs.mfs /usr/local/mfs                               //授权

[root@server3 ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

[root@server3 ~]# mfschunkserver start                                                   //启动服务

open files limit has been set to: 16384

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

setting glibc malloc arena max to 4

setting glibc malloc arena test to 4

initializing mfschunkserver modules ...

hdd space manager: path to scan: /data/

hdd space manager: start background hdd scanning (searching for available chunks)

main server module: listen on *:9422

no charts data file - initializing empty charts

mfschunkserver daemon initialized properly

[root@server3 ~]# netstat -anpt | grep mfschunkserver                         //查看端口

tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      9850/mfschunkserver

tcp        0      0 192.168.32.132:42066    192.168.32.127:9420     ESTABLISHED 9850/mfschunkserver

[root@server3 ~]# echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.d/rc.local

[root@server3 ~]# chmod +x /etc/rc.d/rc.local

6.配置Client(客户端)

[root@server6 ~]# useradd -M -s /sbin/nologin mfs                                //创建进程用户

[root@server6 ~]# unzip moosefs-master.zip -d /opt                              //解压到/opt目录下

[root@server6 ~]# cd /opt/moosefs-master/

[root@server6 moosefs-master]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount                                    //编译

[root@server6 moosefs-master]# make && make install                       //安装

[root@server6 moosefs-master]# ln -s  /usr/lcoal/mfs/bin/* /usr/local/bin

[root@server6 ~]# mkdir /opt/mfs                                                              #创建挂载点

[root@server6 ~]# tar zxf fuse-2.9.2.tar.gz -C /usr/src

[root@server6 ~]# cd /usr/src/fuse-2.9.2/

[root@server6 fuse-2.9.2]# ./configure && make && make install

[root@server6 moosefs-master]# mkdir /opt/mfs

[root@server6 ~]# vim /etc/profile

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH  #末尾添加

[root@server6 ~]# source /etc/profile

[root@localhost ~]# modprobe fuse                                                        # 加载fuse到内核

[root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

[root@localhost ~]# mfsmount /opt/mfs -H 192.168.1.10                     //将挂载点挂载到master主机,回映射到根目录

[root@localhost ~]# df -hT | grep mfs                                                        //查看挂载点

192.168.32.127:9421       fuse.mfs   83G     0   83G   0% /opt/mfs

7.在Master主机上启动监控

[root@server1 ~]# mfscgiserv

8.访问http://192.168.32.127:9425

三、MFS的应用

1.文件备份

[root@server6 ~]# cd /opt/mfs

[root@server6 mfs]# mkdir data1                                              //创建测试文件目录

[root@server6 mfs]# mkdir data2

[root@server6 mfs]# mfsgetgoal data1/#若报错可以退出这个目录重新进,然后再新建

data1/: 2

[root@server6 mfs]# mfsgetgoal data2/                                  //表示俩个目录都保存了俩份

data2/: 2

[root@server6 mfs]# mfssetgoal -r 1 data1/                          //将备份数改为了一份

data1/:

 inodes with goal changed:                       1

 inodes with goal not changed:                   0

 inodes with permission denied:                  0

现在可以看到data1已经保存为1份,开始拷贝测试文件。

[root@server6 mfs]# mfsgetgoal data1/

data1/: 1

[root@server6 mfs]# mfsgetgoal data2/

data2/: 2

[root@server6 mfs]# cp /etc/passwd data1/

[root@server6 mfs]# cp /etc/fstab data2/

[root@server6 mfs]# mfsfileinfo data1/passwd                    //查看拷贝文件信息

data1/passwd:

                  chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

                           copy 1: 192.168.32.130:9422 (status:VALID)

[root@server6 mfs]#  mfsfileinfo data2/fstab

data2/fstab:

                  chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

                           copy 1: 192.168.32.131:9422 (status:VALID)

                           copy 2: 192.168.32.132:9422 (status:VALID)

现在就可以发现data1在server3 data2在server4 server5里

我们把server3关闭访问data1,会发现 访问失败。

[root@server3 ~]# chunkserver stop

[root@server6 mfs]# mfsfileinfo data1/passwd

data1/passwd:

         chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

                  no valid copies !!!

接下来进行切分的实验,默认chunk的大小为64M,当文件大于64M时会进行切分:

[root@server6 mfs]# cd data1/

[root@server6 data1]# dd if=/dev/zero of=bigfile bs=1M count=100  #在data1中新建一个100M的文件

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,1.16746 秒,89.8 MB/秒

[root@server6 data1]# mfsfileinfo bigfile                                //查看这个文件的信息

bigfile:

                  chunk 0: 0000000000000003_00000001 / (id:3 ver:1)

                          copy 1: 192.168.32.131:9422 (status:VALID)

                  chunk 1: 0000000000000004_00000001 / (id:4 ver:1)

                          copy 1: 192.168.32.130:9422 (status:VALID)

可以看出被切分成两个chunk,这样就可以保证写入和读取的速度,这也就是分布式文件系统的意义。

2.数据恢复

[root@server6 data1]# mfsgettrashtime .                       //86400秒即24小时

.: 86400

[root@server6 data1]# ls

bigfile  passwd

[root@server6 data1]# rm -rf passwd                             //删除文件

[root@server6 opt]# mkdir mfsmeta                                //建立元数据挂载目录

[root@server6 opt]# cd

[root@server6 ~]# mfsmount -m /opt/mfsmeta/

mfsmaster accepted connection with parameters: read-write,restricted_ip

[root@server6 ~]# cd /opt/mfsmeta/

[root@server6 mfsmeta]# ls

sustained  trash

[root@server6 mfsmeta]# find -name *passwd*           //查找删除的文件

./trash/004/00000004|data1|passwd

[root@server6 mfsmeta]# cd trash/

[root@server6 trash]# cd 004

[root@server6 004]# ls

00000004|data1|passwd  undel

[root@server6 004]# mv 00000004\|data1\|passwd undel/                         #恢复数据需要将删除的文件移动到undel目录中

[root@server6 004]# cd /opt/mfs/data1/

[root@server6 data1]# ls                                                    //此时数据已经恢复了

bigfile  passwd

[root@server6 data1]# cat passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

mfs:x:1000:1000::/home/mfs:/sbin/nologin

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闻仔睡不醒

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值