linux mfs 数据恢复changelog_ml,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组件说明

e0a230fef302

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 * root@192.168.1.112:/var/lib/mfs/

#1.112

mfsmaster -a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值