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

[经验分享] MFS+DRBD+Heartbeat实现MFS master主备切换安装手册

[复制链接]

尚未签到

发表于 2015-9-5 12:54:46 | 显示全部楼层 |阅读模式
1. 内容简介
现在有大量的企业采用共享存储服务器NFS的方式,来对应用数据进行网络存储,但这存在性能瓶颈和单点故障的问题,于是分布式文件存储管理系统MFS开始流行起来。MFS有元数据服务器(mfsmaster)、元数据日志存储服务器(mfsmetalogger)、数据存储服务器(mfschunkserver)、客户端(clients)组成。
目前MFS元数据服务器存在单点问题,因此我们可以通过DRBD提供磁盘及时同步,通过HeartBeat提供Failover,来达到高可用。
相信DRBD大家都有了解过,DRBD(Distributed Replicated Block Device)是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了
2. 系统规划
操作系统:  CentOS 6.4 2.6.32-358.el6.x86_64
主mfsmaster:             10.90.5.132(heartbeat+drbd)   node2
备mfsmaster :            10.90.5.137(heartbeat+drbd)  node7
VIP         :                  10.90.5.139
mfsmetalogger:          10.90.5.133                              node3
mfschunkserver_01    10.90.5.134                            node4
mfschunkserver_02    10.90.5.135                            node5
clients                         10.90.5.136                                 node6
软件版本:
mfs-1.6.11.tar.gz
drbd-8.4.3.tar.gz
ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
Heartbeat-3-0-7e3a82377fa8.tar.bz2
由于主备设置基本一致,这里仅以主mfsmaster进行配置
3. 安装DRBD
3.1. DRBD简介
DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。
DRBD工作机制翻译
Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd 每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。
DRBD协议说明
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
B 收到接收确认就认为完成了写入操作。
C 收到写入确认就认为完成了写入操作。
3.2. 分区并格式化硬盘
然后将刚刚添加的一块硬盘 sdb分区并格式化(步骤略)
[iyunv@node2 ~]# mkdir /data
[iyunv@node2 ~]#mount /dev/sdb1  /data
[iyunv@node2 ~]# sed -i "10a UUID=`blkid /dev/sdb1 | cut -d '"' -f2` /data                   ext4    defaults        0 0" /etc/fstab
(写到/etc/fstab里面,不然重启无效)
添加主机名与IP对应
[iyunv@node2 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.90.5.132   node2
10.90.5.137   node7
[iyunv@node2 ~]# init 6
3.3. 编译安装DRBD
安装依赖软件
[iyunv@node2 ~]# yum  -y  install  kernel-devel   kernel-headers   flex
[iyunv@node2 ~]# tar zxf drbd-8.4.3.tar.gz
[iyunv@node2 ~]#  cd drbd-8.4.3
[iyunv@node2 drbd-8.4.3]# ./configure –prefix=/usr/local/drbd –with-km
注意:–with-km是启用内核模块
[iyunv@node2 ~]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
注意KDIR的路径 (这个内核源码路径需要根据自己的系统修改)
[iyunv@node2 drbd-8.4.3]# make install
[iyunv@node2 ~]# mkdir -p /usr/local/drbd/var/run/drbd
[iyunv@node2 ~]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
[iyunv@node2 ~]# chkconfig –add drbd
[iyunv@node2 ~]# chkconfig drbd on
安装drbd模块
回到刚刚解压drbd的目录,然后
[iyunv@node2 drbd-8.4.3]# cd drbd
[iyunv@node2 drbd]# make clean
[iyunv@node2drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
[iyunv@node2 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[iyunv@node2 drbd]# modprobe drbd
查看模块是否加载成功
[iyunv@node2 drbd]# lsmod | grep drbd
drbd                  325626  4
libcrc32c               1246  1 drbd
3.4. 修改配置文件
查看drbd的主配置文件
[iyunv@node2 etc]# pwd
/usr/local/drbd/etc
[iyunv@node2 etc]# cat drbd.conf
# You can find an example in /usr/share/doc/drbd…/drbd.conf.example
include “drbd.d/global_common.conf”;
include “drbd.d/*.res”;

由此可见:主配置文件里面已经包含了全局配置文件和drbd目录下以.res结尾的文件
修改全局配置文件:
[iyunv@node2 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[iyunv@node2 drbd.d]# cp global_common.conf global_common.conf_bak(备份配置文件)
配置文件内容如下:
[iyunv@node2 drbd.d]# cat global_common.conf
global {
usage-count yes; #是否参加drbd的使用者统计,默认此选项为yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用drbd的同步协议
handlers {
        # These are EXAMPLE handlers only.
        # They may have severe implications,
        # like hard resetting the node under certain circumstances.
        # Be careful when chosing your poison.
        pri-on-incon-degr “/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;
        pri-lost-after-sb “/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;
        local-io-error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”;
        # fence-peer “/usr/lib/drbd/crm-fence-peer.sh”;
        # split-brain “/usr/lib/drbd/notify-split-brain.sh root”;
        # out-of-sync “/usr/lib/drbd/notify-out-of-sync.sh root”;
        # before-resync-target “/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 — -c 16k”;
        # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
    }
    startup {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
    }
    options {
        # cpu-mask on-no-data-accessible
    }
    disk {
                on-io-error detach; #配置I/O错误处理策略为分离
        # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
        # disk-drain md-flushes resync-rate resync-after al-extents
                # c-plan-ahead c-delay-target c-fill-target c-max-rate
                # c-min-rate disk-timeout
    }
    net {
        # protocol timeout max-epoch-size max-buffers unplug-watermark
        # connect-int ping-int sndbuf-size rcvbuf-size ko-count
        # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
        # after-sb-1pri after-sb-2pri always-asbp rr-conflict
        # ping-timeout data-integrity-alg tcp-cork on-congestion
        # congestion-fill congestion-extents csums-alg verify-alg
        # use-rle
    }
      syncer {
              rate 1024M; #设置主备节点同步时的网络速率
}
}
##########################资源配置文件配置如下  需自己新建####################
[iyunv@node2 ~]# vim /usr/local/drbd/etc/drbd.d/drbd.res
resource  r1 {  #这个r1是定义资源的名字
          on  node2 {            #on开头,后面是主机名称
          device    /dev/drbd0;  #drbd设备名称
          disk      /dev/sdb1;  #drbd0使用的磁盘分区为sdb1
          address  10.90.5.132:7789; #设置drbd监听地址与端口
          meta-disk  internal;
      }
          on  node7 {            #on开头,后面是主机名称
          device    /dev/drbd0;  #drbd设备名称
          disk      /dev/sdb1;  #drbd0使用的磁盘分区为sdb1
          address  10.90.5.137:7789; #设置drbd监听地址与端口
          meta-disk  internal;
      }
}
#####################################################################
3.5. 启动DRBD
清理磁盘
[iyunv@node2 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1;sync
启动服务
[iyunv@node2 ~]# service drbd start
在node2上初始化资源
[iyunv@node2 ~]# drbdadm create-md r1
(node7 drbd配置与node2完全相同,不再赘述)
将node2设置为drbd的主服务
[iyunv@node2 ~]# drbdadm primary --force r1
查看主服务设置
[iyunv@node2 ~]# drbdadm role r1
Primary/Secondary
查看drbd监听端口:
[[iyunv@node2 ~]# netstat -anput|grep 7789
tcp        0      0 10.90.5.132:43886           10.90.5.137:7789            ESTABLISHED -                  
tcp        0      0 10.90.5.132:7789            10.90.5.137:51341           ESTABLISHED -   
查看连接状况
[iyunv@node2 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@node2, 2014-07-10 15:52:19
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:12820 nr:9004 dw:21816 dr:27674 al:14 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

4. 安装Heartbeat
4.1 最小化(mininal )安装系统,完成后安装gcc编译器及依赖的软件包
[iyunv@node2 ~]# yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-develmake wget docbook-dtds docbook-style-xsl
4.2  添加 Haclient 组和 Hacluster 账户
[iyunv@node2 ~]# groupadd haclient
[iyunv@node2 ~]# useradd -g haclient hacluster -M -s /sbin/nologin
4.3. 编译安装软件   Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
[iyunv@node2 ~]# mkdir -p /usr/local/heartbeat
[iyunv@node2 ~]# mkdir -p /etc/heartbeat
[iyunv@node2 ~]# tar xvf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
[iyunv@node2 ~]#cd  Reusable-Cluster-Components-glue—glue-1.0.9
[iyunv@node2 Reusable-Cluster-Components-glue--glue-1.0.9]# ./autogen.sh
[iyunv@node2 Reusable-Cluster-Components-glue--glue-1.0.9]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
[iyunv@node2 Reusable-Cluster-Components-glue--glue-1.0.9]# make && make install
* 32位环境需要将配置参数中的lib64 更改为 lib
* 安装过程中会从 sourceforge 下载一些文件,如果速度慢,需要检查网络是否畅通,以及 docbook-dtds docbook-style-xsl 两个rpm包是否安装
4.4. 编译安装软件   ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
[iyunv@node2 ~]#tar xvf  ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
[iyunv@node2 ~]# cd ClusterLabs-resource-agents-b735277/
[iyunv@node2 ClusterLabs-resource-agents-b735277]# ./autogen.sh
[iyunv@node2 ClusterLabs-resource-agents-b735277]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat libdir=/usr/local/heartbeat/lib64 CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
解决依赖函数库
ln -s /usr/local/heartbeat/lib64/* /lib64/
make && make install
4.5. 编译安装软件   Heartbeat-3-0-7e3a82377fa8.tar.bz2
[iyunv@node2 ~]# tar xvf Heartbeat-3-0-7e3a82377fa8.tar.bz2
[iyunv@node2 ~]# cd Heartbeat-3-0-7e3a82377fa8
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]# ./bootstrap
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]# ./configure --prefix=/usr/local/heartbeat --sysconfdir=/etc/heartbeat CFLAGS=-I/usr/local/heartbeat/include LDFLAGS=-L/usr/local/heartbeat/lib64 LIBS='/lib64/libuuid.so.1'
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]# sed -i '105d' /usr/local/heartbeat/include/heartbeat/glue_config.h
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]# make && make install
4.6. 修改配置文件
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/ha.cf /etc/heartbeat/ha.d/
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/haresources /etc/heartbeat/ha.d/
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/authkeys /etc/heartbeat/ha.d/
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#chkconfig --add heartbeat
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#chkconfig heartbeat on
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#chmod 600 /etc/heartbeat/ha.d/authkeys
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/shellfuncs
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/resource.d/hto-mapfuncs
[iyunv@node2 Heartbeat-3-0-7e3a82377fa8]#sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs
建立Resource-Agent 的脚本软连接,避免Heartbeat 找不到路径而无法工作
ln -s /usr/local/heartbeat/usr/lib/ocf /usr/lib/ocf
4.7. 修改配置文件 ha.cf
debugfile /var/log/ha-debug
# 用于记录heartbeat的调试信息
logfile /var/log/ha-log
# 用于记录heartbeat的日志信息
logfacility     local0
keepalive 2
# 设置心跳间隔
deadtime 30
# 在30秒后宣布节点死亡
warntime 10
# 在日志中发出“late heartbeat“警告之前等待的时间,单位为秒
initdead 120
# 网络启动时间
udpport 694
# 广播/单播通讯使用的udp端口
bcast   eth0  
# 使用网卡heartbeat,并在eth0接口上使用广播heartbeat
ucast eth0 10.90.5.137
watchdog /dev/watchdog
# 该指令是用于设置看门狗定时器,如果节点一分钟内都没有心跳,那么节点将重新启动
auto_failback off
# 当主节点从故障中恢复时,将不会自动切换到主节点
node    node2
node    node7
# 集群中机器的主机名,与“uname –n”的输出相同。
ping 10.90.5.254
# ping 网关或路由器来检测链路正常
respawn hacluster /usr/local/heartbeat/lib64/heartbeat/ipfail
# respawn调用/usr/lib/heartbeat/ipfail来主动进行切换
apiauth ipfail gid=haclient uid=hacluster
# 设置启动ipfail的用户和组
4.8. 编辑资源文件
[iyunv@node2 ~]# vim /etc/heartbeat/ha.d/haresources
node2 initdrbd mfsmaster 10.90.5.139
这个文件中各字段的功能说明:
第一个字段:是主机名,是uname -a得到的
第二个字段:作用是执行当前的脚本命令此脚本可以定义在/etc/init.d/或/etc/ha.d/resource.d,此处我定义了一个名叫Initdrbd 的脚本命令,具体的见下面演示。
第三个字段:作用定义启动mfsmaster进程,必须在/etc/init.d/或/etc/ha.d/resource.d能找到的可执行的脚本文件。
第四个字段:作用是启动虚拟IP
[iyunv@node2 ~]# vim /etc/init.d/initdrbd
#!/bin/sh
unset LC_ALL; export LC_ALL
unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case "$1" in
'start' )
   drbdadm primary r1
   mount /dev/drbd0 /usr/local/mfs/
     ;;
'stop')
   umount /usr/local/mfs
   drbdadm  secondary r1
   ;;
'restart')
    ;;
*)
       echo "Usage: $0 { start |  stop | restart }"
    ;;
esac
exit 0
4.10. 配置验证密钥
[iyunv@node2 ~]# echo "auth 1 " >> etc/heartbeat/ha.d/authkeys
[iyunv@node2 ~]# echo "1 crc " >> etc/heartbeat/ha.d/authkeys
[iyunv@node2 ~]# chmod 600 /etc/heartbeat/ha.d/authkeys

运维网声明 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.yunweiku.com/thread-109747-1-1.html 上篇帖子: 虚拟化--060 vsphere-vmfs5分区恢复 下篇帖子: CentOS 6 下安装 MooseFS 2.0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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