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/hosts
172.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 -y
lsof -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/hosts
172.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.cfg
server2:LABELS = A
server3:LABELS = B
server4: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.cfg
server2:LABELS = A S
server3:LABELS = B H
server4:LABELS = A H
systemctl 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天 名字为classabsh
mfssetsclass -r classABSH fstab #将fstab转换存储为ABSH方式
mfsfileinfo fstab #查看文件fstab存储方式
在 storage class一栏中可以看到设定变化,七天后将会改变存储方式。
5.共享文件iscsi实现mfs高可用
server4:为iscis主机,为其添加虚拟磁盘
fdisk /dev/vdb
n
p
一直enter
fdisk -l #查看
设置iscis
yum install -y targetcli
systemctl start target
targetcli
cd 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.iscsi
InitiatorName=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 *****
w
mkfs.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.iscsi
InitiatorName=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.service
ExecStart=/usr/sbin/mfsmaster start -a
重新加载文件
systemctl daemon-reload
systemctl 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状态,显示开启