rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

时间:2024-03-26 20:24:18

一.MFS分布式文件系统

        MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。通用文件系统,不需要修改上层应用就可以使用,通过附加新的计算机或者硬盘可以实现容量的动态扩展,体系架构可伸缩性极强,删除的文件可以根据配置的时间周期进行保留(一个文件系统级别的回收站),高可靠(数据的多个拷贝被存储在不同的计算机上),提供 web 监控接口,提高随机读或写的效率,提高海量小文件的读写效率。但是mfs 把文件系统的结构缓存到 master 的内存中,文件越多,master 的内存消耗越大,8g 对应 2500w 的文件数,2 亿文件就得 64GB 内存。支持特殊文件(块和字符设备、管道以及套接字),符号连接和硬连接

二.MFS文件系统的部署(rhel6.5)

MFS 文件系统结构包含 4 种角色:

管理服务器 managing server (master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。

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

数据存储服务器 data servers (chunkservers):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输以及存储。

客户机挂载使用 client :通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文

件系统和本地 unix 文件系统使用一样的效果。

实验环境:

172.25.78.12、172.25.78.13
chunkserver
172.25.78.11
master
172.25.78.250
client

三.MFS的构建

1.源码包的编译安装(moosefs-3.0.80-1.tar.gz)

(1)使用rpm-build软件生成mfs的安装包

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)rpmbuild -tb moosefs-3.0.80-1.tar.gz

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

2.master安装:

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

moosefs-cgiserv      ##mfs的web监控页面

3.chunkserver安装(数据的存储):

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

4.client安装(客户端):

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

5.在每台节点上做本地解析

172.25.78.11   mfsmaster          ##指定mfsmaster的位置

vim /etc/mfs/mfsmaster.cfg         ##mfsmaster配置文件(用#注释掉的变量均使用其默认值)

WORKING_USER 和 WORKING_GROUP:是运行 master server 的用户和组;
SYSLOG_IDENT:是 master server 在 syslog 中的标识;

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

6.在master启动mfsmaster以及mfs

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

7.测试

可以添加想看到的信息,chunkserver、内存的使用、磁盘的使用、节点的状态等

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

8.端口信息

9422:chunkserver连接client
9421:master连接client
9420:master连接chunkserver

9425:mfs的web页面访问接口

四.MFS的基本配置

1.chunkserver(每个数据存储服务器是同样的操作,都要设置共享点):

vim /etc/mfs/mfshdd.cfg     ##定义mfs共享点

:/mnt/chunk1

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

mkdir /mnt/chunk1

chown mfs.mfs /mnt/chunk1/    ##更改用户以及用户组,mfs是以mfs用户身份进行数据的读写操作,为了系统安全,mfs用户没有登陆系统的权限,mfs的服务的数据目录是/var/lib/mfs(启动所需的文件)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

mfschunkserver      ##开启chunkserver

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

2.client:

vim /etc/mfs/mfsmount.cfg

:/mnt/mfs           ##定义客户端默认挂载

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

mfsmount              ##挂载

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

3.mfs测试

(1)在 MFS 挂载点下创建两个目录,并设置其文件存储份数:

mfssetgoal -r 1 dir1/          ##设置在 dir1 中文件存储份数为1个,默认是存储两份

mfsgetgoal    ##查看目录下文件的存储个数

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)拷贝文件分别到两个目录下,查看文件信息,可见文件存储所在的数据存储服务器(dir1目录下的文件存储一份,遵从上一步goal的设置)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(3)大文件分散存储

文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小,超过64M的文件将被切分存储到不同的数据存储节点。执行写数据时,是同时向每个数据存储节点去写入,这样加快了数据的写入速度;读取时,也从每个数据节点去读取。

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

4.恢复误删的文件

(1)mfsgettrashtime    ##查看文件在垃圾箱的存放时间,文件在删除后不会立即删除,有一个隔离时间(默认是86400s,也就是一天)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)删除文件,并挂载MFSmeta文件系统(包含目录trash和trash/undel(用于获取文件))

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(3)在trash目录下查找要恢复的文件(把删除的文件,移到/ trash/undel 下,就可以恢复此文件))

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

五.MFS文件系统的基本原理

1.读操作原理:客户端查询数据时,首先向master发起查询请求;管理服务器(master)检索自己的数据,获取到数据所在的数据服务器位置ip|port|chunkid;master将数据服务器的地址发送给客户端;客户端向具体的数据服务器发起数据获取请求;数据服务器将数据发送给客户端。

2.写操作原理:当客户端需要写入数据时,首先向master提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等);master根据写文件的元数据信息,到数据服务器创建新的数据块;master返回创建成功的消息;master将数据服务器的地址返回给客户端(chunkIP|port|chunkid);客户端向数据服务器写数据;数据服务器返回给客户端写成功的消息;客户端将此次写成功信号和信息发送到master更新文件信息。

MFS 读写原理:原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬

盘和网络的吞吐量越好,整个系统的性能也就会越好。

3.删除文件过程:客户端进行删除时,首先向Master发送删除信息;Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;响应客户端删除成功的信号。

4.修改文件内容的过程:客户端修改文件内容时,首先向Master发送操作信息;Master申请新的块给.swp文件,客户端关闭文件后,会向Master发送关闭信息;Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;若无,则直接删除.swp文件块。

5.遍历文件的过程:遍历文件不需要访问chunkserver,当有客户端遍历请求时,向Master发送操作信息;Master返回相应元数据信息;客户端接收到信息后显示。

6.Master记录着管理信息:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs.back文件中,操作实时写入changelog.*.mfs。master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件。Chunkserver上的剩余存储空间要大于1GB,新的数据才会被允许写入。changelog中记录了对文件的操作,metadata记录文件的大小和位置。因此metadata是比较重要的,在进行修复的过程中是采用metadata和最后一次的changelog进行修复的。

7.主要元数据文件metadata.mfs,当mfsmaster运行的时候会被命名为metadata.mfs.back元数据改变日志changelog.*.mfs,存储了过去的N小时的文件改变(N的数值是由BACK_LOGS参数设置的,参数的设置在vim /etc/mfs/mfsmaster.cfg配置文件中。

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

六.MFS高可用(MFS+pacemaker)(关于pacemaker的详细介绍在之前博客有)

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

贝,是MFS的关键点,显然有极大可能存在单点故障。虽然有Metalogger,但是不能实现故障实时切换,服务要停止之后在Metalogger恢复元数据以及changelog_ml.*.mfs(服务器的变化日志文件),再次重新指定新的mfsmaster节点。

        可以采用keepalived实现,但是要注意的是不仅仅是VIP的漂移,mfsmaster的工作目录都要进行漂移,这就涉及存储的共享,在这里采用pacemaker+corosync来实现故障切换

实验环境(rhel6.5):

172.25.78.14、172.25.78.11
mfsmaster+pacemaker、iscsi
172.25.78.100
VIP
/var/lib/mfs
mfsmaster的工作目录
172.25.78.12
scsi

1.配置存储共享

(1)因为目录也要漂移,172.25.78.12共享一块虚拟存储,共享给mfsmaster去挂载工作目录

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)分配虚拟磁盘

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(3)共享磁盘

vim /etc/tgt/targets.conf

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(4)查看共享信息

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

2.共享磁盘客户端登陆

(1)安装iscsi

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)登陆共享磁盘

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

3.通过fdisk -l 查看磁盘信息,共享成功,对磁盘进行分区格式化

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

4.部署pacemaker+corosync

crmsh  ##集群管理工具

(1)安装pacemaker

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)配置corosync(两台mfsmaster同样操作)

开启rpcbind以及corosync服务,以插件形式运行pacemaker,pacemaker随着corosync的开启而开启

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

5.使用crm添加资源到集群(在此之前把VIP添加到本地解析,每一个节点都做解析,mfsmaster改变了)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(1)检查配置是否正确

crm_verify  -LV

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)关闭stonith,因为还没有配置,每次配置都要提交

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(3)添加VIP资源

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(4)添加存储共享资源

mount  /dev/sda1   /mnt  ##把磁盘挂载到/mnt下,把 /var/lib/mfs目录的信息到复制过来,不然直接挂载的话, /var/lib/mfs目录是空的

cp -p /var/lib/mfs/*   /mnt  ##和权限一块复制

umount /dev/sda1 

把/var/lib/mfs的用户以及用户组都改为mfs,不然挂载之后,不能开启mfsmaster服务

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(5)添加mfsmaster脚本

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(6)把VIP、mfsdata、mfsd添加到一个组(这三个部分是统一漂移)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(7)忽略投票规则(不然一个节点down,整个服务宕机)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(8)添加fence_xvm(用软件实现,避免master突然crash,因为已经添加了fence设备,就开启stonith)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

6.fence设备的添加

(1)物理机开启fence_virt(控制fence的关键)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)创建fence**,把**发给mfsmaster

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(3)mfsmaster安装fence_virt

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(4)查看mfsmaster是否支持fence_xvm(fence的关键,物理机通过**给fence_xvm下发任务)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(5)查看fence_xvm的信息

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

7.crm_mon   ##监控pacemaker

(1)当下线server11后,server14接管服务

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)查看pacemaker的配置

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

fence在对立的那个master,不然主机crash,fence_virt服务也关闭,无法执行fence操作

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

七.测试

(1)查看mfs的web页面(http://172.25.78.100:9425)

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

(2)在客户端写数据时,把server14下线,用户写不进去数据,大概4秒多,数据写入成功,资源也成功切换

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

server14下线

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

资源也成功切换

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

vip漂移

rhel6.5-MFS(moosefs)分布式文件系统、MFS高可用

注意:

(1)如果客户端误杀 killall -9 mfsmount 进程,需要先 umount /mnt/mfs,然后再 mfsmount。否则会

提示:/mnt/mfs: Transport endpoint is not connected。文件设置存储两份,数据传输过程中,关掉 chunker1,等待数据传输完毕后,启动chunker1.chunker1 启动后,会自动从 chunker2 复制数据块。整个过程中文件访问不受影响。

(2)文件设置存储两份,数据传输过程中,关掉 chunker1,不等待数据传输完毕,开机启动chunker1.chunker1 启动后,client 端会向 chunker1 传输数据,同时 chunker1 也从 chunker2 复制缺失的块。只要不是两个 chunker 服务器同时挂掉的话,就不会影响文件的传输,也不会影响服务的使用。

(3)使用mfsmaster -a(略高的版本已经用mfsmaster -a代替mfsmetarestore -a)也无法修复也无法启动master服务,有个应急的办法是将 metadata.mfs.back 复制成metadata.mfs,然后再启动 master。这样将会丢失那些正在传输的数据。