-
由于MFS自身的Mfslogger本身的的不可靠性,这里的高可用是对于单节点mfs master来进行配置的,mfs master 处理用户的挂载请求,并且分发数据,很容易成为节点的故障所在;
-
这里来配置MFS+pacemaker+corosync+iscsi集群的高可用性
-
本次部署是基于MFS文件系统环境已经搭建好,具体可参考博文:https://mp.youkuaiyun.com/weixin_44224288/article/details/90377605
MFSmaster+pacemaker+corosync高可用的部署
1.实验环境
- rhel 7.3 firewalld is disabled
主机名(IP) | 服务 |
---|---|
server1(172.25.254.1) | mfsmaster |
server2(172.25.254.2) | chunkserver |
server3(172.25.254.3) | chunkserver |
server4(172.25.254.4) | backup-mfsmaster |
2.在server4配置mfsmaster
1.安装mfs master,编辑域名解析,开启服务
[root@server4 ~]# ls
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@server4 ~]# yum install -y moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@server4 ~]# vim /etc/hosts
文件添加解析如下:
172.25.16.1 server1 mfsmaster
[root@server4 system]# pwd
/usr/lib/systemd/system
[root@server4 system]# vim moosefs-master.service
文件编辑内容如下:
8 ExecStart=/usr/sbin/mfsmaster -a
[root@server4 system]# systemctl daemon-reload
[root@server4 system]# systemctl start moosefs-master
mfs master开启之后查看端口:
2.server1和server4配置高可用yum源
[root@server1 3.0.103]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim yum.repo
文件编辑内容如下:
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.254.77/file
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.254.77/file/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.254.77/file/addons/ResilientStorage
gpgcheck=0
3.在server1上和server4上安装pacemaker+corosync
[root@server1 yum.repos.d]# yum install pacemaker corosync -y
[root@server4 system]# yum install pacemaker corosync -y
4.因为要实现高可用及其fence既保持server1和server4节点之间要做免密的ssh
5.在server1和server4上安装资源管理工具并且开启相应服务
//server1
[root@server1 ~]# yum install -y pcs
[root@server1 ~]# systemctl start pcsd
[root@server1 ~]# systemctl enable pcsd ##开启该服务之后会在/etc/passwd目录下生成hacluster用户,及高可用管理用户
[root@server1 ~]# passwd hacluster ##配置高可用集群管理用户的密码
//server4
[root@server4 ~]# yum install -y pcs
[root@server4 ~]# systemctl start pcsd
[root@server4 ~]# systemctl enable pcsd ##开启该服务之后会在/etc/passwd目录下生成hacluster用户,及高可用管理用户
[root@server4 ~]# passwd hacluster ##配置高可用集群管理用户的密码
6.在server1上使用集群管理工具创建mfsmaster集群并且启动集群
- 创建集群
- 为集群命名并且开启集群:
7.查看集群状态
8.检查集群并解决报错
注:查看集群状态时出现错误是因为默认配置fence模块的这里先不配置fence所以先将fence设置关掉,等后面配置fence的时候再将其打开即可
补充知识:如果命令无法用tab键查看的话可以下载:yum install -y bash-*
9.给mfs高可用集群添加资源,此次资源添加vip
//查看资源
[root@server1 ~]# pcs resource standards ##查看集群资源
[root@server1 ~]# pcs resource agents ocf:heartbeat ##查看该资源下支持的资源类型
//创建资源
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s
[root@server1 ~]# pcs resource show
在server4上再次查看集群信息:
10.高可用测试
- 查看此时vip在server1上:
- 将cluster集群中的server1关掉,此时vip漂移到server4上
- 查看监控信息也显示在线的只有server4,在server1上已经不能使用改名令了因为server1集群已经关闭了
- 再次开启集群中的server1,发现vip还是在server4上,但是监控信息查看时server1和server4都是在线的
二.pacemaker+corosync实现高可用后的iscsi实现数据共享
1.在客户端如果进行了数据恢复时进行了相应的挂载,df是查看不到的,用mount命令查看,如果有挂载需要先卸载
2.关闭master及其chunkserver服务为iscsi的实验环境做准备
[root@server1 ~]# systemctl stop moosefs-master
[root@server2 ~]# systemctl stop moosefs-chunkserver
[root@server3 ~]# systemctl stop moosefs-chunkserver
[root@server4 ~]# systemctl stop moosefs-master
3.iscsi的配置
实验环境:
主机名(IP) | 服务 |
---|---|
server1(172.25.254.1) | iscsi-*(客户端) |
server3(172.25.254.3) | targetcli(服务端) |
server4(172.25.254.4) | iscsi-*(客户端) |
server3(targetcli):
1.在server3为chunkserver也是真正的数据端上添加共享数据的磁盘
fdisk -l 命令差查看:
2.安装targetcli并做相应配置
//安装targetcli
[root@server3 ~]# yum install -y targetcli
//登录targetcli并且将添加的硬盘当作targetcli磁盘共享存储的磁盘
[root@server3 ~]# targetcli
/> ls ##查看targetcli的相关信息,里面会有目录及其相应目录下的文件
//添加磁盘:
/> cd backstores/block
/backstores/block> create my_disk1 /dev/vda
在iscis目录下:
/backstores/block> cd /
/> cd iscsi
创建磁盘目录,进入目录下的相应目录创建已添加磁盘:
/iscsi> create iqn.2019-05.com.example:server3
/iscsi> cd iqn.2019-05.com.example:server3/
/iscsi/iqn.20...ample:server3> cd tpg1/luns
/iscsi/iqn.20...er2/tpg1/luns>
/iscsi/iqn.20...er2/tpg1/luns> create /backstores/block/my_disk1
创建client磁盘共享目录:
/iscsi/iqn.20...er2/tpg1/luns> cd /iscsi/iqn.2019-05.com.example:server3/tpg1/acls
/iscsi/iqn.20...er2/tpg1/acls> create iqn.2019-05.com.example:client
server1(iscsi):
1.下载iscsi客户端并且做相应配置
安装iscsi-*
[root@server1 ~]# yum install -y iscsi-*
修改客户端的iscsi加密服务文件的问题,及添加服务端的钥匙:
[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi
文件编辑内容如下(添加服务端的设置的客户端的磁盘目录):
InitiatorName=iqn.2019-05.com.example:client
登录查看是否共享成功:
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.254.3
172.25.254.3:3260,1 iqn.2019-05.com.example:server3
[root@server1 ~]# systemctl restart iscsid
[root@server1 ~]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2019-05.com.example:server3, portal: 172.25.254.3,3260] (multiple)
Login to [iface: default, target: iqn.2019-05.com.example:server3, portal: 172.25.254.3,3260] successful.
在server1上登陆成功之后查看:
2.在server1上创建共享的磁盘分区挂载并且进行验证
a.创建分区并且进行格式化
b.挂载格式化后的分区
//因为mfs文件存储的相应信息都在/var/lib/mfs/ ,要创建mfs文件系统必须将其信息写到已经共享成功的磁盘里面,实现mfs文件系统的相应操作:
[root@server1 ~]# mount /dev/sdb1 /mnt
[root@server1 ~]# cd /var/lib/mfs/ 这是mfs的数据目录
[root@server1 mfs]# ls
changelog.2.mfs changelog.4.mfs changelog.6.mfs metadata.mfs metadata.mfs.empty
changelog.3.mfs changelog.5.mfs metadata.crc metadata.mfs.back.1 stats.mfs
[root@server1 mfs]# cp -p * /mnt/ 带权限拷贝/var/lib/mfs的所有数据文件到/dev/sdb1上
[root@server1 mfs]# cd /mnt/
[root@server1 mnt]# ls
changelog.2.mfs changelog.4.mfs changelog.6.mfs metadata.crc metadata.mfs.back.1 stats.mfs
changelog.3.mfs changelog.5.mfs lost+found metadata.mfs metadata.mfs.empty
[root@server1 mnt]# chown mfs.mfs /mnt 当目录属于mfs用户和组时,才能正常使用
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt
[root@server1 ~]# mount /dev/sdb1 /var/lib/mfs/ # 使用分区,测试是否可以使用共享磁盘
[root@server1 ~]# systemctl start moosefs-master 服务开启成功,就说明数据文件拷贝成功,共享磁盘可以正常使用
[root@server1 ~]# systemctl stop moosefs-master 关闭服务因为要进行高可用测试,是集群开启服务而不能手动开启
server4(iscsi-*):操作同server1
a.下在相应的iscsi客户端并且登录查看共享是否成功
[root@server4 system]# yum install -y iscsi-*
[root@server4 system]# vim /etc/iscsi/initiatorname.iscsi
文件编辑内容如下:
InitiatorName=iqn.2019-05.com.example:client
[root@server4 system]# iscsiadm -m discovery -t st -p 172.25.254.3
[root@server4 system]# iscsiadm -m node -l
fidk -l查看共享成功:
b.挂载并检测是否能够开启mfs服务
开启集群:
注意:在mfs文件系统创建完成之后,对于在主从及server1上和server4上的mfs文件系统用户的所属组及其相应id都要相同,如果不同可能会导致共享出错
如果不同可进行如下操作:
查看:
修改server4上相应的用户所属组id即可:
a.编辑/etc/group修改mfs的所属组与server1的所属组相同
b.更改用户所属组查看更改成功
创建iscsi文件系统的集群资源:
注:集群管理实现mfs文件系统下的iscsi文件系统共享,所以如果在server1,server4上挂载了/var/lib/mfs需要将其卸载,目的是要通过集群实现其的自动挂载。
[root@server1 system]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs/ fstype=xfs op monitor interval=30s
查看创建的资源:
创建mfsd文件系统资源,把服务集中在一台主机上:
[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min
[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd
[root@server1 ~]# crm_mon 使用该命令再次查看:
发现服务都在server1上此时查看挂载状态发现/var/lid/mfs文件系统的相应信息自动挂载
三.fence解决脑裂问题
1.测试高可用
- 打开chunkserver(server2,server3)
server2的chunkserver服务发现启动失败是因为在进行mfs文件系统搭建的时候server2上是添加磁盘建立分区并却将其挂载的,所以需要将其重新挂载即可,而server3在配置时是默认将根直接进行挂载的:
- 查看vip的位置
- 查看服务状态
- 在客户端进行分布式存储测试
a.挂载,在挂载之前确保/mnt/mfs中是空的,否则就会挂载失败
b.上传文件
c.在客户端上传大文件的同时,关闭正在提供服务的服务端
pcs cluster stop server1
d.查看到文件上传成功,并没有受到影响
通过以上实验我们发现,当master挂掉之后,backup-master会立刻接替master的工作,保证客户端可以进行正常访问,但是,当master重新运行时,我们不能保证master是否会抢回自己的工作,从而导致master和backup-master同时修改同一份数据文件从而发生脑裂,此时就需要fence来防止此类时间发生
2.fence部署
1.在server1,server4上安装fence服务并且建立密匙的目录
//server1:
[root@server1 ~]# yum install -y fence-virt
[root@server1 ~]# mkdir /etc/cluster
//server4:
[root@server4 ~]# yum install -y fence-virt
[root@server4 ~]# mkdir /etc/cluster
2.在物理机上下载fence服务并且生成一份fence密钥文件,传给服务端
[root@foundation77 Desktop]# yum install -y fence-virtd
[root@foundation77 Desktop]# mkdir /etc/cluster/
[root@foundation77 Desktop]# cd /etc/cluster/
[root@foundation77 cluster]# fence_virtd -c ##生成fence的相应信息
[root@foundation77 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
[root@foundation77 cluster]# scp fence_xvm.key root@172.25.254.1:/etc/cluster/
[root@foundation77 cluster]# scp fence_xvm.key root@172.25.254.4:/etc/cluster/
3.在物理机上开启服务查看端口
4.确保集群中的主机域名与物理机上的主机域名对应一致
5.在server1上的集群中添加fence设置
[root@server1 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:server1;server4:server4" op monitor interval=1min ##主机名采用映射的方式,及fense服务与主机之间主机名的映射
[root@server1 cluster]# pcs property set stonith-enabled=true ##开启集群fence配置
[root@server1 cluster]# crm_verify -L -V
[root@server1 cluster]# crm_mon ##查看
6.破坏server4内核
7.发现server4端点重启
8.再次查看fence服务节点在server4