设为首页 收藏本站
查看: 1886|回复: 0

[经验分享] DRBD+corosync+pacemaker实现MFS高可用

[复制链接]

尚未签到

发表于 2017-10-30 14:08:06 | 显示全部楼层 |阅读模式
随着分布式、大数据的不断发展,很多时候大家会感觉大数据离自己很远,其实大数据就是我们身边。那我们心目中的大数据到底是什么样的呢,分布式、容错、大容量?    在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展、高效、部署、实施方便快捷的分布式存储供我们使用呢?那我们来看一下MFS基本可以满足我们的需求。

    MogileFS是一种分布式文件存储系统。可支持文件自动备份的功能,提高可用性和高扩展性。MogileFS不支持对一个文件内部的随机或顺序读写,因此只适合做一部分应用,如图片服务,静态HTML服务、文件服务器等,这些应用在文件写入后基本上不需要对文件进行修改,但是可以生成一个新的文件覆盖原有文件。

    分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文件系统的实际基于客户机/服务器模式。

    目前常见的分布式文件系统有很多种,例如我之前一篇文章里面提到的Hadoop、FastDFS、Moosefs、PNFS(Parallel NFS)、Lustre、TFS、GFS、HDFS等等一系列。在众多的分布式文件系统解决方案中,MFS是搭建比较简单、使用起来也不需要过多的修改web程序,非常方便。那今天我们使用SHELL脚本来部署MFS。


Moosefs的优势
1) 通用文件系统,不需要修改上层应用就可以使用
2) 可以在线扩容,体系架构可伸缩性极强
3) 部署简单
4) 体系架构高可用,单独一台机器出问题不会影响整体性能
5) 文件对象高可用,可设置任意的文件冗余程度
6) 提供Windows回收站的功能
7) 提供netapp,emc,ibm等商业存储的snapshot特性
8) google filesystem的一个c实现
9) 提供web gui监控接口
10) 提高随机读或写的效率
11) 提高海量小文件的读写效率

MFS系统组成部分
    1、元数据服务器:在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。
    2、数据存储服务器:chunkserver,真正存储用户数据的服务器,存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制,数据服务器可以是多个,并且数量越多,可使用的"磁盘空间"越小,可靠性也越高。
    3、客户端:使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。
    4.元数据日志服务器:负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作。

一、实验环境

系统版本: centos7
软件源:阿里云
mfsmaster(node1)                IP:192.168.163.180
mfsbackup(node2)               IP:192.168.163.182
mfschunkserver_1(node3)    IP:192.168.163.183
mfschunkserver_2(node4)    IP:192.168.163.184
mfsclient(node5)                  IP:192.168.163.165
VIP:192.168.163.111

实验拓扑如下
16a700ad1592a7f92c7f15f3b9ff0365.jpg-wh_500x0-wm_3-wmp_4-s_1591108361.jpg

二、实验过程

    我们为了达到MFS服务的高可用,必须将mfsmaster编译安装在drbd资源上,所以,得先创建一个DRBD,创建DRBD的操作在之前提及过,就不再详细说明,下面是我的另一搭建DRBD的博文的链接:

DRBD搭建

    接下来,就是MFS文件系统的搭建过程,由于MFS的包只有一个,各种服务的不同只需在编译安装的时候来定义,这就十分方便了。

先来安装mfsmaster
上传mfs软件包并解压
[iyunv@node1 ~]# cd /usr/local/src/
[iyunv@node1 src]# tar xf v3.0.96.tar.gz

在安装之前先创建一个 uid 和 gid 一致的用户 mfs,我的都是1002
[iyunv@node1 ~]# id mfs
uid=1002(mfs) gid=1002(mfs) groups=1002(mfs)

挂载drbd,并在其上进行编译安装
[iyunv@node1 ~]# mkdir /usr/local/mfs
[iyunv@node1 ~]# chown mfs:mfs /usr/local/mfs
[iyunv@node1 ~]# mount /dev/drbd1 /usr/local/mfs
[iyunv@node1 ~]# cd /usr/local/src/moosefs-3.0.96/
[iyunv@node1 moosefs-3.0.96]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

配置master
[iyunv@node1 ~]# cd /usr/local/mfs/etc/mfs

都是sample文件,我们要命名成.cfg文件:
[iyunv@node1 mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[iyunv@node1 mfs]# cp mfsmaster.cfg.sample  mfsmaster.cfg

修改控制文件
vim mfsexports.cfg

*            /         rw,alldirs,maproot=0
*            .          rw

开启元数据文件默认是empty文件,需要我们手工打开
[iyunv@node1 mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

启动master,由于需要结合corosync,我们需要做一个mfsmaster 的 systemd 启动脚本[iyunv@node1 ~]# cat /etc/systemd/system/mfsmaster.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=mfs
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmaster start
ExecStop=/usr/local/mfs/sbin/mfsmaster stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target





=============================================================
安装mfsbackup,只需要创建文件夹以及启动脚本,uid与gid一致的用户mfs
[iyunv@node2 ~]# id mfs
uid=1002(mfs) gid=1002(mfs) groups=1002(mfs)
[iyunv@node2 ~]# mkdir /usr/local/mfs/
[iyunv@node2 ~]# chown mfs:mfs /usr/local/mfs
[iyunv@node2 ~]# cat /etc/systemd/system/mfsmaster.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=mfs
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmaster start
ExecStop=/usr/local/mfs/sbin/mfsmaster stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target





=============================================================
安装check servers
[iyunv@node3 ~]# useradd mfs
[iyunv@node3 ~]# yum install zlib-devel -y
[iyunv@node3 ~]# cd /usr/local/src/
[iyunv@node3 src]# tar zxvf v3.0.96.tar.gz
[iyunv@node3 moosefs-3.0.96]# ./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs  --disable-mfsmaster --disable-mfsmount  
[iyunv@node3 moosefs-3.0.96]# make && make install

配置checkserver
[iyunv@node3 moosefs-3.0.96]# cd /usr/local/mfs/etc/mfs/
[iyunv@node3 mfs]# mv mfschunkserver.cfg.sample mfschunkserver.cfg
[iyunv@node3 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.163.111 #这里指定的是VIP

配置共享出去的目录

[iyunv@node3 mfs]# cp /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg
[iyunv@node3 mfs]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg

/mfsdata #在其中添加你要共享的目录

另一台check server也进行同样的配置

===========================================================
在客户端安装FUSE:
[iyunv@node5 mfs]# lsmod|grep fuse
[iyunv@node5 mfs]# yum install fuse fuse-devel
[iyunv@node5 ~]# modprobe fuse
[iyunv@node5 ~]# lsmod | grep fuse
fuse                   87741  5

安装挂载客户端
[iyunv@node5 ~]# yum install zlib-devel -y
[iyunv@node5 ~]# useradd mfs
[iyunv@node5 src]# tar -zxvf v3.0.96.tar.gz
[iyunv@node5 src]# cd moosefs-3.0.96/
[iyunv@node5 moosefs-3.0.96]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[iyunv@node5 moosefs-3.0.96]# make && make install

在客户端上挂载文件系统,先创建挂载目录
[iyunv@node5 moosefs-3.0.96]# mkdir /mfsdata
[iyunv@node5 moosefs-3.0.96]# chown -R mfs:mfs /mfsdata/

============================================================
接下来使用crm来管理,具体安装过程看我之前的博文
pacemaker+corosync(基于crm)


贴出我的configure配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
node 1: node1 \
        attributes standby=off
node 2: node2 \
        attributes standby=off
primitive mfs systemd:mfsmaster \
        op monitor timeout=100 interval=30 \
        op start timeout=100 interval=0 \
        op stop timeout=100 interval=0 \
        meta target-role=Started
primitive mfs_drbd ocf:linbit:drbd \
        params drbd_resource=mfs \
        op monitor role=Master interval=10 timeout=20 \
        op monitor role=Slave interval=20 timeout=20 \
        op start timeout=240 interval=0 \
        op stop timeout=100 interval=0
primitive mystore Filesystem \
        params device="/dev/drbd1" directory="/usr/local/mfs" fstype=ext4 \
        op start timeout=60 interval=0 \
        op stop timeout=60 interval=0 \
        meta target-role=Started
primitive vip IPaddr \
        params ip=192.168.163.111 \
        meta target-role=Started
ms ms_mfs_drbd mfs_drbd \
        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true target-role=Started
colocation mfs_with_mystore inf: mfs mystore
order ms_mfs_drbd_after_mystore Mandatory: ms_mfs_drbd:promote mystore:start
colocation ms_mfs_drbd_with_mystore inf: mystore ms_mfs_drbd
order mystore_after_mfs Mandatory: mystore mfs
colocation vip_with_mfs inf: vip mfs
property cib-bootstrap-options: \
        stonith-enabled=false \
        have-watchdog=false \
        dc-version=1.1.16-12.el7_4.4-94ff4df \
        cluster-infrastructure=corosync \
        cluster-name=mycluster





启动整个集群,查看状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
crm(live)# status
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Fri Oct 27 06:26:24 2017
Last change: Fri Oct 27 06:24:20 2017 by root via crm_attribute on node2

2 nodes configured
5 resources configured

Online: [ node1 node2 ]

Full list of resources:

Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ node1 ]
     Slaves: [ node2 ]
mystore   (ocf::heartbeat:Filesystem):    Started node1
mfs   (systemd:mfsmaster):    Started node1
vip   (ocf::heartbeat:IPaddr):    Started node1




=========================================================

三、验证实验


先来看看drbd有没有自动挂载

[iyunv@node1 local]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   17G  1.7G   16G  10% /
devtmpfs             902M     0  902M   0% /dev
tmpfs                912M   39M  874M   5% /dev/shm
tmpfs                912M   32M  881M   4% /run
tmpfs                912M     0  912M   0% /sys/fs/cgroup
/dev/sda1           1014M  185M  830M  19% /boot
tmpfs                183M     0  183M   0% /run/user/0
/dev/drbd1           4.8G   28M  4.6G   1% /usr/local/mfs

查看VIP
[iyunv@node1 local]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3a:22:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.163.180/24 brd 192.168.163.255 scope global dynamic ens32
       valid_lft 1461sec preferred_lft 1461sec
    inet 192.168.163.111/24 brd 192.168.163.255 scope global secondary ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3a:22fb/64 scope link
       valid_lft forever preferred_lft forever

查看mfsmaster服务状态


[iyunv@node1 local]# systemctl status mfsmaster
● mfsmaster.service - Cluster Controlled mfsmaster
   Loaded: loaded (/etc/systemd/system/mfsmaster.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/system/mfsmaster.service.d
           └─50-pacemaker.conf
   Active: active (running) since Fri 2017-10-27 06:23:02 EDT; 6min ago
  Process: 83567 ExecStart=/usr/local/mfs/sbin/mfsmaster start (code=exited, status=0/SUCCESS)
Main PID: 83569 (mfsmaster)
   CGroup: /system.slice/mfsmaster.service
           └─83569 /usr/local/mfs/sbin/mfsmaster start

在客户端进行挂载
[iyunv@node5 ~]# mkdir /mfs_test
[iyunv@node5 ~]# /usr/local/mfs/bin/mfsmount -H 192.168.163.111 /mfs_test
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

查看挂载情况

[iyunv@node5 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/cl-root    17G  1.5G   16G   9% /
devtmpfs              901M     0  901M   0% /dev
tmpfs                 912M     0  912M   0% /dev/shm
tmpfs                 912M   20M  892M   3% /run
tmpfs                 912M     0  912M   0% /sys/fs/cgroup
/dev/sda1            1014M  139M  876M  14% /boot
tmpfs                 183M     0  183M   0% /run/user/0
192.168.163.111:9421   34G  3.4G   31G  10% /mfs_test

尝试写入数据
[iyunv@localhost ~]# cd /mfs_test/
[iyunv@localhost mfs_test]# echo "node1" > xhk1
[iyunv@localhost mfs_test]# cat xhk1
node1

============================================================
接下来,模拟mfsmaster 故障,看看服务能否转移并正常运行
[iyunv@node1 local]# crm
crm(live)# node standby
crm(live)# status
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Fri Oct 27 06:36:30 2017
Last change: Fri Oct 27 06:36:29 2017 by root via crm_attribute on node1

2 nodes configured
5 resources configured

Node node1: standby
Online: [ node2 ]

Full list of resources:

Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ node1 ]
     Slaves: [ node2 ]
mystore(ocf::heartbeat:Filesystem):Started node1
mfs(systemd:mfsmaster):Started node1
vip(ocf::heartbeat:IPaddr):Stopped

再次查看

crm(live)# status
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Fri Oct 27 06:36:37 2017
Last change: Fri Oct 27 06:36:29 2017 by root via crm_attribute on node1

2 nodes configured
5 resources configured

Node node1: standby
Online: [ node2 ]

Full list of resources:

Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ node2 ]
     Stopped: [ node1 ]
mystore(ocf::heartbeat:Filesystem):Started node2
mfs(systemd:mfsmaster):Started node2
vip(ocf::heartbeat:IPaddr):Started node2

可以看到,服务自动转移到node2上

接下来,在客户机查看挂载能不能用

[iyunv@localhost mfs_test]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/cl-root    17G  1.5G   16G   9% /
devtmpfs              901M     0  901M   0% /dev
tmpfs                 912M     0  912M   0% /dev/shm
tmpfs                 912M   20M  892M   3% /run
tmpfs                 912M     0  912M   0% /sys/fs/cgroup
/dev/sda1            1014M  139M  876M  14% /boot
tmpfs                 183M     0  183M   0% /run/user/0
192.168.163.111:9421   34G  3.4G   31G  10% /mfs_test
[iyunv@localhost mfs_test]# ls
xhk1
[iyunv@localhost mfs_test]# cat xhk1
node1
[iyunv@localhost mfs_test]# echo "node2" > xhk2
[iyunv@localhost mfs_test]# cat xhk2
node2

正常使用,实验成功!!!!!!!!!!!

    当那台故障机子已经修不了的情况下,我们则不得不加入一台新的机子,而新的机子的配置和环境并不和之前的完全一样,无法加入这个高可用集群。这时候,我们就需要对这些集群的配置和环境进行备份。这样,即使是坏掉的机子回不来,我们也可以导入配置文件,来使新的自己能够加入这个高可用集群。

==========================================================
排错过程

出现drbd Unknown   
解决:重新初始化元数据
[iyunv@node1 ~]# drbdadm create-md mfs

无法使用system来启动 mfsmaster 服务
解决:先使用编译时的启动脚本
[iyunv@node1 ~]# /usr/local/mfs/sbin/mfs/mfsmaster -a
[iyunv@node1 ~]# /usr/local/mfs/sbin/mfs/mfsmaster stop
[iyunv@node1 ~]# system start mfsmaster



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-406223-1-1.html 上篇帖子: 基于corosync和pacemaker+drbd实现mfs高可用 下篇帖子: mfs分布式系统从理论简介到实战部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表