MFS+DRBD+Heartbeat实现MFS master主备切换安装手册

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协议说明
数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
收到接收确认就认为完成了写入操作。
收到写入确认就认为完成了写入操作。 

3.2. 分区并格式化硬盘

然后将刚刚添加的一块硬盘 sdb分区并格式化(步骤略)
[root@node2 ]# mkdir /data
[root@node2 ]#mount /dev/sdb1  /data

[root@node2 ]# sed -i "10a UUID=`blkid /dev/sdb1 | cut -d '"' -f2` /data                   ext4    defaults        0 0" /etc/fstab

(写到/etc/fstab里面,不然重启无效)

添加主机名与IP对应

[root@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
[root@node2 ~]# init 6

3.3. 编译安装DRBD

安装依赖软件

[root@node2 ]# yum  -y  install  kernel-devel   kernel-headers   flex

[root@node2 ]# tar zxf drbd-8.4.3.tar.gz
[root@node2 ]#  cd drbd-8.4.3
[root@node2 drbd-8.4.3]# ./configure –prefix=/usr/local/drbd –with-km

注意:–with-km是启用内核模块
[root@node2 ~]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
注意KDIR的路径 (这个内核源码路径需要根据自己的系统修改)
[root@node2 drbd-8.4.3]# make install
[root@node2 ~]# mkdir -p /usr/local/drbd/var/run/drbd
[root@node2 ~]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
[root@node2 ~]# chkconfig –add drbd
[root@node2 ~]# chkconfig drbd on
安装drbd模块
回到刚刚解压drbd的目录,然后
[root@node2 drbd-8.4.3]# cd drbd
[root@node2 drbd]# make clean
[root@node2drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
[root@node2 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@node2 drbd]# modprobe drbd
查看模块是否加载成功
[root@node2 drbd]# lsmod | grep drbd

drbd                  325626  4

libcrc32c               1246  1 drbd

3.4. 修改配置文件

查看drbd的主配置文件
[root@node2 etc]# pwd
/usr/local/drbd/etc
[root@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结尾的文件 
修改全局配置文件:
[root@node2 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[root@node2 drbd.d]# cp global_common.conf global_common.conf_bak(备份配置文件)
配置文件内容如下:
[root@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; #设置主备节点同步时的网络速率 


##########################资源配置文件配置如下  需自己新建#################### 
[root@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

清理磁盘

[root@node2 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1;sync

启动服务 
[root@node2 ~]# service drbd start 

在node2上初始化资源 
[root@node2 ~]# drbdadm create-md r1 

(node7 drbd配置与node2完全相同,不再赘述)

将node2设置为drbd的主服务

[root@node2 ~]# drbdadm primary --force r1 

查看主服务设置

[root@node2 ~]# drbdadm role r1

Primary/Secondary 

查看drbd监听端口: 
[[root@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 -    

查看连接状况

[root@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编译器及依赖的软件包

[root@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 账户

[root@node2 ~]# groupadd haclient

[root@node2 ~]# useradd -g haclient hacluster -M -s /sbin/nologin

4.3. 编译安装软件   Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

[root@node2 ~]# mkdir -p /usr/local/heartbeat

[root@node2 ~]# mkdir -p /etc/heartbeat

[root@node2 ~]# tar xvf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

[root@node2 ~]#cd  Reusable-Cluster-Components-glue—glue-1.0.9

[root@node2 Reusable-Cluster-Components-glue--glue-1.0.9]# ./autogen.sh

[root@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'

[root@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

[root@node2 ~]#tar xvf  ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz

[root@node2 ~]# cd ClusterLabs-resource-agents-b735277/

[root@node2 ClusterLabs-resource-agents-b735277]# ./autogen.sh

[root@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

[root@node2 ~]# tar xvf Heartbeat-3-0-7e3a82377fa8.tar.bz2

[root@node2 ~]# cd Heartbeat-3-0-7e3a82377fa8

[root@node2 Heartbeat-3-0-7e3a82377fa8]# ./bootstrap

[root@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'

[root@node2 Heartbeat-3-0-7e3a82377fa8]# sed -i '105d' /usr/local/heartbeat/include/heartbeat/glue_config.h

[root@node2 Heartbeat-3-0-7e3a82377fa8]# make && make install

4.6. 修改配置文件

[root@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/ha.cf /etc/heartbeat/ha.d/

[root@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/haresources /etc/heartbeat/ha.d/

[root@node2 Heartbeat-3-0-7e3a82377fa8]#cp doc/authkeys /etc/heartbeat/ha.d/

[root@node2 Heartbeat-3-0-7e3a82377fa8]#chkconfig --add heartbeat

[root@node2 Heartbeat-3-0-7e3a82377fa8]#chkconfig heartbeat on

[root@node2 Heartbeat-3-0-7e3a82377fa8]#chmod 600 /etc/heartbeat/ha.d/authkeys

[root@node2 Heartbeat-3-0-7e3a82377fa8]#sed -i 's#/usr/lib/ocf#/usr/local/heartbeat/usr/lib/ocf#g' /etc/heartbeat/ha.d/shellfuncs

[root@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

[root@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. 编辑资源文件

[root@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

[root@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. 配置验证密钥

[root@node2 ~]# echo "auth 1 " >> etc/heartbeat/ha.d/authkeys

[root@node2 ~]# echo "1 crc " >> etc/heartbeat/ha.d/authkeys

[root@node2 ~]# chmod 600 /etc/heartbeat/ha.d/authkeys

转载于:https://www.cnblogs.com/wangqy/p/3890043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值