MFS分布式对象存储原理及部署

MFS 分布式对象存储

高级存储:块存储、对象存储

块存储:将服务器上的底层存储资源共享给多个客户端使用,使用集群模式进行存储空间管理

对象存储:将多台服务器的存储资源交由一个统一的管理中心进行调度,有调度中心决定数据存储的方案

 

  分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。

官网:http://ppa.moosefs.com/src/

一、MooseFS优越特性如下

Free(GPL)通用文件系统

  • 可以在线扩容,体系架构可伸缩性极强。
  • 部署简单。
  • 高可用,可设置任意的文件冗余程度(提供比raid10更高的冗余级别,而绝对不会影响读或者写的性能,只会加速)
  • 可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似即时回滚特性)
  • 提供了类似于EMC,IBM等商业存储的snapshot(快照)特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)

二、MFS 工作原理和设计架构

角色

角色作用

管理服务器

managing server (master)

负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复、多节点拷贝

元数据日志服务器

Metalogger serve(Metalogger)

负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作

数据存储服务器

data servers (chunk servers)

负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.

客户机挂载使用

client computers

通过fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地unix 文件系统使用一样的效果.

 

MFS的读数据过程

  • 当client需要数据时,首先向master server发起查询请求
  • 管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid
  • 管理服务器将数据服务器的地址发送给客户端
  • 客户端向具体的数据服务器发起数据获取请求
  • 数据服务器将数据发送给客户端

MFS的写数据过程

  • 当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等)
  • 管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块
  • 数据服务器返回创建成功的消息
  • 管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid)
  • 客户端向数据服务器写数据
  • 数据服务器返回给客户端写成功的消息
  • 客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间

MFS的修改或删除文件过程

  • 客户端有删除操作时,首先向Master发送删除信息
  • Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理
  • 响应客户端删除成功的信号MFS修改文件内容的过程客户端有修改文件内容时,首先向Master发送操作信息
  • Master申请新的块给.swp文件,客户端关闭文件后,会向Master发送关闭信息
  • Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块
  • 若无,则直接删除.swp文件块。

MFS重命名文件的过程

  • 客户端重命名文件时,会向Master发送操作信息
  • Master直接修改元数据信息中的文件名
  • 返回重命名完成信息

MFS遍历文件的过程

  • 遍历文件不需要访问chunk server,当有客户端遍历请求时,向Master发送操作信
  • Master返回相应元数据信息
  • 客户端接收到信息后显示

注:

  • Master记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs.back文件中,定期同步到metalogger,操作实时写入changelog.*.mfs,实时同步到metalogger server中。master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件。
  • 文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF 256个目录循环,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去存。

mfsmaster.cfg 详解

WORKING_USER = mfs

WORKING_GROUP = mfs

SYSLOG_IDENT = mfsmaster #syslog中的表示,说明这是mfsmaster产生的

LOCK_MEMORY = 0 # 是否执行mlockall()以避免mfsmaster内存溢出(默认为0

NICE_LEVEL = -19 # 运行的优先级(默认-19,范围:-19-20,注意,这进程必须是root启动 )

DATA_PATH = /usr/local/mfs/var/mfs #数据存放路径,该目录下有三大类文件,changelog,sessions,stats

EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg #被挂载目录以及其权限控制文件的存放位置

BACK_LOGS = 50 #元数据的改变日志文件数量(默认是50

MATOML_LISTEN_HOST = * # 元数据日志服务器监听的IP地址(默认是*,代表任何IP

MATOML_LISTEN_PORT = 9419 # 元数据日志服务器监听的端口地址,默认是9419

MATOCS_LISTEN_HOST = * # 用于存储服务器(Chunk Server)连接的IP地址

MATOCS_LISTEN_PORT = 9420 # 是存储服务器(Chunk server)连接的端口地址

REPLICATIONS_DELAY_INIT = 300 # 延迟复制的时间(默认是300

CHUNKS_LOOP_MIN_TIME = 300 # chunks 的回环率

CHUNKS_SOFT_DEL_LIMIT = 10

CHUNKS_WRITE_REP_LIMIT = 2,1,1,4 在一个循环里复制到一个CHUNK Server的最大chunks数目

CHUNKS_READ_REP_LIMIT = 10,5,2,5

MATOCL_LISTEN_HOST = *

MATOCL_LISTEN_PORT = 9421

注意:

  • 凡是用#注释掉的变量均使用其默认值
  • 修改DATA_PATH指定的目录要权限为mfs,chown -R mfs:mfs /usr/local/mfs/var/mfs
  • mfsexports 访问控制对于那些老用户是没用的
  • 注意开通监听的端口

mfsmaster

9419:给mfsmetalogger服务器连接使用的

9420:给mfschunkserver服务器连接使用的

9421:给mfsclient客户端链接使用的

9425:web信息展示的页面放问端口

mfschunkserver

9422:给mfsclient客户端链接{数据存储&下载}的端口

MFS安装配置使用 

实验准备:

IP

身份

192.168.9.101

Master server

192.168.9.102

Metalogger server

192.168.9.103

Chunk server 1

192.168.9.104

Chunk server 2

192.168.9.106

Client server

一、MFS基础配置

Master server192.168.9.101

1.上传/下载安装包,安装

官网:http://ppa.moosefs.com/src/

yum -y install gcc zlib-devel

useradd -r -s /sbin/nologin mfs

tar -xf moosefs-3.0.101-1.tar.gz

cd moosefs-3.0.101

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

make

make install

3.配置

ln -s /usr/local/mfs/bin/* /usr/local/bin/

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

cd /usr/local/mfs/etc/mfs

cp -a mfsmaster.cfg.sample mfsmaster.cfg

cp -a mfstopology.cfg.sample mfstopology.cfg

cp -a mfsexports.cfg.sample mfsexports.cfg

vim mfsexports.cfg

无需修改,示例:

#客户端IP        允许挂载的目录  客户端拥有的权限

192.168.0.0/24     /            rw,alldirs,maproot=0:0  # /标识MFS的根

192.168.0.0/24     .            rw                    # .标识MFSMETA 文件系统

# ip*、单IP、网段、IP范围都可

# 权限:

ro                只读模式共享

rw                读写方式共享

alldirs        允许挂载任何指定的子目录

maproot        映射为root用户组还是指定的用户组

password        指定客户端密码

4.管理

cd /usr/local/mfs/var/mfs

cp -a metadata.mfs.empty metadata.mfs

mfsmaster start

netstat -antp|grep mfsmaster

注意:最好不要kill master,安全停止执行mfsmaster stop,否则下次启动因metadata.mfs.back而出现问题,还需要使用备份来恢复。

scp moosefs-3.0.101-1.tar.gz 192.168.9.其他机器IP:/root

Metalogger server192.168.9.102

1.安装

同mfsmaster

yum -y install gcc zlib-devel

useradd -r -s /sbin/nologin mfs

tar -xf moosefs-3.0.101-1.tar.gz

cd moosefs-3.0.101

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

make

make install

2.配置

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

cd /usr/local/mfs/etc/mfs

cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg

vim mfsmetalogger.cfg

#取消注释并修改

META_DOWNLOAD_FREQ = 2

# 元数据备份文件下载请求频率,默认是24小时,修改后为每2小时从master server上下载一个metadata.mfs文件,当元数据服务器关闭或者故障的时候,metadata.mfs.back文件将消失,此时需要从元数据日志服务器中取得这个文件。注意,这个文件和日志文件共同使用才能恢复整个已损坏的分布式文件系统...只需要更改上面2行就行了,其他保持默认即可如果没有特殊要求。

MASTER_HOST = 192.168.9.101

# master server 的地址

3.管理

-启动命令

mfsmetalogger start

lsof -i :9419

# 确保端口在使用中

-查看工作目录下是否有元数据文件

#此时还没有Chunk server

cd /usr/local/mfs/var/mfs/

ls

Chunk server192.168.9.103&104

同步操作:工具—发送键输入到所有会话

1.安装

#这里./configure指定不安装mfsmaster,其他安装同mfsmaster

yum -y install gcc zlib-devel

useradd -r -s /sbin/nologin mfs

tar -xf moosefs-3.0.101-1.tar.gz

cd moosefs-3.0.101

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

make

make install

2.配置

ln -s /usr/local/mfs/bin/* /usr/local/bin/

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

cd /usr/local/mfs/etc/mfs

cp -a mfschunkserver.cfg.sample mfschunkserver.cfg

vim mfschunkserver.cfg

#只需修改MASTER_HOST(必须修改不能添加):

MASTER_HOST = 192.168.9.101    #指明master服务器地址,要修改

MASTER_PORT = 9420  #指明master server 端口(取消注释)

HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg

#这个指明哪个配置文件来配置共享磁盘(取消注释

cp -a mfshdd.cfg.sample mfshdd.cfg

vim mfshdd.cfg

#添加挂载点

/chunkdisk/sdb1

-关机添加硬盘,设置分区,格式化挂载

#添加一块磁盘并创建分区,然后挂载到指定的挂载点下(使用ext4文件系统格式化)

shutdown -h now

fdisk /dev/sdb

mkfs.ext4 /dev/sdb1

mkdir -p /chunkdisk/sdb1

echo '/dev/sdb1 /chunkdisk/sdb1 ext4 defaults 0 0' >>/etc/fstab

mount -a

chown -R mfs.mfs /chunkdisk/sdb1

df -h

3.管理

-启动

mfschunkserver start

ps -ef | grep mfs

Client server192.168.9.106

1.安装

yum -y install gcc zlib-devel fuse fuse-devel fuse-libs

useradd -r -s /sbin/nologin mfs

tar -xf moosefs-3.0.101-1.tar.gz

cd moosefs-3.0.101

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver

make

make install

2.测试

ln -s /usr/local/mfs/bin/* /usr/local/bin/

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

mkdir /mfsclient

mfsmount /mfsclient/ -H 192.168.9.101

# -H 指定 master server IP

df -h

二、MFS高级特性

MFS设置goal冗余(副本)

-客户端写入数据:

cd /mfsclient/

echo "hello" >a.txt

-两个Chunk server查看,两个server端都有数据

cd /chunkdisk/sdb1/00

cat chunk_0000000000000001_00000001.mfs

-通过mfsgetgoal 命令来查看文件保存数量

 mfsgetgoal a.txt

#可以看到默认为2份

-使用mfssetgoal目录修改指定文件的份数

mfssetgoal -r 1 a.txt

#-r 可以实现对目录树结构的递归  

#每个Chunk server轮询一份,超出重复轮询保存

#若-r后的份数少于之前保存的,则按保存顺序删除:先保存的先删除,这里先删除了Chunk server1的数据

MFS垃圾回收站

1.一个删除文件能够存放在一个“ 垃圾箱”的时间就是一个隔离时间

-这个时间可以用mfsgettrashtime 命令来验证

mfsgettrashtime /mfsclient/

-也可以用mfssettrashtime 命令来设置

#设置为一周:

mfssettrashtime 604800 /mfsclient/a.txt

mfsgettrashtime /mfsclient/a.txt

    • 时间的单位是秒(有用的值有:1 小时是3600 秒,24 - 86400 秒,1周 - 604800 秒)。就像文件被存储的份数一样, 为一个目录设定存放时间是要被新创建的文件和目录所继承的。数字0 意味着一个文件被删除后, 将立即被彻底删除,再想回收是不可能的。

2.安装MFSMETA文件系统查看删除的文件

    • 它包含目录/trash (包含可以被还原的被删除文件的信息)和/trash/undel (用于获取文件),只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)
    • 之前删除的文件在挂载MFSMETA系统后也能看到

-创建目录挂载MFSMETA文件系统

mkdir /mfsclient/mfsmeta

mfsmount -m /mfsclient/mfsmeta -H 192.168.23.100

df -h

3.被删文件的文件名在“垃圾箱”目录里

    • 文件名由一个八位十六进制的数i-node 和被删文件的文件名组成,在文件名和i-node 之间不是用“/”,而是用了“|”替代。
    • 如果一个文件名的长度超过操作系统的限制(通常是255 个字符),那么部分将被删除。通过从挂载点起全路径的文件名被删除的文件任然可以被读写。

-删除测试文件a.txt,查看

rm -rf a.txt

find ./ -name *a.txt

cat /mfsclient/mfsmeta/trash/002/00000002\|a.txt

4.恢复被删除的文件

-移动这个文件到trash/undel 子目录下,将会使原始的文件恢复到正确的MooseFS文件系统上路径下(如果路径没有改变)

注:如果在同一路径下有个新的同名文件,那么恢复不会成功

cd /mfsclient/mfsmeta/trash

mv 002/00000002\|a.txt ./undel

cd /mfsclient/;ls

cat a.txt

MFS启动和关闭

1.启动MFS集群

    • 最安全的启动MooseFS 集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤:
    • 启动mfsmaster 进程
    • 启动所有的mfschunkserver 进程
    • 启动mfsmetalogger 进程(如果配置了mfsmetalogger)
    • 当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)

2.停止MFS集群

    • 安全的停止MooseFS 集群:
    • 在所有的客户端卸载MooseFS 文件系统(用umount 命令或者是其它等效的命令)
    • 用mfschunkserver stop 命令停止chunkserver 进程
    • 用mfsmetalogger stop 命令停止metalogger 进程
    • 用mfsmaster stop 命令停止master 进程

MFS master故障修复

一旦mfsmaster 崩溃(例如因为主机或电源失败),需要最后一个元数据日志changelog 并入主要的metadata 中。这个操作时通过mfsmetarestore 工具做的,最简单的方法是:

[root@localhost ~]# /usr/local/mfs/bin/mfsmetarestore -a

[root@localhost ~]# mfsmaster -a        #此命令替代了mfsmetarestore -a

如果master 数据被存储在MooseFS 编译指定地点外的路径,则要利用-d 参数指定使用,如:

[root@localhost ~]# /usr/local/mfs/bin/mfsmetarestore -a -d /opt/mfsmaster

MFS master 启动监控服务

1.启动命令

/usr/local/mfs/sbin/mfscgiserv

2.使用浏览器访问master:9425,注意master主机名(localhost或主机ip

http://192.168.9.101:9425

-可以看到两个Chunk server

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值