mfsmaster 热备

配置集群的前提:

时间同步

节点间相互的dns解析

实验环境部署

新增一台虚拟机serve5(172.25.81.5)作备master

主机IP作用
172.25.81.1mfsmaster server
172.25.81.5mfsmaster server
172.25.81.3mfschunk server
172.25.81.4

mfschunk server

172.25.81.250mfs client

 

 

 

 

 

 

 

安装并配置mfsmaster

[root@server5 ~]# rpm -ivh moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm

修改moosefs-master服务的启动脚本

[root@server5 ~]# vim /usr/lib/systemd/system/moosefs-master.service

[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/mfsmaster -a
ExecStop=/usr/sbin/mfsmaster stop
ExecReload=/usr/sbin/mfsmaster reload
PIDFile=/var/lib/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no

[Install]
WantedBy=multi-user.target

[root@server5 ~]# systemctl daemon-reload

配置master端(server1 server5)的yum源,以获取高可用安装包

[root@server1 ~]# vim /etc/yum.repos.d/yum.repo

[dvd]
name=rhel7.3
baseurl=http://172.25.81.250/rhel7.3
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.81.250/rhel7.3/addons/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.81.250/rhel7.3/addons/ResilientStorage
gpgcheck=0

mfsmaster配置(server1):

[root@server1 ~]# yum install -y pacemaker corosync pcs

[root@server1 ~]# ssh-keygen

[root@server1 ~]# ssh-copy-id server5              ##设置免密

[root@server1 ~]# ssh-copy-id server1

[root@server1 ~]# systemctl start pcsd

[root@server1 ~]# systemctl enable pcsd

[root@server1 ~]# passwd hacluster               ##设置hacluster用户密码,主备master必须相同

Changing password for user hacluster.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

bankup-mfsmaster配置(serve5):

[root@server5 ~]# yum install -y pacemaker corosync pcs

[root@server5 ~]# systemctl start pcsd

[root@server5 ~]# systemctl enable pcsd

[root@server5 ~]# passwd hacluster               ##设置hacluster用户密码,主备master必须相同

Changing password for user hacluster.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

主masetr配置 Corosync

hacluster 用户就是做统一的集群管理用的,这里配置corosync就是用到这个用户,配置完成后生成corosync.conf 发送到各个节点上

hacluster负责完成集群中的节点认证:

[root@server1 ~]# pcs cluster auth server1 server5

Username: hacluster         ##输入hacluster 用户
Password:                          ##输入上面设置的密码
server5: Authorized
server1: Authorized

[root@server1 ~]# pcs cluster setup --name mycluster server1 server5   ##创建集群

[root@server1 ~]# pcs cluster start --all                         ##开启集群

[root@server1 ~]# pcs status nodes                             ##查看节点状态

[root@server1 ~]# corosync-cfgtool -s              ##验证corosync是否正常

[root@server1 ~]# pcs status corosync                 ##查看corosync状态

在我们做出任何改变之前,最好检查配置文件:crm_verify -L -V

[root@server1 ~]# pcs property set stonith-enabled=false    ##禁用stonith设备(如果有stonith设备,最好禁用)否则在crm_verify检测的时候会报错

[root@server1 ~]# crm_verify -L -V

 

配置mfsmaster高可用(/)

添加vip

首先要做的是配置一个IP地址,不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择172.25.81.100作为浮动IP,给它取名为 vip并且告诉集群每30秒检查它一次。

[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.81.100 cidr_netmask=32 op monitor interval=30s

 ocf:heartbeat:IPaddr2 这告诉Pacemaker三件事情,第一个部分ocf,指明了这个资源采用的标准(类型)以及在哪能找到 它。第二个部分标明这个资源脚本的在ocf中的名字空间,在这个例子中是heartbeat。最后一个部分指明了资源脚本的名称。

[root@server1 ~]# pcs resource show           ##查看我们已经创建好的资源,一个vip现在已经在server1 上运行

在server1上查看ip:发现vip现在已经在server1 上运行

在server5上实时查看集群状态:

[root@server5 ~]# crm_mon

关闭master查看故障的自动迁移情况:

[root@server1 ~]# pcs cluster stop server1             ##关闭master

通过监控可以看出vip已经自动漂移到了server5上

重新开启刚关闭的master,查看资源:

[root@server1 ~]# pcs cluster start server1

可以看出vip依旧在backup-master上,不会发生资源的抢占

 

存储共享

先恢复环境,写好解析:

客户端(物理机):

[root@foundation81 ~]# umount /mnt/mfs

[root@foundation81 ~]# umount /mnt/mfsmeta

[root@foundation81 ~]# vim /etc/hosts

172.25.81.1     server1  
172.25.81.100   mfsmaster

master端(server1):

[root@server1 ~]# systemctl stop moosefs-master

[root@server1 ~]# vim /etc/hosts

172.25.81.1     server1
172.25.81.100   mfsmaster

backup-master端(server5)

[root@server5 ~]# vim /etc/hosts

172.25.81.1     server1
172.25.81.100   mfsmaster

chunk server端(server3 server4)

[root@server3 ~]# systemctl stop moosefs-chunkserver

[root@server3 ~]# vim /etc/hosts

172.25.81.1     server1
172.25.81.100   mfsmaster

給chunkserver的某一节点(server3)添加一块虚拟磁盘

 

[root@server3 ~]# fdisk -l                 ##查看虚拟磁盘的添加情况

在server3上安装并配置iscsi

[root@server3 ~]# yum install -y targetcli

[root@server3 ~]# systemctl start target

[root@server3 ~]# targetcli

/> cd /backstores/block

/backstores/block> create my_disk1 /dev/vdb

/backstores/block> cd /iscsi

/iscsi> create iqn.2019-04.com.example:server3

/iscsi> cd iqn.2019-04.com.example:server3

/iscsi/iqn.20...ample:server3> cd tpg1/luns

/iscsi/iqn.20...er3/tpg1/luns> create /backstores/block/my_disk1

/iscsi/iqn.20...er3/tpg1/luns> cd ../acls

/iscsi/iqn.20...er3/tpg1/acls> create iqn.2019-04.com.example:client

/> exit

 

在master上安装iscsi客户端软件

[root@server1 ~]# yum install -y iscsi-*

[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2019-04.com.example:client

[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.81.3         ##发现远程设备

[root@server1 ~]# iscsiadm -m node -l                                              ##登录

当有以下报错出现时,可以尝试重启服务重新登录

 

[root@server1 ~]# fdisk -l                                                ##查看远程共享出来的磁盘

[root@server1 ~]# fdisk /dev/sdb                            ##对共享磁盘建立分区

Command (m for help): n

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-41943039, default 2048):
Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): wq

[root@server1 ~]# mkfs.xfs /dev/sdb1                  ##格式化分区


生产环境中一般只对磁盘分一个区,原因是在不小心破坏了该分区时,可以通过简单的操作恢复分区。

模拟分区被破坏的情况:

[root@server1 ~]# dd if=/dev/zero of=/dev/sdb bs=512 count=1           ##清空磁盘的512个字节

 [root@server1 ~]# fdisk -l /dev/sdb      ##fdisk -l查看磁盘发现分区消失了

使用磁盘分区时也报分区不存在的错误

恢复该分区的方法:

因为我们把/dev/sda下的所有空间都分给了/dev/sdb1,所以我们只需要重新建立分区即可,但是需要注意不能对该新建的分区进行格式化,否则会丢失所有的数据。

此时发现该分区可以使用了


 

[root@server1 ~]# mount /dev/sdb1 /mnt

[root@server1 ~]# cp -p /var/lib/mfs/* /mnt/                ##带权限拷贝/var/lib/mfs的所有数据文件到/dev/sdb1上

[root@server1 mnt]# chown mfs.mfs /mnt/                  ##当目录属于mfs用户和组时,才能正常使用

 

[root@server1 /]# umount /mnt/

[root@server1 /]# mount /dev/sdb1 /var/lib/mfs/

[root@server1 /]# systemctl start moosefs-master         ##服务开启成功,就说明数据文件拷贝成功,共享磁盘可以正常使用

[root@server1 /]# systemctl stop moosefs-master

配置backup-master,使之也可以使用共享磁盘

 

[root@server5 ~]# yum install -y iscsi-*

[root@server5 ~]# vim /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2019-04.com.example:client

[root@server5 ~]# iscsiadm -m discovery -t st -p 172.25.81.3

[root@server5 ~]# iscsiadm -m node -l

[root@server5 ~]# fdisk -l                        ##查看该共享磁盘的分区

 

[root@server5 ~]# mount /dev/sdb1 /var/lib/mfs/

[root@server5 ~]# systemctl start moosefs-master               ##同样进行测试

[root@server5 ~]# systemctl stop moosefs-master

 

在master上创建mfs文件系统

[root@server1 /]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s

 

[root@server5 ~]# crm_mon         ##查看监控可以发现两个资源分布在不同的主机上

 

[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min

把vip,mfsdata,mfsd 同步在一个组中

[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd

此时查看监控可以发现所有资源分布在一台主机上

 

[root@server5 ~]# pcs cluster stop server5                   ##down掉当前工作的mster

所有资源会迁移到Online的master上:

[root@server5 ~]# pcs cluster start server5

当master恢复正常后,也不会发生资源的争抢

 

fence解决脑裂问题

(1)先在客户端测试mfsmaster的热备

打开chunkserver服务

[root@server3 ~]# systemctl start moosefs-chunkserver

[root@server4 ~]# systemctl start moosefs-chunkserver

查看当前vip的位置:

在客户端进行分布式存储测试:

[root@foundation81 ~]# mfsmount

测试:

在客户端上传一个大文件,同时关闭正在提供服务的master端,查看客户端上传文件是否能成功。

[root@foundation81 dir1]# dd if=/dev/zero of=file1 bs=1M count=2000

[root@foundation81 ~]# cd /mnt/mfs

[root@foundation81 mfs]# cd dir1/

[root@foundation81 dir1]# dd if=/dev/zero of=file1 bs=1M count=2000

[root@server1 ~]# pcs cluster stop server1

[root@foundation81 dir1]# mfsfileinfo file1          ##查看到文件上传成功,并没有受到影响

通过以上实验我们发现,当master挂掉之后,backup-master会立刻接替master的工作,保证客户端可以进行正常访问,但是,当master重新运行时,我们不能保证master是否会抢回自己的工作,从而导致master和backup-master同时修改同一份数据文件从而发生脑裂,此时fence就派上用场了。

 

 

在两个master节点上安装fence服务

[root@server1 ~]# yum install -y fence-virt

[root@server1 ~]# mkdir /etc/cluster

[root@server5 ~]# yum install -y fence-virt

[root@server5 ~]# mkdir /etc/cluster

在客户端生成一份fence密钥文件,传给服务端

[root@foundation81 ~]# yum install -y fence-virtd fence-virtd-libvirt fence-virtd-multicast

[root@foundation81 ~]# fence_virtd  -c

Module search path [/usr/lib64/fence-virt]:

Listener module [multicast]:

Multicast IP Address [225.0.0.12]:

Multicast IP Port [1229]:

Interface [virbr0]: br0        # 注意此处要修改接口,必须与本机一致

Key File [/etc/cluster/fence_xvm.key]:

Backend module [libvirt]:

Replace /etc/fence_virt.conf with the above [y/N]? y

[root@foundation81 ~]# mkdir /etc/cluster        ##存放密钥文件的目录,需要自己手动建立

[root@foundation81 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1   ##采集随机信息到密钥文件中

[root@foundation81 ~]# systemctl start fence_virtd      ##启动服务

[root@foundation81 ~]# netstat -anultp | grep :1229

将生成的密钥文件传给server1和server5

[root@foundation81 ~]# scp /etc/cluster/fence_xvm.key root@172.25.81.1:/etc/cluster/

[root@foundation81 ~]# scp /etc/cluster/fence_xvm.key root@172.25.81.5:/etc/cluster/

查看主机域名:

 

在master查看监控crm_mon :显示的是主机名(hostname)

 

[root@server1 ~]# cd /etc/cluster/

[root@server1 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="base2:base2;base5:base5" op monitor interval=1min

[root@server1 cluster]# pcs property set stonith-enabled=true

[root@server1 cluster]# crm_verify -L -V

通常fence都运行在当前处于服务状态的master的另一端

 

使server1内核崩溃,模拟当前处于服务端的master服务down掉

[root@server1 ~]# echo c >/proc/sysrq-trigger

查看监控,server5会立刻接管所有服务

 

查看监控发现,server1重启成功之后,并不会抢占资源,服务依旧在server5端正常运行,说明fence生效

 

注意:当服务主机全部关机之后需要先启动iscsi的服务端主机并开启iscsi服务才能启动两台master主机,否则master主机起不来。

[root@server3 ~]# systemctl start target

然后挂载两台master的共享磁盘到/var/lib/mfs目录下就可以正常使用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值