Moosefs分布式文件系统

目录

1.分布式文件系统

2.MooseFS简介 

MoosFS 具有以下特征:

3.MooseFS的体系结构 

四个模块

工作体系

MFS读数据的处理过程

MFS写数据的处理过程

4.实验环境

MFS部署

主master的部署

slave端的部署

客户端的部署 (真机作为客户端)

5.实验

基础实验

文本恢复

备份的内存分配

指定存储类标签存放数据

6.MFS高可用集群

配置server2上的target 

配置server1

同步文件


1.分布式文件系统

分布式文件系统是指文件系统管理的物理存储资源,不一定在本地节点上,而是通过网络与节点相连。
就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。
对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹,用户感觉不到这些共享文件是分散在各个计算机上的。

分布式文件系统的好处是集中访问、简化操作、数据容灾,以及提高文件的存取性能。

2.MooseFS简介 

MooseFS 是一个高容错性的分布式文件系统,它能够将资源分布存储于几台不同的物理介质,对外只提供给用户一个访问接口。对它的操作与其它文件系统完全一样:

|         分层文件结构(目录树结构);

l         存储POSIX 文件属性(权限、最后访问、修改时间);

l         支持特殊的文件(块文件夹、字符文件及管道和socket )

l         软链接(文件名指向目标文件)及硬链接(不同的文件名指向同一块数据);

l         仅限于基于IP 地址或密码来访问文件系统。

MoosFS 具有以下特征:

l         高可靠性:数据可以被存储于几个不同的地方;

l         可扩展性:可以动态的添加计算机或磁盘来增加系统的容量产;

l         高可控性:系统能够设置删除文件的时间间隔;

l         可追溯性:能够根据文件的不同操作(写入/ 访问)生成文件快照。

3.MooseFS的体系结构 

四个模块

元数据服务器Master                   在整个体系中负责管理文件系统,维护元数据。
元数据日志服务器MetaLogger    备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当Master服务器数据丢失或者损坏时,可以从日志服务器中取得文件,进行修复。
数据存储服务器Chunk Server    真正存储数据的服务器。存储文件时,会把文件分块保存,在数据服务器之间进行复制。数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
客户端Client                               可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。

工作体系

元数据存储在管理服务器内存磁盘中(周期性的更新二进制文件及增长的日志文件)。同时二进制文件及日志文件会被同步到元数据服务器。

MFS读数据的处理过程

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

#元数据服务器把数据存放的位置
(Chunk Server的IP地址和Chunk编号)告知客户端
(一份大的数据会被分块,存储在不同的数据服务器上)

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

#Chunk Server向客户端发送数据

MFS写数据的处理过程

 分为create创建和update 修改文件:

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

#元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行交互),

但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Server告知元数据服务器操作成功。

#元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
(副本数是由master来维护的)


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

#该Chunk Server与按照要求和其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功


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

原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构,使用的硬
盘和网络的吞吐量越好,整个系统的性能也就会越好。

4.实验环境

MFS部署

主master的部署

官方安装文档

首先要保证虚拟机可以上网,在真机中执行命令 
iptables -t nat -I POSTROUTING -s 172.25.70.0/24 -j MASQUERADE 

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo  #下载repo源
vim MooseFS.repo 

cat MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1

yum install -y moosefs-master  ##安装MFS master
yum install moosefs-cgi moosefs-cgiserv moosefs-cli -y  ##安装主服务器

systemctl start moosefs-master    ##启动MASTER
vim /etc/hosts   ##解析必须做
172.25.70.1 server1  mfsmaster

systemctl start moosefs-cgiserv.service    ##网页监控
netstat -antlp 

9419:metalogger监听的端口地址,和元数据服务器通信的,当master宕机,可以通过它的日志,接管master的服务
9420:用于chunkserver连接的端口地址
9421:用于客户端挂接连接的端口地址
9425:web界面监控各个分布节点的端口

访问172.25.70.1:9425/mfs.cgi 

slave端的部署

注意:/mnt/chunk1或/mnt/chunk2是一个给mfs 的分区,但在本机上是一个独立的目录,最好是一个单独的硬盘或者一个raid 卷,最低要求是一个分区。

server2

[root@server1 yum.repos.d]# scp MooseFS.repo server2:/etc/yum.repos.d/
ssh: Could not resolve hostname server2: Name or service not known
lost connection
[root@servre1 yum.repos.d]# scp MooseFS.repo demo2:/etc/yum.repos.d/
[root@server1 yum.repos.d]# scp MooseFS.repo demo3:/etc/yum.repos.d/
[root@server2 ~]# yum install moosefs-chunkserver   ##安装冷备份,两个slave端
[root@server3 ~]# yum install moosefs-chunkserver   ##安装冷备份
[root@server3 ~]# vim /etc/hosts   ##做解析

##server2添加一块虚拟磁盘,当作分布式存储
[root@server2 mfs]# fdisk /dev/vdb   ##默认分一块就可以
[root@server2 mfs]# mkfs.xfs /dev/vdb1   ##格式化
[root@server2 mfs]# mkdir /mnt/chunk1
[root@server2 mfs]# mount /dev/vdb1 /mnt/chunk1/   ##挂载
[root@server2 mfs]# blkid
/dev/vdb1: UUID="e94e65fa-35cd-4a40-9ef8-fa6ef42ef128" TYPE="xfs" 
[root@server2 mfs]# vim /etc/fstab 
[root@server2 mfs]# cat /etc/fstab     ##永久挂载
UUID="e94e65fa-35cd-4a40-9ef8-fa6ef42ef128" /mnt/chunk1   xfs     defaults 0 0 
[root@server2 mfs]# mount -a   ##刷新
[root@server2 mfs]# id mfs   ##设置权限
uid=997(mfs) gid=995(mfs) groups=995(mfs)
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/
##启动服务启动服务
[root@servre2 mfs]# systemctl start  moosefs-chunkserver 

##查看server2是否链接到server1这个master上
[root@demo2 ~]# cd /etc/mfs/
[root@demo2 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@demo2 mfs]# vim mfshdd.cfg   ##设置挂载目录
[root@demo2 mfs]# grep -v ^# mfshdd.cfg
/mnt/chunk1 
[root@demo2 mfs]# systemctl restart moosefs-chunkserver   ##重启服务

查看状态server3 

[root@server3 ~]# cd /etc/mfs/
[root@server3 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@server3 mfs]# mkdir /mnt/chunk2
[root@server3 mfs]# vim mfshdd.cfg
[root@server3 mfs]# grep -v ^# mfshdd.cfg
/mnt/chunk2
[root@server3 mfs]# chown mfs.mfs /mnt/chunk2
[root@server3 mfs]# df -h /
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   17G  1.2G   16G   7% /
[root@server3 mfs]# systemctl start moosefs-chunkserver

查看状态在master上检查9420端口查看server2、3是否连接到 master端的cpu压力来自于分布式系统文件大小
内存压力来自于文件数量

客户端的部署 (真机作为客户端)

[root@westos ~]# cd /etc/yum.repos.d/
[root@westos yum.repos.d]# ls
aliyun.repo  google-chrome.repo  redhat.repo  rhel8.2.repo
[root@westos yum.repos.d]# curl "http://ppa.moosefs.com/MooseFS-3-el8.repo" > /etc/yum.repos.d/MooseFS.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168  100   168    0     0     93      0  0:00:01  0:00:01 --:--:--    93
[root@westos yum.repos.d]# vim MooseFS.repo 
[root@westos yum.repos.d]# cat MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el8
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1
[root@westos yum.repos.d]# yum install moosefs-client

[root@westos ~]# cd /etc/mfs/
[root@westos mfs]# ls
mfsmount.cfg  mfsmount.cfg.sample
[root@westos mfs]# vim mfsmount.cfg
[root@westos mfs]# grep -v ^# mfsmount.cfg
/mnt/mfs    #添加挂载的目录,前提是这个挂载目录必须是空的
[root@westos mfs]# vim /etc/hosts  ##做解析

[root@westos ~]# mkdir /mnt/mfs
[root@westos ~]# mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@westos ~]# ll /etc/mfs/mfsmount.cfg
-rw-r--r--. 1 root root 400 Mar 19 11:29 /etc/mfs/mfsmount.cfg
[root@westos ~]# df   #查看/mnt/mfs是否挂载

[root@westos mfs]# mkdir dir1 dir2
[root@westos mfs]# mfsgetgoal dir1
dir1: 2
[root@westos mfs]# mfsgetgoal dir2
dir2: 2
[root@westos mfs]# mfssetgoal -r 1 dir1
dir1:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@westos mfs]# mfsgetgoal dir1
dir1: 1
[root@westos mfs]# cd dir1/
[root@westos dir1]# cp /etc/passwd .
[root@westos dir1]# mfsfileinfo passwd 
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.70.2:9422 (status:VALID)
        copy 2: 172.25.70.3:9422 (status:VALID)

[root@westos dir1]# cd ../dir2/
[root@westos dir2]# cp /etc/fstab  .
[root@westos dir2]# ls
fstab
[root@westos dir2]# mfsfileinfo fstab 
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.70.2:9422 (status:VALID)
		copy 2: 172.25.70.3:9422 (status:VALID)

5.实验

基础实验

文本恢复

将mfsmount挂载模拟删除passwd 

mfsgettrashtime fstab   ##查看删除之后可以在多久的时间之内恢复
fstab: 86400

在回收站查找被删除的文件并恢复 

备份的内存分配

一个备份文件为64Mmfssetgoal -r 1 dir1
备份改为1 

指定存储类标签存放数据

新建一个chunk3

labels的状态

##server2设置标签A
[root@server2 mfs]# pwd
/etc/mfs
[root@server2 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@server2 mfs]# vim mfschunkserver.cfg    ##设置标签A
[root@server2 mfs]# systemctl reload moosefs-chunkserver.service 

## server3设置标签B
[root@serve3 ~]# cd /etc/mfs/
[root@serve3 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@serve3 mfs]# vim mfschunkserver.cfg
[root@serve3 mfs]# systemctl reload moosefs-chunkserver.service 

##server4设置标签为A
[root@server4 ~]# cd /etc/mfs/
[root@server4 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@server4 mfs]# vim mfschunkserver.cfg
[root@server4 mfs]# systemctl reload moosefs-chunkserver.service 

[root@westos ~]# cd /mnt/mfs  
[root@westos mfs]# mfsscadmin create A,B ab_class   ##创建标签
[root@westos mfs]# cd dir2/
[root@westos dir2]# ls
bigfile  fstab
[root@westos dir2]# mfssetsclass ab_class fstab    ##设置标签
fstab: storage class: 'ab_class'
[root@westos dir2]# mfsfileinfo fstab 
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.70.2:9422 (status:VALID)
		copy 2: 172.25.70.3:9422 (status:VALID)

实验1

查看组状态

实验2

实验3 实验4 

mfsscadmin create -C 2AS -K AS,BS -A AH,BH -d 7 4S_class  ##C创建,K保持,A打包,d表示打包之后的过期时间

6.MFS高可用集群

关闭server4的moosefs-chunkserver
将server4作为master备机

配置server2上的target 

[root@server2 ~]# yum install targetcli -y   ##安装target软件
[root@server2 ~]# systemctl start target.service   ##启动target
[root@server2 ~]# targetcli 
/> ls
o- / .......................................................................... [...]
  o- backstores ............................................................... [...]
  | o- block ................................................... [Storage Objects: 0]
  | o- fileio .................................................. [Storage Objects: 0]
  | o- pscsi ................................................... [Storage Objects: 0]
  | o- ramdisk ................................................. [Storage Objects: 0]
  o- iscsi ............................................................. [Targets: 0]
  o- loopback .......................................................... [Targets: 0]
/> cd backstores/block 
/backstores/block> ls
o- block ....................................................... [Storage Objects: 0]
/backstores/block> create my_disk /dev/vdc
Created block storage object my_disk using /dev/vdc.
/backstores/block> cd /iscsi 
/iscsi> create iqn.2021-12.org.westos:target1
Created target iqn.2021-12.org.westos:target1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> cd iqn.2021-03.org.westos:target1/
/iscsi/iqn.20...estos:target1> cd tpg1/luns 
/iscsi/iqn.20...et1/tpg1/luns> create 
/backstores/block/my_disk   add_mapped_luns=            lun=                        
storage_object=             
/iscsi/iqn.20...et1/tpg1/luns> create /backstores/block/my_disk
Created LUN 0.
/iscsi/iqn.20...et1/tpg1/luns> cd ../acls 
/iscsi/iqn.20...et1/tpg1/acls> create iqn.2021-12.org.westos:client
Created Node ACL for iqn.2021-03.org.westos:client
Created mapped LUN 0.
/iscsi/iqn.20...et1/tpg1/acls> 

配置server1

servre1与server4配置相同
[root@server1 ~]# yum install -y iscsi-*    ##安装iscsi
[root@server5 ~]# yum install -y iscsi-*    ##安装iscsi
[root@server1 ~]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.1994-05.com.redhat:347c8bed1ada
[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi
[root@server1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-12.org.westos:client
[root@server1 ~]# systemctl status iscsi
● iscsi.service - Login and scanning of iSCSI devices
   Loaded: loaded (/usr/lib/systemd/system/iscsi.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:iscsid(8)
           man:iscsiadm(8)
[root@server1 ~]# systemctl is-enabled iscsi
enabled
[root@server1 ~]# systemctl is-enabled iscsid
disabled
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.70.2  ##指向target主机
172.25.70.2:3260,1 iqn.2021-12.org.westos:target1
[root@server1 ~]# iscsiadm -m node -l  ##登陆
[root@server1 ~]# cd /var/lib/iscsi/   ##进入iscsi文件夹
[root@server1 iscsi]# ls
ifaces  isns  nodes  send_targets  slp  static
[root@server1 iscsi]# cd nodes/   ##指向的节点
[root@server1 nodes]# ls
iqn.2021-03.org.westos:target1
[root@server1 nodes]# fdisk  -l    ##查看是否共享文件系统成功
[root@server1 nodes]# fdisk /dev/sda   ##直接建立一个大盘
[root@server1 nodes]# cat /proc/partitions   ##查看盘信息
major minor  #blocks  name
 252        0   20971520 vda
 252        1    1048576 vda1
 252        2   19921920 vda2
 253        0   17821696 dm-0
 253        1    2097152 dm-1
   8        0   10485760 sda
   8        1   10484736 sda1   
[root@server1 nodes]# partprobe 
[root@server1 nodes]# mkfs.ext4 /dev/sda1   ##格式化

同步文件

##1. server1上操作
[root@server1 ~]# mount /dev/sda1 /mnt/
[root@server1 ~]# df
/dev/sda1              10189076   36888   9611568   1% /mnt
[root@server1 ~]# ll -d /mnt/
drwxr-xr-x 3 root root 4096 Mar 19 04:06 /mnt/
[root@server1 ~]# id mfs
uid=997(mfs) gid=995(mfs) groups=995(mfs)
[root@server1 ~]# chown mfs.mfs /mnt/
[root@server1 ~]# ll -d /mnt/
drwxr-xr-x 3 mfs mfs 4096 Mar 19 04:06 /mnt/
[root@server1 ~]# cd /var/lib/mfs/
[root@server1 mfs]# ll
total 4908
-rw-r----- 1 mfs mfs     404 Mar 19 03:27 changelog.1.mfs
-rw-r----- 1 mfs mfs    1092 Mar 19 01:43 changelog.3.mfs
-rw-r----- 1 mfs mfs     679 Mar 19 00:53 changelog.4.mfs
-rw-r----- 1 mfs mfs    1864 Mar 18 23:59 changelog.5.mfs
-rw-r----- 1 mfs mfs     261 Mar 18 22:17 changelog.6.mfs
-rw-r----- 1 mfs mfs      45 Mar 18 21:49 changelog.7.mfs
-rw-r----- 1 mfs mfs     120 Mar 19 04:00 metadata.crc
-rw-r----- 1 mfs mfs    3569 Mar 19 04:00 metadata.mfs.back
-rw-r----- 1 mfs mfs    4001 Mar 19 03:00 metadata.mfs.back.1
-rwxr--r-- 1 mfs mfs       8 Oct  8 07:55 metadata.mfs.empty
-rw-r----- 1 mfs mfs 4984552 Mar 19 04:00 stats.mfs
[root@server1 mfs]# cp -p * /mnt/   
[root@server1 mfs]# cd /mnt/
[root@server1 mnt]# ls
changelog.1.mfs  changelog.5.mfs  lost+found         metadata.mfs.back.1
changelog.3.mfs  changelog.6.mfs  metadata.crc       metadata.mfs.empty
changelog.4.mfs  changelog.7.mfs  metadata.mfs.back  stats.mfs
[root@server1 mnt]# cd 
[root@server1 ~]# umount /mnt/   ##解除挂载
[root@server1 ~]# mount /dev/sda1 /var/lib/mfs/
[root@server1 ~]# cd /var/lib/mfs/
[root@server1 mfs]# ls
changelog.1.mfs  changelog.5.mfs  lost+found         metadata.mfs.back.1
changelog.3.mfs  changelog.6.mfs  metadata.crc       metadata.mfs.empty
changelog.4.mfs  changelog.7.mfs  metadata.mfs.back  stats.mfs
[root@server1 mfs]# cd
[root@server1 ~]# umount /var/lib/mfs/

##2. server5上操作

[root@server5 ~]# cd /var/lib/mfs/   ##可以查看数据是和server1不一样的
[root@server5 mfs]# ls
chunkserverid.mfs  csstats.mfs  metadata.mfs  metadata.mfs.empty

[root@server5 ~]# mount /dev/sda1 /var/lib/mfs/   ##先挂载在开启,做之前服务一定要是关闭的。不然需要-a 重新做一遍
##如果出错可以先mfsmaster -a 
[root@server5 mfs]# systemctl status moosefs-master.service    ##修改配额uzhi
[root@server5 mfs]# vim /usr/lib/systemd/system/moosefs-master.service
[root@server5 mfs]# cat /usr/lib/systemd/system/moosefs-master.service   ##server1也修改一下
ExecStart=/usr/sbin/mfsmaster -a
[root@server5 mfs]# systemctl daemon-reload 
[root@server5 mfs]# systemctl  start moosefs-master
[root@server5 mfs]# systemctl  stop moosefs-master   ##metadata.mfs 这个文件是必须有的
[root@server5 mfs]# ls
changelog.1.mfs  changelog.5.mfs  lost+found    metadata.mfs.back.1
changelog.3.mfs  changelog.6.mfs  metadata.crc  metadata.mfs.empty
changelog.4.mfs  changelog.7.mfs  metadata.mfs  stats.mfs

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值