MFS 分布式存储

MFS分布式存储

MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个副本,然而对于访问MFS的客户端或者用户来说,整个分布式文件系统集群看起来就像一个资源一样,从其对文件系统的情况看MooseFS就相当于UNIX的文件系统

MFS特性:

​ 1.高可靠性:每一份数据都可以设置多个备份,并可以存储在不同的主机上

​ 2.高扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量

​ 3.高可容错性:我们可以通过对MFS进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据

​ 4.高数据一致性:即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照

MFS缺点:

​ 1.Master是单点,虽然会把数据信息同步到备份服务器,但是恢复需要时间

​ 2.Master服务器对主机的内存要求略高

​ 3.默认Metalogger复制元数据时间较长(可调整)

​ 内存使用问题:

​ 处理一百万个文件chunkserver,大约需要300M的内存空间。据此,推算如果未来要出来1个亿的文件chunkserver,大概需要30G内存空间

应用场景:

​ 1.大规模高并发的线上数据存储及访问(小文件、大文件都合适)

​ 2.大规模的数据处理,如日志分析,小文件强调性能不用HDFS

MFS组件说明


Snipaste_2020-03-17_13-29-35.png

管理服务器角色Managing server 简称Master:这个组件的角色是管理整个MFS文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的Metadata信息,Metadate信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等

​ 元数据备份服务器Metadata Backup Servers 简称Metalogger:这个组件的作用是备份管理服务器Master的变化的Metadata信息日志文件,文件类型为Changelog_ml.*.mfs。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作

​ 数据存储服务器组Data Servers(chunk servers) 简称Data:这个组件就是真正存放数据文件实体的服务器,这个角色可以有多台不同的物理服务器或不同的磁盘分区来充当,当配置数据的副本多于一份时,数据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份

​ 客户机服务器组Client Server 简称Client:这个组件就是挂在并使用MFS文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的Metadata信息,然后根据得到的Metadata信息,访问数据服务器读取或写入文件实体,MFS客户端通过fuse mechanism实现挂载MFS文件系统的,因此,只有系统支持fuse,就可以作为客户端访问MFS整个文件系统

MFS描述

​ Master记录着管理信息,比如:文件路径|大小|存储的位置|(IP,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入Metadata.mfs.back文件中,定期同步到Metalogger,操作实时写入changelog.*.mfs,实时同步到metalogger中。Master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件

​ 文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续

​ Chunkserver上的剩余存储空间要大于1GB,新的数据才会被允许写入,否则,你会看到No Space left on device的提示,实际上,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB

​ 文件可以有多分copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去保存

构建MFS集群

​ MFS环境:

​ 192.168.1.103:client

​ 192.168.1.112:master

​ 192.168.1.113:chunkserver1

​ 192.168.1.114:chunkserver2

​ 192.168.1.115:Metadata

安装

#1.112
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli
vim /etc/mfs/mfsmaster.cfg  #不需要修改,解释参数
    WORKING_USER = mfs
    WORKING_GROUP = mfs
    SYSLOG_IDENT = mfsmaster    #在syslog中的表示,说明这是mfsmaster产生的
    LOCK_MEMORY = 0 #是否执行mlockall()以避免mfsmaster内存溢出(默认是0)
    NICE_LEVEL = -19    #运行的优先级,默认-19,注意,这个进程必须是root启动
    DATA_PATH = /var/lib/mfs    #数据存放路径,该目录下有三大类文件,changelog,sessions,stats
    EXPORTS_FILENAME = /etc/mfs/mfsexports.cfg  #被挂载目录以及其权限控制文件的存放位置
    BACK_LOGS = 50  #元数据的改变日志文件数量
    METADATA_SAVE_FREQ = 1  #主机多久存储一次元数据
    BACK_META_KEEP_PREVIOUS = 1     #要保留的先前元数据文件数
    CHANGELOG_PRESERVE_SECONDS = 1800   #更改日志必须保留在内存中的秒数(默认值为1800;这设置了最小值,实际数字可能会更大一些)
    MISSING_LOG_CAPACITY = 100000   #主机中将存储多少个丢失的块(最多分配100 * MISSING_LOG_CAPACITY字节的内存)
    MATOML_LISTEN_HOST = *  #元数据日志监听的IP地址(默认*,表示所有)
    MATOML_LISTEN_PORT = 9419   #元数据日志服务器监听的端口地址
    MATOCS_LISTEN_HOST = *  #用于存储服务器(chunkserver)连接的IP地址
    MATOCS_LISTEN_PORT = 9420   #用于存储服务器(chunkserver)连接的端口地址
    MATOCS_TIMEOUT = 10 #master和chunkserver默认的连接超时时间
    REPLICATIONS_DELAY_INIT = 60    #延迟复制时间
    CHUNKS_LOOP_MIN_TIME = 300  #chunks的回环率
    CHUNKS_SOFT_DEL_LIMIT = 10  #
    CHUNKS_WRITE_REP_LIMIT = 2,1,1,4    #在一个循环里复制到一个chunk server的最大chunks数目
vim /etc/mfs/mfsexports.cfg
    192.168.1.0/24 . rw,alldirs,maproot=0   #末尾添加
systemctl start moosefs-master  #主服务
systemctl start moosefs-cgiserv.service #监控页面
http://192.168.1.112:9425/  #界面很不友好

安装Metadata服务器

#1.115
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-metalogger
vim /etc/mfs/mfsmetalogger.cfg
    META_DOWNLOAD_FREQ = 2  #备份时间循环
    MASTER_HOST = 192.168.1.112 #主服务器IP地址
systemctl start moosefs-metalogger
cd /var/lib/mfs/;ls #发现主上面的同步到此目录下来了

安装chunk server服务器

#1.113
fdisk /dev/sdb  #这个磁盘是我自己添加的,你也必须添加一个磁盘
    n;p;1;w #n添加新硬盘,p添加主分区,1扇区分号,w保存退出
mkfs.ext4 /dev/sdb1
mkdir /mnt/mfs
mount -t ext4 /dev/sdb1 /mnt/mfs/
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-chunkserver
vim /etc/mfs/mfschunkserver.cfg
    MASTER_HOST = 192.168.1.112
    MASTER_PORT = 9420
    HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg
vim /etc/mfs/mfshdd.cfg
    /mnt/mfs
chown -R mfs.mfs /mnt/mfs/
systemctl start moosefs-chunkserver

安装client

#1.103
yum -y install fuse fuse-devel fuse-libs
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-client
mkdir /mfsclient
mfsmount /mfsclient/ -H 192.168.1.112
vim 1.txt
    #随便写入
mfsfileinfo 1.txt   #查看1.txt所在chunk的信息

添加chunk2节点

#1.114
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
yum install moosefs-chunkserver
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mount -t ext4 /dev/sdb1 /mnt/mfs/
vim /etc/mfs/mfschunkserver.cfg
    HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg
    MASTER_HOST = 192.168.1.112
    MASTER_PORT = 9420
vim /etc/mfs/mfshdd.cfg
    /mnt/mfs
chown -R mfs.mfs /mnt/mfs/
systemctl start moosefs-chunkserver

此时再次回到1.103

echo "hahaha" > 2.txt
mfsfileinfo 2.txt
    2.txt:
        chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
            copy 1: 192.168.1.113:9422 (status:VALID)
            copy 2: 192.168.1.114:9422 (status:VALID)
#节点2已添加

MFS维护操作

#1.103
#误删除恢复
rm -rf /mfsclient/2.txt
mkdir mfsback
mfsmount -m mfsback/ -H 192.168.1.112
cd mfsback/
cd trash/
tree . >> /root/1.txt
cat /root/1.txt
    006
    │   ├── 00000006|2.txt
    │   └── undel
#我们可以看到2.txt在哪个文件夹
mv 006/00000006\|2.txt /root/mfsback/undel  #执行完这一步,回到mfsclient看,发现文件已恢复
cd /mfsclient
mfsgettrashtime 2.txt   #2.txt的更新时间,如果过了那个时间就不可以恢复
mfssettrashtime 888888 2.txt    #设置2.txt的删除恢复时间
#快照
mkdir back
mfsmakesnapshot 2.txt back/
#设置副本数
mfsfileinfo 3.txt 
    3.txt:
        chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
            copy 1: 192.168.1.113:9422 (status:VALID)
            copy 2: 192.168.1.114:9422 (status:VALID)
mfssetgoal 1 3.txt
mfsfileinfo 3.txt 
    3.txt:
        chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
            copy 1: 192.168.1.114:9422 (status:VALID)

Master死亡

#1.112
systemctl stop moosefs-master.service
rm -rf /var/lib/mfs/*
#此时的master已经不可用,需要从Metalogger拿取关键数据恢复
#1.115
cd /var/lib/mfs/
scp * [email protected]:/var/lib/mfs/
#1.112
mfsmaster -a

你可能感兴趣的:(MFS 分布式存储)