> 文章列表 > MFS分布式存储-集群

MFS分布式存储-集群

MFS分布式存储-集群

MFS分布式存储-集群

3.1、了解MFS

什么是MFS

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

MFS有什么特性?

  • 高可靠性:每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上
  • 高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
  • 高可容错性:我们可以通过对 mfs 进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
  • 高数据一致性:即使文件被写入、访问时,依然可以轻松完成对文件的一致性快照

MFS有什么缺点?

  • master目前是单点,虽然会把数据信息同步到备份服务器,但是恢复需要时间
  • master 服务器对主机的内存要求略高
  • 默认 metalogg复制元数据时间较长(可调整)

MFS的内存使用问题

  • 对于 master 服务器来说,资源型要求就是内存大小
  • 为了整个系统访问更快,mfs 会把所以访问的元数据 metadada信息放在内存中提供用户访问
  • 当文件数量增加时,内存使用量就会增加

MFS的应用场景

  • 大规模高并发的线上数据存储及访问《小文件,大文件都适合)
  • 大规模的数据处理,如日志分析,小文件强调性能不用HDFS

3.2、MFS的组件说明

管理服务器:

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

元数据备份服务器

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

数据存储服务器组

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

客户机服务器组

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

3.3、MFS的增删改读遍历

数据操作组件之间的协同过程:

				Client
MFS-Master		MFS-chunkServer		MFS-chunkServe
msf-MetaData

MFS的读数据过程

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

MFS的写数据过程

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

MFS的删除数据过程

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

MFS修改文件内容的过程

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

MFS重命名文件的过程

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

MFS遍历文件的过程

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

3.4、MFS补充说明

  • Master 记录着管理信息,
    • 文件路小存的位置p|port|chunkd)份数|时间等,
    • 元数据信息存在于内存中,会定期写入 metadata.mts,back 文件中,定期同步到 etalogg,
    • 操作实时写入changelog,*mts,实时同步到 etaloggr 中。
    • master 启动将 metadatams 载入内存,重命名为metadata.mfsback 文件。
  • 文件以 chunk大小存储
    • 每 chumk 最大为 64M,
    • 小于64M的该chunk 的大小即为该文件大小(验证实际chunk 文件略大于实际文件),
    • 超过 64M 的文件将被切分,以每一份(chumk)的大小不超过64M为原则;块的生成遵循规则:
    • 目录循环写入(00-FF 256个目录循环,step 为 2)、
    • chunk 文件递增生成、大文件切分目录连续。
  • Chunksever上的剩余存储空间要大于 1GB
    • 新的数据才会被允许写入否则,你会看到 No spacelefton device 的提示,
    • 实际中,测试发现当磁盘使用率达到 95%左右的时候,就已经不行写入了,当时可用空间为 1.9GB。
  • 文件可以有多份 copy,
    • 当 goal为 1时,文件会被随机存到一台 hunkserrer 上,
    • 当 goal 的数大于1时,copy会由 master 调度保存到不同的chumkserver 上,
    • goal 的小不要超过 chunkserver 的数量,否则多出的 copy,不会有 chukserwer去存。

3.5、构建MFS集群

实验规划:

  • 总共用到5台服务器:
    • MFS-master:192.168.75.110
      • 源码部署moosefs-3.0
      • 添加一下用户mfs–>用于源码编译
      • mfsmastercgi–>可以调用页面:IP:9425端口访问
    • MFS-chunkserver:192.168.75.12/13
      • 多添加一块硬盘:把存储空间增大;
      • 创建用户–>并且挂载好sdb硬盘
      • 还是要源码编译moosefs
    • MFS-metadata:192.168.75.11
      • 源码部署moosefs-3.0
    • MFS-client:192.168.75.14

实验步骤如下:

MFS-Server服务器配置

  • 使用源码安装–>moosefs-3.0.84
    • 下载地址:https://sourceforge.net/projects/moosefs/files/
#准备好moosefs的软件包
[root@localhost ~]# ls moosefs-3.0.84-1.tar.gz 
moosefs-3.0.84-1.tar.gz#安装必要的软件包
[root@localhost moosefs-3.0.84]# yum -y install gcc gcc-c++ zlib zlib-devel#解压-->预编译、编译、安装
[root@localhost ~]# tar -xf moosefs-3.0.84-1.tar.gz #在安装前先创建一个用户-->用于mfs的运行#-s:指定一下shell,-M:不创建用户的家目录
[root@localhost ~]# useradd -s /sbin/nologin -M mfs#进入对应的目录-->进行预编译
[root@localhost ~]# cd moosefs-3.0.84
[root@localhost moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #编译安装
[root@localhost moosefs-3.0.84]# make && make install#把mfs的命令做个软链接-->让命令行可以快速调用命令
[root@localhost moosefs-3.0.84]# cd
[root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/sbin/#源码安装过后,配置文件打开一个就是一个功能-->全部都是以example后缀结尾
[root@localhost ~]# ls /usr/local/mfs/etc/mfs/
mfschunkserver.cfg.sample  mfsexports.cfg.sample  mfsmaster.cfg         mfsmetalogger.cfg.sample
mfsexports.cfg             mfshdd.cfg.sample      mfsmaster.cfg.sample  mfstopology.cfg.sample#准备好节点master的配置文件-->mfs配置文件都是以cig结尾的-->把模板文件去掉sample后缀
[root@localhost ~]# cd /usr/local/mfs/
[root@localhost mfs]# ls
bin  etc  sbin  share  var#注意:修改后我们都不需要做任何的修改
[root@localhost mfs]# cp -a etc/mfs/mfsmaster.cfg.sample  etc/mfs/mfsmaster.cfg#修改expor配置文件-->设置MFS的挂载权限#先打开一个export的配置文件
[root@localhost ~]# cp -a /usr/local/mfs/etc/mfs/mfsexports.cfg.sample /usr/local/mfs/etc/mfs/mfsexports.cfg
[root@localhost ~]# vim /usr/local/mfs/etc/mfs/mfsexports.cfg
...........#配置文件中有很多注释--暂时不关注#在文件的末行添加如下信息#rw:指定的是权限;#alldirs:允许所有的目录#允许的网段#. 代表的就是mfs的根目录
192.168.75.0/24 . rw,alldirs,maproot=0#准备持久化源数据信息-->metadata的初始数据#注意元数据存放的路径有不同的
[root@localhost ~]# cd /usr/local/mfs/var/mfs/#把这个文件的后缀去除-->拷贝了一个元数据的空模板
[root@localhost mfs]# cp metadata.mfs.empty metadata.mfs -a#最后直接启动服务
[root@localhost ~]# mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
meta option ignored: alldirs
meta option ignored: maproot=0
exports file has been loaded
mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly#当你启动了mfs之后-->会发现数据文件的目录是变多了文件#这个文件的主要作用就是用于备份
[root@localhost ~]# ls -l /usr/local/mfs/var/mfs/
total 12
-rw-r----- 1 mfs mfs 45 Feb 15 01:25 changelog.0.mfs
-rw-r--r-- 1 mfs mfs  8 Feb 15 01:22 metadata.mfs.back
-rw-r--r-- 1 mfs mfs  8 Feb 15 01:22 metadata.mfs.empty#mfs提供一个web页面-->直接使用命令启动
[root@localhost ~]# mfscgiserv 
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)#浏览器直接访问
http://192.168.75.110:9425/mfs.cgi#当第一个登陆可以输入本机IP就能得到那个页面

mfsmaster的配置文件说明

WORKING USER =mfs
WORKING GROUP = mts
SYSLOG IENT = mfsmaster #在syslog中的表示,说明这是 mfsmaster 产生的
LOCK MEMORY =0 		#是否执行 mlockal10以避免mfsmaster 内存溢出(默认为 0)
NICE LEVEL =-19 	#运行的优先级-->默认-19,注意,这进程必须是 root 启动 
DATA_PATH=/usrlocal/mfs/var/ms	#数据存放路径,该目录下有三类文件
changelog,sessions,stats
EXPORTS_FILENAME = /usrocal/mfs/etc/msmfserportscg #被挂载目录以及其权限控制文件存放的位置
BACK LOGS = 50 		#元数据的改变日志文件数量默认是50)
MATOML LISTEN HOST =*	#元数据日志服务器监听的IP地址(默认是*, 代表任何IP)
MATONL 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 	#在一个循环里复制到一个CHUNKServer的最大chunks数目
CHUNKS READ REP LIMIT = 10.5.2.5	
MATOCL LISTEN PORT = 9421

接着部署元数据服务器–>就是logger服务器

  • 还是源码部署moosefs服务
  • 安装和部署都是一样的
    • 如何区分mfs的角色分工?–>就是看开启的配置文件是谁就是什么角色的;
#准备好软件包
[root@node1 ~]# ls moosefs-3.0.84-1.tar.gz 
moosefs-3.0.84-1.tar.gz#安装必要的依赖
[root@node1 ~]# yum -y install gcc gcc-c++ zlib zlib-devel#创建mfs的用户
[root@node1 ~]# useradd -s /sbin/nologin -M mfs
[root@node1 ~]# #解压源码包
[root@node1 ~]# tar -xf moosefs-3.0.84-1.tar.gz #预编译、编译安装
[root@node1 ~]# cd moosefs-3.0.84
[root@node1 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install#做一下优化-->修改一下文件的所有者
[root@node1 ~]# chown -R mfs:mfs /usr/local/mfs/#赋予一下命令-->做好软链接
[root@node1 ~]# ln -s /usr/local/mfs/sbin/* /usr/sbin/
[root@node1 ~]# ln -s /usr/local/mfs/bin/* /usr/sbin/#拷贝mfs的元数据配置文件
[root@node1 moosefs-3.0.84]# cd
[root@node1 ~]# cp -a /usr/local/mfs/etc/mfs/mfsmetalogger.cfg.sample /usr/local/mfs/etc/mfs/mfsmetalogger.cfg#修改配置文件
[root@node1 ~]# vim /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
...............#指定一下完整的同步时间间隔为2个小时40  META_DOWNLOAD_FREQ = 2#指定一下服务器的Master的IP地址54  MASTER_HOST = 192.168.75.110#配置到这里这台元数据的服务器已经可以启动了
[root@node1 ~]# mfsmetalogger start
open files limit has been set to: 4096
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly#查看一下端口--->在监听了
[root@node1 ~]# lsof -i :9419
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mfsmetalo 7662  mfs    8u  IPv4  18727      0t0  TCP 192.168.75.11:59474->192.168.75.110:9419 (ESTABLISHED)#然后查看一下元数据的目录-->源数据信息都已经备份过来
[root@node1 ~]# ls -l /usr/local/mfs/var/mfs/
total 12
-rw-r----- 1 mfs mfs 45 Feb 15 01:49 changelog_ml_back.0.mfs
-rw-r----- 1 mfs mfs  0 Feb 15 01:49 changelog_ml_back.1.mfs
-rw-r--r-- 1 mfs mfs  8 Feb 15 01:39 metadata.mfs.empty
-rw-r----- 1 mfs mfs  8 Feb 15 01:49 metadata_ml.tmp

两台Chunk Server的配置:

  • 添加一块硬盘–>用于挂载共享的;
  • 源码还是安装moosefs
  • 一台先配置–>另外一台尝试在架构完成了之后形成水平加入;
#查看一下准备的硬盘
[root@node2 ~]# fdisk -l | grep sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes#创建一个挂载点
[root@node2 ~]# mkdir /sdb1#创建分区
[root@node2 ~]# fdisk  /dev/sdb
..............
Command (m for help): n			#创建分区
Command actione   extendedp   primary partition (1-4)
p								#选择主分区
Partition number (1-4): 1				#分区号
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Command (m for help): w			#保存退出
#格式化分区-->创建文件系统
[root@node2 ~]# mkfs.ext4 /dev/sdb1
#挂载使用
[root@node2 ~]# mount /dev/sdb1 /sdb1/#把权限都给到mfs用户
[root@node2 ~]# chown -R mfs.mfs /sdb1/#准备好软件包
root@node2 ~]# ls moosefs-3.0.84-1.tar.gz 
moosefs-3.0.84-1.tar.gz#添加一下用户-->前期操作基本一直
[root@node2 ~]# useradd -s /sbin/nologin -M mfs#安装必要的依赖
[root@node2 ~]# yum -y install gcc gcc-c++ zlib zlib-devel#解压源码包
[root@node2 ~]# tar -xf moosefs-3.0.84-1.tar.gz 
[root@node2 ~]# cd moosefs-3.0.84#预编译、编译、安装
[root@node2 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install#做一下优化-->修改一下文件的所有者
[root@node2 ~]# chown -R mfs:mfs /usr/local/mfs/#赋予一下命令-->做好软链接
[root@node2 ~]# ln -s /usr/local/mfs/sbin/* /usr/sbin/
[root@node2 ~]# ln -s /usr/local/mfs/bin/* /usr/sbin/#拷贝Chunserver的配置文件
[root@node2 ~]# cp -a /usr/local/mfs/etc/mfs/mfschunkserver.cfg.sample /usr/local/mfs/etc/mfs/mfschunkserver.cfg#修改配置文件
[root@node2 ~]# vim /usr/local/mfs/etc/mfs/mfschunkserver.cfg
............#指定一下提供存储的配置文件位置33  HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg#指定mfsmaster服务器的地址71  MASTER_HOST = 192.168.75.110#指定一下默认的端口74  MASTER_PORT = 9420#修改存储的配置文件-->修改前要拷贝
[root@node2 ~]# cp -a  /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg#修改文件位置也是很简单-->直接在配置文件的末尾添加一个共享的路径
[root@node2 ~]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg
.............
/sdb1#到这-->可以直接启动服务
[root@node2 ~]# mfschunkserver start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /sdb1/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@node2 ~]# #浏览器查看使用
http://192.168.75.110:9425/mfs.cgi?masterhost=192.168.75.110&sections=HD

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0IhxrORI-1678155943538)(C:\\Users\\Administrator\\AppData\\Roaming\\Typora\\typora-user-images\\1676370193104.png)]

Client客户端配置

  • 客户端安装另外的软件
    • fuse fuse-devel fuse-libs
  • 源码安装moosefs
    • 编译的时候要指定这台不是mfsmaster服务器
#安装fuse接口的依赖包
[root@node4 ~]# yum -y install fuse fuse-devel fuse-libs
#准备好软件包
root@node4 ~]# ls moosefs-3.0.84-1.tar.gz 
moosefs-3.0.84-1.tar.gz#添加一下用户-->前期操作基本一直
[root@node4 ~]# useradd -s /sbin/nologin -M mfs#安装必要的依赖
[root@node4 ~]# yum -y install gcc gcc-c++ zlib zlib-devel#解压源码包
[root@node4 ~]# tar -xf moosefs-3.0.84-1.tar.gz 
[root@node4 ~]# cd moosefs-3.0.84#预编译、编译、安装
[root@node4 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver  && make && make install#做一下优化-->修改一下文件的所有者
[root@node4 ~]# chown -R mfs:mfs /usr/local/mfs/#赋予一下命令-->做好软链接
[root@node4 ~]# ln -s /usr/local/mfs/sbin/* /usr/sbin/
[root@node4 ~]# ln -s /usr/local/mfs/bin/* /usr/sbin/#创建一个目录用于挂载mfs的共享目录
[root@node4 moosefs-3.0.84]# cd
[root@node4 ~]# mkdir /client-mfs#使用命令挂载
[root@node4 ~]# mfsmount /client-mfs -H 192.168.75.110
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root#然后赋予一下所有者-->创建一些文件
[root@node4 ~]# chown -R mfs.mfs /client-mfs/
[root@node4 ~]# cd /client-mfs/
[root@node4 client-mfs]# echo "sdkfjslk" > liangjiawei.txt
[root@node4 client-mfs]# df -h
...........
192.168.75.110:9421    19G  429M   19G   3% /client-mfs#查看一下文件的存储位置
[root@node4 client-mfs]# mfsfileinfo liangjiawei.txt 
liangjiawei.txt:chunk 0: 0000000000000001_00000001 / (id:1 ver:1)copy 1: 192.168.75.12:9422 (status:VALID)#到这里为止-->可以说是实验成功

另外一台chunkserver水平添加进来

  • 上述实验还在–>然后在动态添加第二台chunkserver
#查看一下准备的硬盘
[root@node3 ~]# fdisk -l | grep sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes#创建一个挂载点
[root@node3 ~]# mkdir /sdb1#创建分区
[root@node3 ~]# fdisk  /dev/sdb
..............
Command (m for help): n			#创建分区
Command actione   extendedp   primary partition (1-4)
p								#选择主分区
Partition number (1-4): 1				#分区号
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Command (m for help): w			#保存退出
#格式化分区-->创建文件系统
[root@node3 ~]# mkfs.ext4 /dev/sdb1
#挂载使用
[root@node3 ~]# mount /dev/sdb1 /sdb1/#把权限都给到mfs用户
[root@node3 ~]# chown -R mfs.mfs /sdb1/#准备好软件包
root@node3 ~]# ls moosefs-3.0.84-1.tar.gz 
moosefs-3.0.84-1.tar.gz#添加一下用户-->前期操作基本一直
[root@node3 ~]# useradd -s /sbin/nologin -M mfs#安装必要的依赖
[root@node3 ~]# yum -y install gcc gcc-c++ zlib zlib-devel#解压源码包
[root@node3 ~]# tar -xf moosefs-3.0.84-1.tar.gz 
[root@node3 ~]# cd moosefs-3.0.84#预编译、编译、安装
[root@node3 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install#做一下优化-->修改一下文件的所有者
[root@node3 ~]# chown -R mfs:mfs /usr/local/mfs/#赋予一下命令-->做好软链接
[root@node2 ~]# ln -s /usr/local/mfs/sbin/* /usr/sbin/
[root@node2 ~]# ln -s /usr/local/mfs/bin/* /usr/sbin/#拷贝Chunserver的配置文件
[root@node3 ~]# cp -a /usr/local/mfs/etc/mfs/mfschunkserver.cfg.sample /usr/local/mfs/etc/mfs/mfschunkserver.cfg#修改配置文件
[root@node3 ~]# vim /usr/local/mfs/etc/mfs/mfschunkserver.cfg
............#指定一下提供存储的配置文件位置33  HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg#指定mfsmaster服务器的地址71  MASTER_HOST = 192.168.75.110#指定一下默认的端口74  MASTER_PORT = 9420#修改存储的配置文件-->修改前要拷贝
[root@node3 ~]# cp -a  /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg#修改文件位置也是很简单-->直接在配置文件的末尾添加一个共享的路径
[root@node2 ~]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg
.............
/sdb1#到这-->可以直接启动服务
[root@node3 ~]# mfschunkserver start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /sdb1/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@node2 ~]# #浏览器查看使用
http://192.168.75.110:9425/mfs.cgi?masterhost=192.168.75.110&sections=HD#到这里为止,水平扩容成功

回到客户端–>

  • 再次创建一些数据查看一下
[root@node4 client-mfs]# touch aa.txt
[root@node4 client-mfs]# mfsfileinfo aa.txt 
aa.txt:no chunks - empty file
[root@node4 client-mfs]# echo sldjfslkdfj > aa.txt 
[root@node4 client-mfs]# mfsfileinfo aa.txt 
aa.txt:chunk 0: 0000000000000002_00000001 / (id:2 ver:1)copy 1: 192.168.75.12:9422 (status:VALID)copy 2: 192.168.75.13:9422 (status:VALID)

3.6、MFS维护操作-实验部分

基于上述mfs集群的搭建;继续以下几个实验;

误删除处理;垃圾回收站机制

  • 回到客户端处理
    • 删除一些文件
#模拟删除一些文件的操作#注意-->这里我已经是挂载到master服务上面的了
[root@node4 client-mfs]# ls
aa.txt  liangjiawei.txt
[root@node4 client-mfs]# rm -rf liangjiawei.txt 
[root@node4 client-mfs]# ls
aa.txt#进行恢复操作#首先创建一个恢复的目录
[root@node4 client-mfs]# cd 
[root@node4 ~]# mkdir /client-mfsbak/#然后在把/mfs-back目录挂载到了mfs的主服务器#注意一定要带上-m参数
[root@node4 ~]# mfsmount  -m /client-mfsbak/  -H 192.168.75.110#进入目录可以发现已经有文件了#trash目录就是一个记录的目录
[root@node4 client-mfsbak]# ls
sustained  trash#进入trash目录-->安装一个tree命令
[root@node4 client-mfsbak]# cd trash/#tree命令只是方便我们去查找子目录的内容
[root@node4 trash]# yum -y install tree#tree命令-->把信息重定向到一个文件-->从文件查找恢复的内容#注意我的位置,.是代表当前位置-->注意细节
[root@node4 trash]# tree . >> /root/bak.txt#查找一下内容-->我们删除了的是liangjiawei.txt#记住它前面的编号
[root@node4 trash]# cat /root/bak.txt | grep liangjiawei.txt
│   ├── 00000002|liangjiawei.txt#这里我们还需要注意下上级的目录
[root@node4 trash]# vim /root/bak.txt 
...............
├── 002
│   ├── 00000002|liangjiawei.txt
│   └── undel#然后现在进行恢复操作#进入到我们的002目录
[root@node4 trash]# cd /client-mfsbak/trash/002/#然后直接把文件移到trant/undel目录
[root@node4 002]# mv 00000002\\|liangjiawei.txt  /client-mfsbak/trash/undel/#最后就是回到挂载的客户端目录查看数据
[root@node4 002]# cd /client-mfs
[root@node4 client-mfs]# ls
aa.txt  liangjiawei.txt#数据恢复了#注意一下一个点:
-->并不是所有的误操作都是可以恢复的
-->它是受一个mfs的保存时间限制的
#查看一下误删除保存时间
[root@node4 client-mfs]# mfsgettrashtime liangjiawei.txt 
liangjiawei.txt: 86400#我们也可以通过命令修改-->但是系统默认为正数
[root@node4 client-mfs]# mfssettrashtime 8888888 liangjiawei.txt 
liangjiawei.txt: 8888888
[root@node4 client-mfs]# mfsgettrashtime liangjiawei.txt 
liangjiawei.txt: 8892000

快照功能试验

  • 理解为软链接
  • 它不占用两份空间
#创建一个目录ss
[root@node4 client-mfs]# mkdir ss#赋予一下权限
[root@node4 client-mfs]# chown mfs.mfs ss#把liangjiawei.txt快照到/ss目录
[root@node4 client-mfs]# mfsmakesnapshot liangjiawei.txt  ss/
[root@node4 client-mfs]# #进去查看是可以看到的
[root@node4 client-mfs]# cat ss/liangjiawei.txt 
sdflksdjfl

冗余goal设置

  • 我们集群上面是有两个chunkserver的;
  • 那么默认我们创建的文件会有两个来存储
#创建一个文件
[root@node4 client-mfs]# echo 111111 > lele.txt#默认它会存到两个chunkserver上面
[root@node4 client-mfs]# mfsfileinfo lele.txt 
lele.txt:chunk 0: 0000000000000003_00000001 / (id:3 ver:1)copy 1: 192.168.75.12:9422 (status:VALID)copy 2: 192.168.75.13:9422 (status:VALID)
#如果改变一下存储的数量
[root@node4 client-mfs]# mfssetgoal 1 lele.txt 
lele.txt: goal: 1
[root@node4 client-mfs]# mfsfileinfo lele.txt 
lele.txt:chunk 0: 0000000000000003_00000001 / (id:3 ver:1)copy 1: 192.168.75.13:9422 (status:VALID)
[root@node4 client-mfs]# mfssetgoal 2 lele.txt #如果其中一台chunkserver挂机了-->并不会影响数据的访问#直接把其中一台停止-->
[root@node2 ~]# mfschunkserver  stop
sending SIGTERM to lock owner (pid:1637)
waiting for termination terminated#再来查看文件-->并没有任何的影响
[root@node4 client-mfs]# cat lele.txt 
111111

master节点直接down机实验

  • 如果主节点挂机;应该怎么说?
#主节点的模拟-->直接停掉服务
[root@localhost ~]# mfsmaster stop
sending SIGTERM to lock owner (pid:11907)
waiting for termination terminated#然后直接删除元数据-->相当于主master直接down了
[root@localhost ~]# rm -rf /usr/local/mfs/var/mfs/*
[root@localhost ~]# ls /usr/local/mfs/var/mfs/#尝试恢复-->去到元数据的服务器给到数据给master#去到元服务器那段操作-->这堆文件就是要给到主节点的
[root@node1 ~]# ls -l /usr/local/mfs/var/mfs/
total 20
-rw-r----- 1 mfs mfs 2079 Feb 15 19:45 changelog_ml.0.mfs
-rw-r----- 1 mfs mfs  855 Feb 15 18:58 changelog_ml.1.mfs
-rw-r----- 1 mfs mfs   45 Feb 15 18:39 changelog_ml_back.0.mfs
-rw-r----- 1 mfs mfs    0 Feb 15 18:39 changelog_ml_back.1.mfs
-rw-r--r-- 1 mfs mfs    8 Feb 15 17:54 metadata.mfs.empty
-rw-r----- 1 mfs mfs    8 Feb 15 18:39 metadata_ml.tmp
#给文件主节点
[root@node1 ~]# scp /usr/local/mfs/var/mfs/* root@192.168.75.110:/usr/local/mfs/var/mfs/#在主节点-->直接配置命令
[root@localhost ~]# mfsmaster -a#稍等片刻-->直接到客户端查看数据-->数据依然存在
[root@node4 client-mfs]# ls
aa.txt  lala.txt  lele.txt  liangjiawei.txt  ss