前言
由于能搜索到的资料特别少,参考了许多博客和教程,整理了一版搭建HA MFS的教程,一方面记录自己的收获,另一方面希望可以帮助有需要的人。
简介。
本文介绍如何利用Pacemaker和Corosync搭建高可用(HA)的MFS文件系统。
- 步骤
(1)准备工作
5台虚拟机,OS本文采用centos7。准备一个虚拟IP(VIP)10.119.119.148,作为访问集群服务的IP。
序号 | hostname | IP |
1 | etnode1 | 10.119.119.141 |
2 | etnode2 | 10.119.119.142 |
3 | etchunknode1 | 10.119.119.143 |
4 | etchunknode2 | 10.119.119.144 |
5 | etclientnode1 | 10.119.119.145 |
- 在etnode1、etnode2上面安装moosefs-master,并配置其为高可用。
- 在etchunknode1、etchunknode2上面安装moosefs-chunk,存储文件。
- etclientnode1为客户端,挂载分布式文件系统。
另外划拨一块硬盘或者逻辑盘,留作DRBD同步MooseFS元数据。
/etc/hosts文件如下
(2)安装Pacemaker集群软件
在etnode1和etnode2上面安装Pacemaker集群软件:
#yum install -y pacemaker pcs psmisc policu coreutils-python
注:本教程采用pcs管理集群,也可以采用诸如crmsh工具,语法有所不同。
(3)集群防火墙配置
在etnode1和etnode2上面进行配置:
# firewall-cmd --permanent --add-service=high-availablity
success
# firewall-cmd --reload
success
注:如果使用iptables防火墙,那么需要开发TCP端口2224,3121,21064和UDP端口5405;或者直接关闭防火墙(不推荐)
(4)配置pcs守护进程开机启动
在etnode1和etnode2上面进行配置:
# systemctl start pcsd //启动pcs守护进程
# systemctl enable pcsd //设置其开机启动
注:安装的软件包会创建一个无密码的用户hacluster,该账户在执行同步Corosync配置或者启动/停止其他节点的集群时候需要登录密码。
设置hacluster用户的密码
# passwd hacluster
(5)配置Corosync
- 在etnode1或者etnode2中任一节点执行auth:
[root@etnode1 ~]# pcs cluster auth etnode1 etnode2
Username: hacluster
Password:
etnode1: Authorized
etnode2: Authorized
- 在同一节点使用pcs cluster setup生成并同步Corosync配置:
[root@etnode1 ~] pcs cluster setup --name etcluster etnode1 etnode2
shutting down pacemaker/corosync services...
Redircting to /bin/systeml stop pacemaker.service
Redircting to /bin/systeml stop corosync.service
killing any remaining services...
Removing all cluster configure files...
etnode1: Succeeded
etnode2: Succeeded
(6)启动并验证集群。
[root@etnode1 ~]# pcs cluster start --all
etnode1: Starting cluster...
etnode2: Starting cluster...
(7)验证Corosync安装
[root@etnode1 ~]#corosync-cfgtool -s
然后,检查menbership和quorum APIs:
[root@etnode1 ~]# corosync-cmapctl | grep members
查看集群状态:
[root@etnode1 ~]# pcs status
(8)添加ClusterIP资源(即前述VIP)
[root@etnode1 ~]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=10.119.119.140 cidr_netmask=32 op monitor interval=30s
[root@etnode1 ~]# pcs reource //查看资源
(9)使用DRBD复制存储
在etnode1和etnode2上面
进行配置
:
- 安装drbd
# yun install -y kmod-drbd84 drbd-utils
注:此drbd-utils在centos7.1上有bug,可以通过脚本修复。
让SELinux为drbd放行:
# semanage permissive -a drbd_t
配置防火墙为各自主机开放7789端口:
[root@etnode1 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.119.119.142" port port=7789 protocol="tcp" accept'
[root@etnode1 ~]# firewall-cmd --reload
[root@etnode2 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.119.119.141" port port=7789 protocol="tcp" accept'
[root@etnode2 ~]# firewall-cmd --reload
- 为DRBD分配磁盘空间
drbd在每个节点上都需要自己的块设备,可以是物理磁盘分区,也可以是逻辑卷分区。
# lvcreate --name drbd-et-LV --size 8G etdataVG
物理卷、卷组、逻辑卷信息如下所示:
- 配置DRBD
# cat <<END >/etc/drbd.d/mfsdata.res
resource mfsdata {
protocol C;
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on etnode1 {
disk /dev/etdataVG/drbd-et-LV;
address 10.119.119.141:7789;
}
on etnode2 {
disk /dev/etdataVG/drbd-et-LV;
address 10.119.119.142:7789;
}
}
END
- 初始化DRBD
# drbdadm create-md mfsdata
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
# modprobe drbd
# drbdadm up mfsdata
- brdb设备的集群配置
[root@etnode1 ~]# pcs cluster cib drbd_cfg
[root@etnode1 ~]# pcs -f drbd_cfg resource create MFSData ocf:linbit:drbd drbd_resource=mfsdata op monitor interval=60s
[root@etnode1 ~]# pcs -f drbd_cfg resource master MFSDataClone MFSData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
[root@etnode1 ~]# pcs -f drbd_cfg resource show //查看输出,确认配置是否正确
[root@etnode1 ~]# pcs cluster cib-push drbd_cfg //将修改的配置推送到CIB(也即推送到整个集群)
CIB updated
(10)安装moosefs-master、moosefs-cgi。
在etnode1和etnode2上面
进行配置
:
# curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
# yum update
# yum install moosefs-master //安装mfsmaster
# systemctl disable moosefs-master.service //禁止开机启动
配置mfsmaster,创建MooseFS存放元数据的目录/mfsdata:
# mkdir /mfsdata
# vim /etc/mfs/mfsmaster.cfg
安装moosefs cgi:
# yum install moosefs-cgi
# yum install moosefs-cgiserv
# yum install moosefs-cli
开放防火墙:
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.119.119.0/24" port port="9419-9421" protocol="tcp" accept'
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="9425" protocol="tcp" accept'
编写service脚本,保存为/etc/init.d/mfsmasterctl,设置权限755,脚本内容如下:
#!/bin/sh
#
# mfsmasterctl - this script start and stop the mfs metaserver daemon
#
# chkconfig: 345 91 10
# description: startupscript for mfs metaserver
case "$1" in
start)
mfsmaster start && mfscgiserv start
;;
stop)
mfsmaster stop && mfscgiserv stop
;;
restart)
mfsmaster restart && mfscgiserv restart
;;
status)
mfsmaster test && mfscgiserv test
;;
*)
echo $"Usage: $0 start|stop|restart|status"
exit 1
esac
exit 0
如下图所示:
创建mfsmaster服务的资源,配置如下:
[root@etnode1 ~]# pcs resource create EtMfsMaster lsb:mfsmasterctl op monitor interval=20s timeout=15s on-fail=restart
(11)配置集群存放MFS元数据的文件系统:
[root@etnode1 ~]# pcs cluster cib fs_cfg
[root@etnode1 ~]# pcs -f fs_cfg resource create ETMFS Filesystem device="/dev/drbd1" directory="/mfsdata" fstype="xfs"
[root@etnode1 ~]# pcs -f fs_cfg constraint colocation add ETMFS with MFSDataClone INFINITY with-rsc-role=Master
[root@etnode1 ~]# pcs -f fs_cfg constraint order promote MFSDataClone then start ETMFS
[root@etnode1 ~]# pcs -f fs_cfg constraint colocation add EtMfsMaster with ETMFS INFINITY
[root@etnode1 ~]# pcs -f fs_cfg constraint order ETMFS then EtMfsMaster
[root@etnode1 ~]# pcs -f fs_cfg constraint //查看配置的约束
将配置推送至整个集群:
[root@etnode1 ~]# pcs cluster cib-push fs_cfg
(12)分别在etchunknode1、etchunknode2安装chunkserver
在文件存储服务器chunkserver上面配置MFSmaster的VIP(mfsmaster为hostname,指向的IP为10.119.119.148):
# yum install moosefs-chunkserver
# vim /etc/mfs/mfschunkserver.cfg
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.119.119.0/24" port port="9422" protocol="tcp" accept'
(13)在etclientnode1上面安装客户端
[root@etclientnode1 ~]# yum install moosefs-client
[root@etclientnode1 ~]# mfsmount /mnt/mfs/ -H mfsmaster
(14)启动高可用MFS
启动chunkserver:
在etclientnode1上面挂载MFS:
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)