MooseFS 是一个具备冗余 (良性冗余:非常重要的文件备份多个) 容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,然而对于访问 MFS 的客户端或者用户来说,整个 分布式网络文件系统集群看起来就像一个资源一样,从其对文件系统的情况看 MooseFS 就相当于 UNIX 的文件系统。
MooseFS 是一种分布式文件系统,基于Linux内核,提供整套分布式文件服务。单个文件就是MooseFS存储的最小单位,不会将文件进行劈开,或者是拆分成多份打散了分布在各个节点。
GitHub 项目地址:https://github.com/moosefs/moosefs
MFS已经是十分老的分布式存储网络文件系统,目前已经被新兴的 Ceph、GlusterFS、FastDFS所取代。
对比说明/文件系统 | TFS | FastDFS | MogileFS | MooseFS (MFS) | GlusterFS | Ceph |
---|---|---|---|---|---|---|
开发语言 | C++ | C | Perl | C | C | C++ |
开源协议 | GPL V2 | GPL V3 | GPL | GPL V3 | GPL V3 | LGPL |
数据存储方式 | 块 | 文件/Trunk | 文件 | 块 | 文件/块 | 对象/文件/块 |
集群节点通信协议 | 私有协议(TCP) | 私有协议(TCP) | HTTP | 私有协议(TCP) | 私有协议(TCP)/ RDAM(远程直接访问内存) | 私有协议(TCP) |
专用元数据存储点 | 占用NS | 无 | 占用DB | 占用MFS | 无 | 占用MDS |
在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
冗余备份 | 支持 | 支持 | - | 支持 | 支持 | 支持 |
单点故障 | 存在 | 不存在 | 存在 | 存在 | 不存在 | 存在 |
跨集群同步 | 支持 | 部分支持 | - | - | 支持 | 不适用 |
易用性 | 安装复杂,官方文档少 | 安装简单,社区相对活跃 | - | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 |
适用场景 | 跨集群的小文件 | 单集群的中小文件 | - | 单集群的大中文件 | 跨集群云存储 | 单集群的大中小文件 |
内存使用问题
对于 Master 服务器来说,资源型要求就是内存大小,为了整个系统访问更快,mfs 会把所以访问 的元数据 metadada 信息放在内存中提供用户访问,因此,当文件数量增加时,内存使用量就会增加, 根据官方说法,处理一百万个文件 chunkserver,大概需要 300M 的内存空间。据此,推算如果未来要 出来 1 个亿的文件 chunkserver,大概需要 30G 内存空间。
管理服务器 managing server 简称 master :这个组件的角色是管理整个 mfs 文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的 metadata 信息,metadate(元数据) 信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等
总结:MFS Master 主要是用来存储数据的 metadata 元数据信息。所有的用户请求必须要经过 MFS Master 节点才能去访问后端真正存放真实数据的chunk server。
元数据备份服务器 Metadata backup servers 简称 metalogger: 这个组件的作用是备份管理服务器 master 的变化的 metadata 信息日志文件,文件类型为 changelog_ml.*.mfs。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作
总结:MFS Metalogger 是用来实时跟 MFS Master 保持连接,来备份 Master 的元数据信息。
数据存储服务器组 data servers(chunk servers)简称 data:这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于 一份时,据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份
总结:chunk server 是用来真正存放真实数据的服务
客户机服务器组(client servers)简称 client:这个组件就是挂载并使用 mfs 文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的 metadata 信息,然后根据得到的 metadata 信息, 访问数据服务器读取或写入文件实体,mfs 客户端通过 fuse mechanism(用户空间文件系统,是由IBM 和 微软开发,可以在用户层构建文件系统,以及使用文件系统。原来的文件系统都是在内核态的,现在可以在用户空间里完成) 实现挂载 mfs 文件系统的,因 此,只有系统支持 fuse,就可以作为客户端访问 mfs 整个文件系统。
总结:客户端需要安装对应的文件系统的,底层使用的是 fuse mechanism 用户空间文件系统。
基础环境拓扑
Client 当需要一个数据时,首先向 Master server 发起查询请求;
管理服务器检索自己内存中的数据信息,获取到数据所在的可用数据服务器位置 chunkip | port | chunkid;
管理服务器将数据服务器的地址发送给客户端;
客户端向具体的数据服务器发起数据获取请求;
数据服务器将数据发送给客户端;
Master 记录着管理信息,比如:文件路径 | 大小 | 存储的位置(chunkip , 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-FF 256 个目录循环,step 为 2)、chunk 文件递增生成、大文件切分目录连续。
Chunkserver 上的剩余存储空间要大于 1GB(Reference Guide 有提到),新的数据才会被允许写入, 否则,你会看到 No space left on device 的提示,实际中,测试发现当磁盘使用率达到 95%左右的时候, 就已经不行写入了,当时可用空间为 1.9GB 。
文件可以有多份 copy,当 Goal 为 1 时,文件会被随机存到一台 chunkserver 上,当 Goal 的数大于 1 时,copy 会由 master 调度保存到不同的 chunkserver 上,Goal 的大小不要超过 chunkserver 的数量,否 则多出的 copy,不会有 chunkserver 去存。
实验集群拓扑
五台服务器
CentOS 6 操作系统软件包
所需软件百度网盘
链接:https://pan.baidu.com/s/1wfgE3ISFsBddoO2JuMdRiA
提取码:ton9
或者直接使用 SourceForge 网站下载:
CentOS 7 操作系统软件包
https://sourceforge.net/projects/moosefs/files/latest/download
以下操作会使用两种部署方式。CentOS 6是源码包进行部署,CentOS 7则是使用RPM包部署。
$ hostnamectl set-hostname master
###CentOS 6安装
yum -y install lrzsz zlib zlib-devel
#方便把软件直接拖到xshell里面
#上传moosefs-3.0.84-1.tar.gz 镜像文件到家目录
$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84
$ useradd -s /sbin/nologin -M mfs
#创建 MFS 用户,用于 MFS 运行身份
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
#编译安装 MFS 软件
$ make && make install && echo $?
$ chown -R mfs.mfs /usr/local/mfs/
$ chmod a+x /usr/local/mfs/sbin/*
#优化配置,使 MFS 命令便于调用
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ ; ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ cd /usr/local/mfs/etc/mfs
#启用 MFS-Master 节点配置文件
$ cp -a mfsmaster.cfg.sample mfsmaster.cfg ; cp mfsexports.cfg.sample mfsexports.cfg
#设置 MFS 挂载权限
$ vim mfsexports.cfg
#最后一行添加
10.10.10.0/24 . rw,alldirs,maproot=0
#rw,读写权限
#.,表达MFS根文件系统
#alldirs,任何目录都允许挂载
#maproot=0,登陆就是root用户
$ cp -a /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
#拷贝 MFS 元数 据信息文件(初始)
$ mfsmaster start
#启动 MFS-Master 服务
$ mfscgiserv
#开启web页面
##################################################################################################
###CentOS 7安装(需要联网)
wget --no-check-certificate \
https://master.dl.sourceforge.net/project/moosefs/3.0.103/moosefs-packages-all-3.0.103.tar.gz
tar -zxvf moosefs-packages-all-3.0.103.tar.gz -C /opt/
cd /opt/moosefs-packages-all-3.0.103/linux/centos/7/
#删除Pro版本(企业版的RPM包)
sudo rm -rf moosefs-pro-*
sudo yum install -y gcc gcc-c++ make libpcap-devel zlib-devel fuse-devel pkgconfig fuse
sudo yum install -y *
#查看是否创建用户
getent passwd mfs
#启用 MFS-Master 节点配置文件
$ cd /etc/mfs/
$ cat >> /etc/mfs/mfsexports.cfg <<EOF
# ADD MFS Cluster BEGIN
10.10.10.0/24 . rw,alldirs,maproot=0
# ADD MFS Cluster END
EOF
#rw,读写权限
#alldirs,任何目录都允许挂载
#maproot=0,登陆就是root用户
#$ mkdir -pv /mfsdata && chown mfs:mfs /mfsdata && ls -ld /mfsdata
#查看存放持久化元数据信息
$ cd /var/lib/mfs ; cp metadata.mfs.empty metadata.mfs
#启动 MFS-Master 服务
$ mfsmaster start
#开启 Web 监控页面
$ mfscgiserv
#查看端口
$ netstat -auntlp | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 10735/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 10735/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 10735/mfsmaster
#再次查看MFS元数据目录下的内容
$ ls
changelog.0.mfs metadata.mfs.back metadata.mfs.empty metadata.mfs
#metadata.mfs 是未启动的名称
#metadata.mfs.back 启动服务以后,就将metadata.mfs信息加载到内存中,并且将metadata.mfs改名为metadata.mfs.back
# metadata.mfs.back相当于是完全备份文件,即内存和该文件是一个完整的备份
#changelog.0.mfs 是差异备份文件,比如说是2小时备份一次,那么中间改变的内容,则存放在changelog.0.mfs文件中,
# 并且changelog.0.mfs是一个自动轮询的文件,即文件名是changelog.0.mfs,changelog.1.mfs以此类推,
#即metadata.mfs.back和changelog.0.mfs加在一起就是一次完整的备份
#即保证了效率,也保证了其一致性
浏览器输入 10.10.10.11:9425 就能访问,DNS地址输入IP即可。
$ curl -v 10.10.10.11:9425
* About to connect() to 10.10.10.11 port 9425 (#0)
* Trying 10.10.10.11...
* Connected to 10.10.10.11 (10.10.10.11) port 9425 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.10.10.11:9425
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: index.html
* Connection #0 to host 10.10.10.11 left intact
#浏览器打开
可以查看MFS的监控页面
## /etc/mfs/mfsmaster.cfg
WORKING_USER = mfs
#所使用的 mfs 用户
WORKING_GROUP = mfs
#所使用的 mfs 用户组
SYSLOG_IDENT = mfsmaster
#在 syslog 中的表示, 说明这是 mfsmaster 产生的
LOCK_MEMORY = 0
#是否执行 mlockall()以避免 mfsmaster 内存溢出(默认为 0)
NICE_LEVEL = -19
#运行的优先级(默认-19, 注意, 这进程必须是 root 启动 )
DATA_PATH = /usr/local/mfs/var/mfs
#DATA_PATH = /var/lib/mfs
#数据存放路径,该目录下有三大类文件,changelog,sessions,stats
EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
#EXPORTS_FILENAME = /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
#一个chunkserver中soft最大的可删除数量为10个
CHUNKS_WRITE_REP_LIMIT = 2,1,1,4
#在一个循环里复制到一个 CHUNK Server 的最大 chunks 数目
CHUNKS_READ_REP_LIMIT = 10,5,2,5
#Client 的连接地址和端口
MATOCL_LISTEN_HOST = *
MATOCL_LISTEN_PORT = 9421
$ hostnamectl set-hostname metadata
###CentOS 6安装
#从远程服务器下载到本地
$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84
$ useradd -s /sbin/nologin -M mfs
#创建 MFS 用户,并编译安装 MFS 软件
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
#编译安装 MFS 软件
$ make && make install && echo $?
$ chown -R mfs.mfs /usr/local/mfs/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ ; ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ cd /usr/local/mfs/etc/mfs ; cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg
#拷贝 MFS 元数据服务配置文件
#修改配置文件
$ vim mfsmetalogger.cfg
#取消下面两行注释
META_DOWNLOAD_FREQ = 2
#设置完整同步间隔为 2 小时
MASTER_HOST = 10.10.10.11
#设置 MFS-Master 服务器 IP 地址
$ chmod a+x /usr/local/mfs/sbin/*
#优化 MFS 服务配置,便于命令调用
$ mfsmetalogger start
#启动 MFS-Logger 服务
$ lsof -i :9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmetalo 8111 mfs 8u IPv4 32184 0t0 TCP 10.10.10.12:35921->10.10.10.11:9419 (ESTABLISHED)
$ cd /usr/local/mfs/var/mfs/ ; ls /usr/local/mfs/var/mfs/
##################################################################################################
###CentOS 7安装(需要联网)
wget --no-check-certificate \
https://master.dl.sourceforge.net/project/moosefs/3.0.103/moosefs-packages-all-3.0.103.tar.gz
tar -zxvf moosefs-packages-all-3.0.103.tar.gz -C /opt/
cd /opt/moosefs-packages-all-3.0.103/linux/centos/7/
#删除Pro版本(企业版的RPM包)
sudo rm -rf moosefs-pro-*
sudo yum install -y gcc gcc-c++ make libpcap-devel zlib-devel fuse-devel pkgconfig fuse
sudo yum install -y *
#查看是否创建用户
$ getent passwd mfs
mfs:x:998:996:MooseFS:/var/lib/mfs:/sbin/nologin
#修改配置文件
$ cd /etc/mfs
$ vim mfsmetalogger.cfg
#取消下面两行注释
META_DOWNLOAD_FREQ = 2
#设置完整同步间隔为 2 小时
MASTER_HOST = 10.10.10.11
#设置 MFS-Master 服务器 IP 地址
$ mfsmetalogger start
#启动 MFS-Logger 服务
#测试
$ lsof -i :9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmetalo 1704 mfs 8u IPv4 32184 0t0 TCP metadata:35866->10.10.10.11:9419 (ESTABLISHED)
#查看数据存放路径
$ ls /var/lib/mfs/
changelog_ml_back.0.mfs metadata.mfs metadata_ml.tmp
changelog_ml_back.1.mfs metadata.mfs.empty
$ hostnamectl set-hostname chunkserver1
###CentOS 6安装
#把新添加的硬盘分区
$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n #输入n,新建分区
Command action
e extended
p primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1 #输入1,1号分区
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w #输入w保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
$ mkfs.ext4 /dev/sdb1
#格式化
$ mkdir /mnt/mfs
#创建挂载点目录
$ useradd -s /sbin/nologin -M mfs
#创建 MFS 用户
$ mount -t ext4 /dev/sdb1 /mnt/mfs/
#挂载
$ chown -R mfs.mfs /mnt/mfs/
#从远程服务器下载到本地
$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
#编译安装 MFS 软件
$ make && make install && echo $?
$ chown -R mfs.mfs /usr/local/mfs/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ ; ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ chmod a+x /usr/local/mfs/sbin/*
# 优化 MFS 服务配置,便于命令调用
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg ; cp -a mfshdd.cfg.sample mfshdd.cfg
# 拷贝 Chunkserver 配置文件
#提供存储的配置文件
$ vim mfschunkserver.cfg
#修改如下配置
MASTER_HOST = 10.10.10.11
#指定 MFS-Master 服务器地址
MASTER_PORT = 9420
#指定 MFS-Master 服务器端口
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
#指定提供存储的配置文件位置,这一行直接取消注释即可,不用修改
#修改 MFS 服务 HDD 路径
$ vim /usr/local/mfs/etc/mfs/mfshdd.cfg
#最后一行添加
/mnt/mfs
#挂载点目录
$ mfschunkserver start
# 启动 MFSChunkserver
##################################################################################################
###CentOS 7安装(需要联网)
wget --no-check-certificate \
https://master.dl.sourceforge.net/project/moosefs/3.0.103/moosefs-packages-all-3.0.103.tar.gz
tar -zxvf moosefs-packages-all-3.0.103.tar.gz -C /opt/
cd /opt/moosefs-packages-all-3.0.103/linux/centos/7/
#删除Pro版本(企业版的RPM包)
sudo rm -rf moosefs-pro-*
sudo yum install -y gcc gcc-c++ make libpcap-devel zlib zlib-devel fuse-devel pkgconfig fuse
sudo yum install -y *
#查看是否创建用户
$ getent passwd mfs
mfs:x:998:996:MooseFS:/var/lib/mfs:/sbin/nologin
#把新添加的硬盘分区,格式化文件系统,并挂载
echo -e "n\np\n\n\n\nw\n" | fdisk /dev/sdb
mkfs -t ext4 /dev/sdb1
mkdir /mnt/mfs && mount -t ext4 /dev/sdb1 /mnt/mfs/ && chown -R mfs.mfs /mnt/mfs/
#永久挂载
cat >> /etc/fstab <<EOF
/dev/sdb1 /mnt/mfs ext4 defaults 0 0
EOF
#修改存储的配置文件
$ vim /etc/mfs/mfschunkserver.cfg
#修改如下配置
MASTER_HOST = 10.10.10.11
#指定 MFS-Master 服务器地址
MASTER_PORT = 9420
#指定 MFS-Master 服务器端口
HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg
#指定提供存储的配置文件位置,这一行直接取消注释即可,不用修改
#修改 MFS 服务 HDD 路径(追加即可)
$ echo "/mnt/mfs" >> /etc/mfs/mfshdd.cfg
#启动 MFSChunkserver
$ mfschunkserver start
#查看MFS端口
$ netstat -auntlp | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 8516/mfschunkserver
tcp 0 0 10.10.10.13:42662 10.10.10.11:9420 ESTABLISHED 8516/mfschunkserver
另一台ChunkServer服务器动态进行添加
$ hostnamectl set-hostname chunkserver2
###CentOS 6安装
#把新添加的硬盘分区
$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n #输入n,新建分区
Command action
e extended
p primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1 #输入1,1号分区
First cylinder (1-2610, default 1): #直接回车
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w #输入w保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
$ mkfs.ext4 /dev/sdb1
#格式化
$ mkdir /mnt/mfs
#创建挂载点目录
$ useradd -s /sbin/nologin -M mfs
#创建 MFS 用户
$ mount -t ext4 /dev/sdb1 /mnt/mfs/
#挂载
$ chown -R mfs.mfs /mnt/mfs/
#从远程服务器把moosefs下载到本地
$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
#编译安装 MFS 软件
$ make && make install && echo $?
$ chown -R mfs.mfs /usr/local/mfs/
$ chmod a+x /usr/local/mfs/sbin/*
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ ; ln -s /usr/local/mfs/bin/* /usr/local/bin/
#优化 MFS 服务配置,便于命令调用
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
#拷贝 Chunkserver 配置文件
$ cp -a mfshdd.cfg.sample mfshdd.cfg
#提供存储的配置文件
$ vim mfschunkserver.cfg
#修改如下配置
MASTER_HOST = 10.10.10.11
#指定 MFS-Master 服务器地址
MASTER_PORT = 9420
#指定 MFS-Master 服务器端口
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
#指定提供存储的配置文 件位置
#这一行直接取消注释即可,不用修改
$ vim /usr/local/mfs/etc/mfs/mfshdd.cfg
#修改 MFS 服务 HDD 路径
#最后一行添加
/mnt/mfs
#挂载点目录
$ mfschunkserver start
#启动 MFSChunkserver
##################################################################################################
###CentOS 7安装(需要联网)
wget --no-check-certificate \
https://master.dl.sourceforge.net/project/moosefs/3.0.103/moosefs-packages-all-3.0.103.tar.gz
tar -zxvf moosefs-packages-all-3.0.103.tar.gz -C /opt/
cd /opt/moosefs-packages-all-3.0.103/linux/centos/7/
#删除Pro版本(企业版的RPM包)
sudo rm -rf moosefs-pro-*
sudo yum install -y gcc gcc-c++ make libpcap-devel zlib-devel fuse-devel pkgconfig fuse
sudo yum install -y *
#查看是否创建用户
$ getent passwd mfs
mfs:x:998:996:MooseFS:/var/lib/mfs:/sbin/nologin
#把新添加的硬盘分区
echo -e "n\np\n\n\n\nw\n" | fdisk /dev/sdb
mkfs -t ext4 /dev/sdb1
mkdir /mnt/mfs && mount -t ext4 /dev/sdb1 /mnt/mfs/ && chown -R mfs.mfs /mnt/mfs/
#永久挂载
cat >> /etc/fstab <<EOF
/dev/sdb1 /mnt/mfs ext4 defaults 0 0
EOF
#修改存储的配置文件
$ vim /etc/mfs/mfschunkserver.cfg
#修改如下配置
MASTER_HOST = 10.10.10.11
#指定 MFS-Master 服务器地址
MASTER_PORT = 9420
#指定 MFS-Master 服务器端口
HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg
#指定提供存储的配置文件位置,这一行直接取消注释即可,不用修改
#修改 MFS 服务 HDD 路径(追加即可)
$ echo "/mnt/mfs" >> /etc/mfs/mfshdd.cfg
#启动 MFSChunkserver
$ mfschunkserver start
#查看MFS端口
$ netstat -auntlp | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 8422/mfschunkserver
tcp 0 0 10.10.10.14:37418 10.10.10.11:9420 ESTABLISHED 8422/mfschunkserver
$ hostnamectl set-hostname client
###CentOS 6安装
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
#挂载本地yum光盘
$ yum -y install fuse fuse-devel fuse-libs
#安装 Fuse
#从远程服务器把moosefs下载到本地
$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84
$ useradd -s /sbin/nologin -M mfs
#创建 MFS 用户
#编译安装 MFS Client 工具
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver \
&& make \
&& make install \
&& echo $?
$ chown -R mfs.mfs /usr/local/mfs/
$ chmod a+x /usr/local/mfs/sbin/*
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/ ; ln -s /usr/local/mfs/bin/* /usr/local/bin/
#优化 MFS 服务配置,便于命令调用
$ mkdir /mfsclient
$ mfsmount /mfsclient/ -H 10.10.10.11
$ chown -R mfs.mfs /mfsclient/
$ echo "1111111" > /mfsclient/1.txt
$ mfsfileinfo /mfsclient/1.txt
#只部署了一个ChunkServer的情况
/mfsclient/1.txt:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 10.10.10.13:9422 (status:VALID)
#10.10.10.15客户端执行(部署了两个ChunkServer的情况)
$ echo "2222222" > /mfsclient/2.txt
$ mfsfileinfo /mfsclient/2.txt
/mfsclient/2.txt:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 10.10.10.13:9422 (status:VALID)
copy 2: 10.10.10.14:9422 (status:VALID)
##################################################################################################
###CentOS 7安装(需要联网)
wget --no-check-certificate \
https://master.dl.sourceforge.net/project/moosefs/3.0.103/moosefs-packages-all-3.0.103.tar.gz
tar -zxvf moosefs-packages-all-3.0.103.tar.gz -C /opt/
cd /opt/moosefs-packages-all-3.0.103/linux/centos/7/
#删除Pro版本(企业版的RPM包)
sudo rm -rf moosefs-pro-*
sudo yum install -y gcc gcc-c++ make libpcap-devel zlib-devel fuse-devel pkgconfig fuse
sudo yum -y install fuse fuse-devel fuse-libs
sudo yum install -y *
#查看是否创建用户
$ getent passwd mfs
mfs:x:998:996:MooseFS:/var/lib/mfs:/sbin/nologin
$ mkdir /mfsclient
$ mfsmount /mfsclient/ -H 10.10.10.11
$ chown -R mfs.mfs /mfsclient/
$ echo "Hello MFS File System" > /mfsclient/1.txt
#10.10.10.15客户端执行
$ mfsfileinfo /mfsclient/1.txt
1.txt:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 10.10.10.13:9422 (status:VALID)
copy 2: 10.10.10.14:9422 (status:VALID)
浏览器输入 10.10.10.11:9425 就能访问。
#若数据没有同步,则需要到 Master 节点,重启服务
mfsmaster restart
可以浏览到 ChunkServer 节点的信息,就代表已经可以初步的进行使用了。
查看MFS 集群中的Disk 硬盘的使用情况
MFS 集群中的ChunkServer的水平扩展能力还是非常大的,并且 Master Server 的压力比较小,不涉及到真实流量的转发。
默认情况下 MFS 集群中的 Goal 期望值就是 2。
#10.10.10.15客户端把mfs.txt删了
$ echo "Hello,MFS Niubi" > /mfsclient/mfs.txt
$ rm -rf /mfsclient/mfs.txt
#10.10.10.15客户端要恢复删除的数据,进行一下操作
$ mkdir /mfsback
#创建一个目录
#挂载时需要添加 -m 参数
$ mfsmount -m /mfsback -H 10.10.10.11
$ cd /mfsback/trash ; yum -y install tree &> /dev/null
$ tree | grep -F1 mfs.txt
#查看这个文件,找到mfs.txt
├── 003
│ ├── 00000003|mfs.txt
│ └── undel
$ mv /mfsback/trash/003/00000003\|mfs.txt /mfsback/trash/undel/
#把这个文件放到undel目录下
#查看恢复文件
$ ls -l /mfsclient/mfs.txt
-rw-r--r-- 1 root root 16 Sep 5 20:53 /mfsclient/mfs.txt
$ cat /mfsclient/mfs.txt
Hello,MFS Niubi
#查看误删除时间
$ mfsgettrashtime /mfsclient/mfs.txt
/mfsclient/mfs.txt: 86400
#单位:秒
#修改误删除时间
$ mfssettrashtime 2000 /mfsclient/mfs.txt
/mfsclient/mfs.txt: 2000
#MFS会将数值取整
$ mfsgettrashtime /mfsclient/mfs.txt
/mfsclient/mfs.txt: 3600
#10.10.10.15客户端操作,快照功能可以简单的理解为是软链接的特性。
#10.10.10.15客户端操作
$ cd /mfsclient ; mkdir back
$ chown mfs.mfs back/
#可选
$ mfsmakesnapshot /mfsclient/mfs.txt /mfsclient/back/
$ ls -l /mfsclient/back/mfs.txt
-rw-r--r-- 1 root root 16 Sep 5 20:53 /mfsclient/back/mfs.txt
$ cat /mfsclient/back/mfs.txt
Hello,MFS Niubi
#MFS的快照功能是不会占用两份空间,而普通的拷贝则是占用两份空间
#类似于 ln -s 命令软链接
#10.10.10.15客户端操作
$ cd /mfsclient
$ echo "Hello MFS World" >> /mfsclient/3.txt
$ mfsfileinfo /mfsclient/3.txt
/mfsclient/3.txt:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 10.10.10.13:9422 (status:VALID)
copy 2: 10.10.10.14:9422 (status:VALID)
#两个副本
#设置为一个Goal副本数
$ mfssetgoal 1 /mfsclient/3.txt
/mfsclient/3.txt: goal: 1
$ mfsfileinfo /mfsclient/3.txt
/mfsclient/3.txt:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 10.10.10.14:9422 (status:VALID)
#变为一个副本
#恢复为两个副本
$ mfssetgoal 2 /mfsclient/3.txt
/mfsclient/3.txt: goal: 2
$ mfsfileinfo /mfsclient/3.txt
/mfsclient/3.txt:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 10.10.10.13:9422 (status:VALID)
copy 2: 10.10.10.14:9422 (status:VALID)
#将其中一个ChunkServer停止服务(10.10.10.13机器)
$ mfschunkserver stop
sending SIGTERM to lock owner (pid:8516)
waiting for termination terminated
#客户端访问/mfsclient/3.txt并没有任何问题
$ cat /mfsclient/3.txt
Hello MFS World
###CentOS 6操作
#10.10.10.11 master操作
$ mfsmaster stop
$ rm -rf /usr/local/mfs/var/mfs/*
#10.10.10.12 metadata操作
$ scp /usr/local/mfs/var/mfs/* root@10.10.10.11:/usr/local/mfs/var/mfs/
#10.10.10.11 master操作
$ mfsmaster -a #自动恢复
###CentOS 7操作
#10.10.10.11 master操作
$ mfsmaster stop
$ rm -rf /var/lib/mfs/*
#10.10.10.12 metadata操作
$ scp -r /var/lib/mfs/* root@10.10.10.11:/var/lib/mfs/
#10.10.10.11 master操作
$ mfsmaster -a
#自动恢复
#客户端再次访问一下 MFS 挂载目录情况
#会有一定的延时时间
$ ls -l /mfsclient/
total 4
-rw-r--r-- 1 root root 22 Sep 5 18:02 1.txt
-rw-r--r-- 1 root root 16 Sep 5 21:10 3.txt
drwxr-xr-x 2 root root 1600 Sep 5 21:07 back
-rw-r--r-- 1 root root 16 Sep 5 20:53 mfs.txt
#可以正常的访问使用
$ cat /mfsclient/mfs.txt
Hello,MFS Niubi
#查看MFS Dashboard情况(可以正常的使用)
MooseFS官网 [ https://moosefs.com ]
MooseFS分布式文件系统介绍 [ https://www.cnblogs.com/hjc4025/p/9956988.html ]
分布式文件系统之MooseFS [ https://blog.51cto.com/zouqingyun/1698710 ]
集群化部署 [ https://blog.csdn.net/w918589859/article/details/111770726 ]