一.什么是mfsmaster的高可用
我们知道mfsmaster是调度器,是mfs最核心的地方,如果mfsmaster挂了,整个mfs架构会挂掉,对此我们要对mfsmaster进行高可用冗余操作。
MFS文件系统中,master负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复。多节点拷贝,是MFS的关键点,显然有极大可能存在单点故障。虽然有Metalogger,但是不能实现故障实时切换,服务要停止之后在Metalogger恢复元数据以及changelog_ml.*.mfs(服务器的变化日志文件),再次重新指定新的mfsmaster节点。
可以采用keepalived实现,但是要注意的是不仅仅是VIP的漂移,mfsmaster的工作目录都要进行漂移,这就涉及存储的共享,在这里采用pacemaker+corosync来实现故障切换)
构建思路:利用pacemaker构建高可用平台,利用iscis做共享存储,mfschunkserver做存储设备。
有人可能要问为什么不用keepalived,我想说的是就是keepalived是可以完全做的,但是keepalived不具备对服务的健康检查;整个corosync验证都是脚本编写的,再通过vrrp_script模块进行调用,利用pacemaker比较方便。
用途:
解决mfs master的单点问题,同样可以作为其他需要高可用环境的标准配置方法
二.部署mfsmaster的高可用
实验环境:
主机 | 服务 |
---|---|
server1 | mfsmaster,pacemaker,iscsi客户端 |
server2 | mfschunkserever1,iscsi服务端 |
server3 | mfschunkserever2 |
server4 | mfsmaster-backup,pacemaker,iscsi客户端 |
物理机 | client |
本来iscsi服务端是要在另外一台虚拟机上进行部署的,这里为了方便,直接将server2作为iscsi的服务端
前提:
停掉之前mfs分布式文件系统启动的服务,并卸载客户端挂载的目录。为后续的pcs集群做准备
[root@server1 ~]# systemctl stop moosefs-master #server1端(moosefs-cgiserv服务可以不用关闭,因为moosefs-cgisev服务只是用来提供web界面的
[root@server2 ~]# systemctl stop moosefs-chunkserver
[root@server3 ~]# systemctl stop moosefs-chunkserver
物理机:
[root@foundation27 ~]# umount /mnt/mfsmeta
[root@foundation27 ~]# umount /mnt/mfs
实验步骤如下所示:
第一步:配置server4作为mfsmaster-backup端
首先要搭建基础的mfs分布式存储架构,本篇不做阐述。可以查看上篇博文。这里只需要在上篇博文的基础上添加server4作为mfsmaster-backup端即可。
server1:将server4需要的包传送给它
[root@server1 ~]# scp moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm server4:
server4:
[root@server4 ~]# yum install -y moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm #安装软件
[root@server4 ~]# vim /etc/hosts #编辑本地解析文件
172.25.27.1 server1 mfsmaster
[root@server4 ~]# vim /usr/lib/systemd/system/moosefs-master.service #修改moosefs-master服务的启动脚本
8 ExecStart=/usr/sbin/mfsmaster -a #修改之后的内容
[root@server4 ~]# systemctl daemon-reload
[root@server4 ~]# systemctl start moosefs-master #检查脚本是否有错误,即查看moosefs-master服务是否能够正常启动
[root@server4 ~]# systemctl stop moosefs-master #关闭moosefs-master服务,以便后续实验的开展
第二步:配置 iscsi实现共享存储
server2
添加一块新的磁盘,用于共享
看到新添加的磁盘为/dev/vda
[root@server2 ~]# fdisk -l
对iscsi进行配置
[root@server2 ~]# yum install targetcli -y
[root@server2 ~]# systemctl start target
[root@server2 ~]# targetcli
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / .............................................................. [...]
o- backstores ................................................... [...]
| o- block ....................................... [Storage Objects: 0]
| o- fileio ...................................... [Storage Objects: 0]
| o- pscsi ....................................... [Storage Objects: 0]
| o- ramdisk ..................................... [Storage Objects: 0]
o- iscsi ................................................. [Targets: 0]
o- loopback .............................................. [Targets: 0]
/> backstores/block create my_disk1 /dev/vda
/> iscsi/ create iqn.2019-08.com.example:server2
/> iscsi/iqn.2019-08.com.example:server2/tpg1/acls create iqn.2019-08.com.example:client
/> iscsi/iqn.2019-04.com.example:server2/tpg1/luns create /backstores/block/my_disk1