MFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。

1.MFS组成简介

Master servers:管理服务器,在整个体系中负责管理文件系统,维护元数据,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝。
Chunk Servers:数据存储服务器,存放数据文件实体的服务器,真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
Metaloggers:元数据日志服务器,类似Mysql的主从同步,作用是备份管理服务器master的变化的metadata信息日志文件。
Clients:客户端,挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先连接主管理服务器获取数据的metadata信息,然后根据得到的metadata信息,访问数据服务器读取或写入文件实体。

2.MFS安装和部署

需要准备:
三台虚拟机server1、2、3和本机的真实主机,server1负责master、server2、3负责数据存储,真实主机负责客户端client。

server1:

进入官网 https://moosefs.com/download/

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

编辑他

[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1

在master主机上安装

yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli

vim /etc/hosts 配置解析,使其解析到mfsmaster

172.25.76.1 mfsmaster

启动服务,查看端口

systemctl start moosefs-master
systemctl start moosefs-cgiserv.service
netstat -antlp

将yum到其余数据存储服务器上

 scp /etc/yum.repos.d/MooseFS.repo server2:/etc/yum.repos.d/scp /etc/yum.repos.d/MooseFS.repo server3:/etc/yum.repos.d/

测试,firefox:172.25.76.1:9425

server2:

安装相关rpm包

yum install -y moosefs-chunkserver.x86_64

修改配置文件,指向挂载目录

cd /etc/mfs/
vim mfshdd.cfg/mnt/chunk1 #在最下面写下

创建挂载目录

mkdir /mnt/chunk1

创建磁盘,分区并挂载

fdisk -l


格式化磁盘分区,并挂载

mkfs.xfs /dev/vdb1
mount /dev/vdb1 /mnt/chunk1/
blkid #查看uuid
vim /etc/fstab


修改挂载目录用户和用户组

chown mfs.mfs /mnt/chunk1/

编辑解析,使master指向172.25.76.1

vim /etc/hosts172.25.76.1 server1 mfsmaster

启动服务

systemctl start moosefs-chunkserver

如出现错误,则检查/mnt/chunk1是否为空文件,不为空则会失败。

server3操作与server2一样

查看
firefox:172.25.76.1:9425 +server 可以看到172.25.76.3

server2、3配置好数据存储服务器时,查看端口使用情况
查看端口使用情况:

yum install lsof -ylsof -i :9419
lsof -i :9420
lsof -i :9421

真实主机client端:

下载rhel8相关的client文件

yum install moosefs-client -y

编辑配置文件,指向挂载目录

cd /etc/mfs/
vim mfsmount.cfg/mnt/mfs

编辑解析,同server1

vim /etc/hosts172.25.76.1 server1 mfsmaster

创建目录并mfs命令挂载

mkdir /mnt/mfs
mfsmount

server1查看端口:

测试:进入目录存储文件,查看文件存储内容

cd /mnt/mfs/
mkdir dir1 dir2

将dir1设定到mfs文件系统进行访问

mfssetgoal -r 1 dir1

获取副本数设定

mfsgetgoal dir1/
mfsgetgoal dir2/


查看文件信息

cd dir1
cp /etc/passwd .
mfsfileinfo passwd

cd dir2/
cp /etc/fstab .
mfsfileinfo fstab

3.客户端删除文件并恢复

将源数据挂载到客户端

mkdir /mnt/mfsmeta
mfsmount -m /mnt/mfsmeta/


删除:

cd ../mfs/dir1
rm -fr passwd

寻找

cd /mnt/mfsmeta/
cd trash/
find -name *passwd*


恢复:

mv '00000004|dir1|passwd' undel/
cd /mnt/mfs/dir1
ls

4.storage class ---->通过标签确定

4.1什么是label

label是可以被分配给chunkserver的字母(a~z,26个字母可选),每个chunkserver可以被打上多个标签(即标记上多个字母,但最多可以打26个label)

完整的label表达式可以由多个子表达式构成,每个子标签之间用逗号分隔。每个子表达式特指文件副本的一种存储模式。子表达式可以为星号*或一个label schema。

label schema可以是一个label或由加法、乘法和括号构成的复杂表达式。

加法是逻辑“或”的含义,即文件的副本可以被存放在任意含有加法元素label的chunkserver上。例如,一个文件的storage class是a+b+c,那么任何含有a、b或c标签的chunkserver都可以用来存储该文件的副本。

乘法是逻辑“与”的含义,即文件的副本仅可以存放在包含所有label的chunkserver上。例如,一个文件的storage class是abc,那么只有当一台chunkserver同时含有abc三个标签时,它才能用于存放该文件的副本。

相同的子表达式可以通过在表达式前加数字的方式来表示,而不用重复显示声明多次。

标签表达式示例:

A,B –文件将有两个副本,一个副本将存储在带有标签A的chunkserver上,另一个位于chunkserver上,标签为B
A,* –文件将有两个副本,一个副本将存储在带有标签A的chunkserver上,任何chunkserver上的另一个
*,*–文件将有两个副本,存储在任何chunkserver上(每个副本存储的chunkserver不同)
AB,C+D–文件将有两个副本,一个副本将存储在具有标签A和B(标签的乘法)的chunkserver上,另一个副本将存储在具有标签A或B(标签的乘法)d的chunkserver上
A,B[X+Y],C[X+Y]–文件将有三个副本,一个副本将存储在任何具有标签A的chunkserver上,第二个副本将存储在任何具有B标签和X或Y标签的chunkserver上,第三个将存储在任何具有C标签和X或Y标签的chunkserver上
A,A表达式等于2A表达式
A,BC,BC,BC表达式等同于A,3BC表达式
*,*表达式等于2*表达式等于2表达式

4.2范例

1.分别设定chunk端的标签

vim /etc/mfs/mfschunkserver.cfgserver2:LABELS = Aserver3:LABELS = Bserver4:LABELS = A

每次修改都需要reload服务

systemctl reload moosefs-chunkserver.service

client端

mfsscadmin create 2A class2A  #创建StorageClass 需要在文件目录中进行   2A为标签表达式,class2A为名称
#可通过 mfsscadmin list 查看storageclass
mfssetsclass -r class2A fstab #将fstab转换存储为2A方式
mfsfileinfo fstab #查看文件fstab存储方式


4.2

vim /etc/mfs/mfschunkserver.cfgserver2:LABELS = A S
server3:LABELS = B H
server4:LABELS = A Hsystemctl reload moosefs-chunkserver.service

网页查看端口设定情况

client端:

mfsscadmin create AS,2H[A+B] classAS2HAB   #需要在文件目录中进行mfssetsclass -r classAS2HAB fstab   #将fstab转换存储为AS2HAB方式mfsfileinfo fstab #查看文件fstab存储方式

可以看到fstab根据设定改变了其存储方式

server2:LABELS = A S
server3:LABELS =  A B H S
server4:LABELS = A H

client端:

mfsscadmin create -C 2AS -K AS,BS -A AH,BH -d 7 classABSH  #需要在文件目录中进行 -C create的设定 设置天数为7天 名字为classabshmfssetsclass -r classABSH fstab #将fstab转换存储为ABSH方式mfsfileinfo fstab #查看文件fstab存储方式

在 storage class一栏中可以看到设定变化,七天后将会改变存储方式。

5.共享文件iscsi实现mfs高可用

server4:为iscis主机,为其添加虚拟磁盘

fdisk /dev/vdb
n
p
一直enterfdisk -l #查看

设置iscis

yum install -y targetcli
systemctl start target
targetclicd backstores/block
create my_disk /dev/vdb
cd iscsi
create iqn.2021-11.org.westos:target1
cd iqn.2021-07.org.westos:target1/tpg1/luns
create /backstores/block/my_disk
/iscsi/iqn.20...et1/tpg1/acls> create iqn.2021-11.org.westos:client

server1:
master需要备份的机器

yum install -y iscsi-*
cd /etc/iscsi/
vim initiatorname.iscsiInitiatorName=iqn.2021-11.org.westos:client
iscsiadm -m discovery -t st -p 172.25.76.4
iscsiadm -m node -l

登陆成功后会生成以下文件
cd /var/lib/iscsi/

看到 server1中多了一块sda1磁盘
分区并挂载

fdisk /dev/sda
n
p
enter *****
wmkfs.xfs /dev/sda1
mount /dev/sda1 /mnt

查看文件,并将master文件复制到iscsi的挂载目录中
做到这一步实际上mfs系统文件并没有同步过来,因为我们应该先关闭服务,再拷贝文件到目录中再挂载这个目录,因为服务关闭时会生成一个不同的文件metadata.mfs(原始镜像文件)

cd /var/lib/mfs/
cp -p * /mnt/
cd /mnt/
chown mfs.mfs /mnt/ -R
umount /mnt/

server2:负责备份server1中的master信息

yum install -y moosefs-master.x86_64

下载iscsi相关安装包

yum install -y iscsi-*

配置iscsi

vim /etc/iscsi/initiatorname.iscsiInitiatorName=iqn.2021-11.org.westos:client

连接iscsi主机server4

iscsiadm -m discovery -t st -p 172.25.76.4
iscsiadm -m node -l

查看磁盘,多了一块sda1,将其挂载

mount /dev/sda1 /var/lib/mfs/ #挂载mfs的数据目录到共享存储上

启动master服务

cd /var/lib/mfs/
systemctl start moosefs-master

这时如果出现报错则

mv metadata.mfs.back metadata.mfs

开启服务之后/var/lib/mfs里面的文件为:metadata.mfs.back
而关闭服务之后,文件变为metadata.mfs
但是现在关闭服务之后,文件为metadata.mfs.back,所以开启服务的时候会报错,所以改名字,开启服务
启动成功。server1中的master备份均完成。

6.双机热备份

vim删除光标以后的内容: 大写字母 D

server1中:
修改软件仓库文件,读取镜像中的高可用插件

vim /etc/yum.repos.d/dvd.repo[dvd]
name=rhel7.6
baseurl=http://172.25.76.250/rhel7.6
gpgcheck=0[HighAvailability]
name=HighAvailability
baseurl=http://172.25.76.250/rhel7.6/addons/HighAvailability
gpgcheck=0

安装需要的模块

yum install -y pacemaker pcs psmisc policycoreutils-python

设置server1与server2免密登陆

ssh-keygen
ssh-copy-id server2

将仓库文件scp给server2,并且在server1中通过ssh远程安装需要的部分,并远程开启服务pcsd

ssh server2 yum install -y pacemaker pcs psmisc policycoreutils-python
systemctl enable --now pcsd.service
ssh server2 systemctl enable --now pcsd.service 

server1和server2均设定需要认证的用户和密码

echo westos | passwd --stdin hacluster
ssh server2 'echo westos | passwd --stdin hacluster'

认证server1和server2

pcs cluster auth server1 server2

设置server1和server2为mycluster集群

pcs  cluster setup  --name mycluster server1 server2

启动集群

pcs cluster  start --all
pcs cluster  enable --all
pcs status #查看状态

设定后警告取消

pcs property set stonith-enabled=false

查看默认功能

pcs resource standards

设定vip模块 监控时间间隔为30s,此处ip是未占用的ip用于mfsmaster。

pcs resource  create vip ocf:heartbeat:IPaddr2 ip=172.25.76.100 op monitor interval=30s
pcs status #查看状态

查看Filesystem使用方法

pcs resource describe ocf:heartbeat:Filesystem

当我们进行 standby unstandby操作时 server不会被调度回去
若是回到server1上,磁盘会脑裂,坏掉。

设置集群操作前两个master关闭所有mfs服务并关闭开机自启
server1:

systemctl stop moosefs-master.service
systemctl disable moosefs-master.service

server2:

systemctl stop moosefs-master.service
umount /var/lib/mfs/

设定mfsdata

pcs resource  create mfsdata ocf:heartbeat:Filesystem device="/dev/sda1" directory="/var/lib/mfs" fstype=xfs  op monitor interval=30s

查看状态成功后,会按照状态提示挂载到某个master主机上,此处自动挂载到server1上,

pcs resource create mfsmaster systemd:moosefs-master op monitor interval=60s

发现vip、mfsdata、mfsmaster不在同一个主机中,
解决方案:

pcs resource  group  add mfsgroup vip mfsdata mfsmaster

修改后查看状态

测试:
修改所有mfs主机的解析,使
172.25.76.100 解析到 mfsmaster
server1234 与真机都需要更改

完成后client端查看文件dir2/fstab 和dir1/passwd

down掉server1
server1:

pcs node standby

vip mfsdata mfsmaster均迁移到server2中

再次查看文件
文件存储路径未受影响。
冲洗拉起server1,不会有任何影响操作。

pcs node unstandby

7.报错排错

第一天搞完实验直接关机了
第二天在想起mfs 发现起不来并报错

使用脚本文件启动服务:

/usr/sbin/mfsmaster start -a

查看端口:发现9419/9420/9421的端口都被打开了

但是此时查看moosefs-master.service状态发现是failed的状态

进入系统的服务文件

vim /usr/lib/systemd/system/moosefs-master.serviceExecStart=/usr/sbin/mfsmaster start -a


重新加载文件

systemctl daemon-reloadsystemctl start moosefs-master #还是会有报错

查看日志,报错信息
cat’t start :lockfile is already locked by another process

这是因为之前已经使用脚本文件已经启动过一次了,现在使用systemctl start moosefs-master,就会出现报错 但是用脚本文件/usr/sbin/mfsmaster stop-a关闭,他会报错

因此需要查看进程,输入:ps aux ,使用进程直接将其进程杀死:kill -9 【mfsmaster进程号】
再次启动 systemctl restart moosefs-master

此时查看master状态,显示开启

企业运维实战--MFS分布式文件系统相关推荐

  1. 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机

    本节书摘来自异步社区<VMware vSphere企业运维实战>一书中的第2章,第2.6节,作者:王春海著,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.6 ...

  2. 《VMware vSphere 6.5企业运维实战》已经出版

    <VMware vSphere 6.5企业运维实战>已经由人民邮电出版社出版,购买链接: https://item.jd.com/26391828617.html 本书以vSphere 6 ...

  3. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

  4. 企业运维实战--Zabbix监控之结合nginx、mysql、java应用、proxy分布式、睿象云报警、API批量操作、替换mysql为tidb数据库

    一.zabbix server的nginx监控 nginx部署 在server5上进行: tar zxf nginx-1.20.1.tar.gz cd nginx-1.20.1 yum install ...

  5. 企业运维实战--lvs之DR模式负载均衡、keepalived、lvs高可用

    LVS 介绍 lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求 ...

  6. 企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路

    文章目录 HPA 运行 php-apache 服务器并暴露服务 创建 Horizontal Pod Autoscale 增加负载 停止负载 Helm Helm安装 设置helm命令补齐 chart库 ...

  7. 企业运维实战--k8s学习笔记 k8s网络通信、Flannel vxlan模式简介、calico网络插件替换、网络策略范例总结

    1.k8s网络通信 k8s通过CNI接口接入其他插件来实现网络通讯.目前比较流行的插件有flannel,calico等. CNI插件存放位置:# cat /etc/cni/net.d/10-flann ...

  8. 重磅!由Linux面试出发,看清华大佬教你如何企业级运维实战

    其实当时没有想到去面试,只是在智联上更新了一下简历,就陆陆续续接到很多公司的邮件和电话,闲话少说,下面就分享给大家面试Linux的经历: 首先,公司HR会把公司的介绍及岗位要求发到你邮箱(或者QQ.微 ...

  9. 《大企业云桌面运维实战》v1.13

    <大企业云桌面运维实战>-培训大纲 v1.1.3 <大企业云桌面运维实战>-授课计划 v1.1.3 链接:http://pan.baidu.com/s/1b6LxL0 密码:5 ...

  10. 大数据运维实战第一课 大话 Hadoop 生态圈

    你好,欢迎来到<大数据运维实战>专栏. 入行以来,我从事大数据运维也有十多年了,期间我做过系统运维.DBA,也做过大数据分析师,最后选择了大数据运维方向,曾设计并管理超过千台.PB 级的数 ...

最新文章

  1. Linux绝对权限和相对权限法,Linux基础学习笔记
  2. ORACLE学习笔记--性能优化2
  3. 小程序完整对接 pingpp支付
  4. springboot的核心
  5. 你所不知道的 JavaScript
  6. Linux综合练习——课件分发
  7. LeetCode(1002)——查找常用字符(JavaScript)
  8. Win10桌面上:[ 我的电脑 ] 图标不见了
  9. 恒定湿热试验条件及标准-环境试验中的湿热试验报告
  10. 网卡,交换机和路由器
  11. (原創) 如何設計除頻器? (SOC) (Verilog) (MegaCore)
  12. Emacs footnote 自动排序
  13. SQL SERVER 经典语句大全必学(3)——技巧篇
  14. 常见路由器开源系统(固件)简介
  15. 让你一步步成为运维专家之各种运维脚本
  16. 1949. 坚定的友谊
  17. js html占位符,JavaScript占位符
  18. matlab二维三维图形绘制和坐标轴范围设置
  19. 新一代超高精度双回路张力控制器
  20. 获取UNIX系统时间

热门文章

  1. r语言nonzerocoef函数_文献汇报||Lasso方法在肿瘤基因位点筛选中的应用
  2. 树莓派开启SSH、VNC远程桌面、开启root账号以及换国内镜像源码等
  3. 老板杜绝员工上班不务正业
  4. WIN10下删除Hiberfil.sys文件
  5. php强类型作用,强类型php性能很彪悍
  6. Financial crime in times of Covid-19 – AML and cyber resilience measures 整理
  7. Crime and Punishment
  8. Windows软件之——RocketDock之无法拖放图标到dock栏
  9. 计算机体系结构 第一章 计算机系统结构的基础知识(2)
  10. 大学生php实训总结_php实训报告.doc