一、简介
MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
MFS的组成:
元数据服务器(Master):
在整个体系中负责管理文件系统,维护元数据。所谓元数据记录的是整个分布式文件系统的变化,比如说记录文件存储在哪个主机,有多少个副本、每个文件大小多少、文件名字、文件被分成多少个块儿进行存储等信息,这些数据消耗的是服务器的内存资源
,因此元数据不在于存储的数据有多大,而在于其数量。
元数据日志服务器(MetaLogger):
备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
数据存储服务器(Chunk Server):
真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
客户端(Client):
可以像挂载NFS一样 挂载MFS文件系统
详细参考链接:https://blog.51cto.com/u_13555423/2082796.
二、系统部署
我们先要准备
三台全新的虚拟机:server1、2、3,server1做master,2和3做chunk server
1.镜像源配置、下载
官方网站:https://moosefs.com/download/#current.
[root@server1 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
MooseFS.repo redhat.repo rhel7.6.repo
[root@server1 yum.repos.d]# vim MooseFS.repo %设置gpgcheck=0
[root@server1 yum.repos.d]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y %安装相关rpm包
复制源到其它两个结点上:
[root@server1 yum.repos.d]# scp MooseFS.repo server2:/etc/yum.repos.d/
[root@server1 yum.repos.d]# scp MooseFS.repo server3:/etc/yum.repos.d/
2.master部署、启动服务
[root@server1 mfs]# vim /etc/hosts %添加server1的解析mfsmaster
[root@server1 mfs]# scp /etc/hosts server2:/etc/
[root@server1 mfs]# scp /etc/hosts server3:/etc/
[root@server1 mfs]# systemctl start moosefs-master.service %启动服务
[root@server1 mfs]# yum install -y net-tools
[root@server1 mfs]# netstat -antulp %查看开启的端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 13463/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 13463/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 13463/mfsmaster
[root@server1 mfs]# systemctl start moosefs-cgiserv.service %开启相关cgi服务(提供可视化界面)
[root@server1 mfs]# netstat -antulp %新增下面的端口
tcp 0 0 0.0.0.0:9425 0.0.0.0:* LISTEN 13563/python2
此时浏览器访问172.25.1.1:9425/mfs.cgi可以看到mfs.info页面
3.chunk server部署、启动服务
chunk server是真正存储数据的地方,在这里我们首先要划出来一个区域来提供存储,
生产环境中一般选择添加一块儿硬盘设备来作为存储挂载点
,而不是直接挂载到系统根分区上。这样的存储方式具有很好的隔离性,并且当服务器出现故障时,只需要把硬盘设备取出放置在其它主机上即可,数据不会因系统故障而丢失
server2上:
1、添加一块儿10G的硬盘并设置分区、格式化文件系统,设置开机自动挂载
2、做相关存储设置,并启动服务
[root@server2 yum.repos.d]# yum install moosefs-chunkserver
[root@server2 yum.repos.d]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc44a0076.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc44a0076
Device Boot Start End Blocks Id System
/dev/vdb1 2048 20971519 10484736 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@server2 yum.repos.d]# mkfs.xfs /dev/vdb1 %格式化文件系统
[root@server2 yum.repos.d]# mkdir /mnt/chunk1 %创建挂载目录
[root@server2 yum.repos.d]# cd
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ %更改存储的用户及用户组
[root@server2 ~]# blkid %查看设备uid,通过uid来设置开机自动挂载更为稳妥,因为设备名有可能会发生变化,开机启动系统时先加载哪块儿设备则哪块设备的后缀序号会命名为1,一次递增,因此设备名可能会发生变化
/dev/vda1: UUID="c1f6a043-6b4b-4ebe-b26a-8abe45863e5e" TYPE="xfs"
/dev/vda2: UUID="GbfJPj-WnWt-kpde-YtOV-7NVG-BfWx-qc5BVC" TYPE="LVM2_member"
/dev/mapper/rhel-root: UUID="769c645b-ba77-4138-864f-72d8f646b6f4" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="4ba5b817-3c3d-41aa-b88e-33f56bcdd38c" TYPE="swap"
/dev/vdb1: UUID="f65e8121-23e6-44e5-96b6-b637525ee389" TYPE="xfs"
[root@server2 ~]# vim /etc/fstab %设置开机自动挂载
[root@server2 ~]# mount -a
[root@server2 ~]# df
[root@server2 ~]# systemctl start moosefs-chunkserver %启动服务
[root@server2 ~]# netstat -antulp %查看启动的端口
[root@server2 ~]# cd /etc/mfs/
[root@server2 mfs]# ls
mfschunkserver.cfg mfschunkserver.cfg.sample mfshdd.cfg mfshdd.cfg.sample
[root@server2 mfs]# vim mfshdd.cfg %编辑配置文件,指定mfs存储文件
/mnt/chunk1 %添加这行内容
[root@server2 mfs]# systemctl reload moosefs-chunkserver.service %reload服务
`server3上和server2上一样的配置`
4.client端部署、启动服务
[root@foundation1 mnt]# yum install -y moosefs-client-3.0.115-1.rhsystemd.x86_64.rpm %先配置好源,然后下载相应rpm包
[root@foundation1 mnt]# vim /etc/hosts %添加server1的mfsmaster解析
[root@foundation1 mnt]# cd /etc/mfs/
[root@foundation1 mfs]# ls
mfsmount.cfg mfsmount.cfg.sample
[root@foundation1 mfs]# vim mfsmount.cfg %/mnt/mfs注释打开
[root@foundation1 mfs]# cd
[root@foundation1 ~]# mkdir /mnt/mfs
[root@foundation1 ~]# mfsmount %挂载mfs存储
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 3924804 0 3924804 0% /dev
tmpfs 3940708 9484 3931224 1% /dev/shm
tmpfs 3940708 10036 3930672 1% /run
tmpfs 3940708 0 3940708 0% /sys/fs/cgroup
/dev/mapper/rhel_foundation1-root 225251880 73110828 152141052 33% /
/dev/sda1 1038336 683544 354792 66% /boot
tmpfs 788140 36 788104 1% /run/user/1000
/dev/loop0 4391278 4391278 0 100% /var/www/html/rhel7.6
mfsmaster:9421 20948992 590592 20358400 3% /mnt/mfs
5.client端做存储测试
[root@foundation1 ~]# cd /mnt/mfs/
[root@foundation1 mfs]# ls
[root@foundation1 mfs]# mkdir dir1
[root@foundation1 mfs]# mkdir dir2
[root@foundation1 mfs]# mfsgetgoal dir1 %因为有两个chunk server,因此默认存储的数据备份两份,server2和server3上各一份
dir1: 2
[root@foundation1 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation1 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation1 mfs]# mfssetgoal -r 1 dir1 %备份的份数可以自己设置
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation1 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation1 mfs]# cp /etc/passwd dir1/
[root@foundation1 mfs]# cp /etc/fstab dir2/
[root@foundation1 mfs]# cd dir1
[root@foundation1 dir1]# mfsfileinfo passwd %查看文件的存储分配信息
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.0.3:9422 (status:VALID) %被分配存储到server3上
[root@foundation1 dir1]# cd ..
[root@foundation1 mfs]# cd dir2
[root@foundation1 dir2]# ls
fstab
[root@foundation1 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.0.2:9422 (status:VALID)
copy 2: 172.25.0.3:9422 (status:VALID)
[root@foundation1 dir2]# mfsfileinfo fstab %当某个存储节点down掉之后,另外一台节点上的存储不会收到影响
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
[root@foundation1 dir2]# cd ..
[root@foundation1 mfs]# cd dir1
[root@foundation1 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)