分布式文件mfs 高可用集群

第一 解决moosefs 中的元数据(mfsmaster)单点故障

   1 所需要的软件包如下

           drbd-8.3.10.tar.gz 

           heartbeat-2.0.7.tar.gz  

           libnet-1.1.2.1.tar.gz  

           mfs-1.6.20-2.tar.gz

      2 用到heartbeat 来进行心跳探测主从节点,判断其主机是否存活

      3 对moosefs元数据(mfsmaster)的运行状态监控,在对moosefs元数据(mfsmaster)的状态监控是用shell 脚本 ,当mfsmaster 处于stoped 状态时,会自动关闭heartbeat    

        并进行主从切换

      4 为保证数据的实时同步是用DRBD(磁盘镜像技术)

第二  在配置其drbd主从节点,对其系统资源的要求

    1 在配置磁盘镜像的同步磁盘必须是一个独立的磁盘分区(不能和系统磁盘在同一个分区)或者是独立的磁盘,

    2 对drbd的主从节点上进行数据同步的网卡接口必须保证其网络的高可用性,如果在主从节点之间不能正常探测到对方主机,drbd会出现split brain 现象,从而导致         drbd的主从节点不能进行数据的正常同步

第三,安装drbd

    1 drbd 的安装

         #tar xvf drbd-8.3.10.tar.gz 

         #cd  drbd-8.3.10

         #./configure  --with-km  --prefix=/usr --sysconfdir=/etc --localstatedir=/var

         #make && make install

         #modprobe  drbd  

    2 drbd 的配置

      #vim  /etc/drbd.d/global_common.conf

     global {

usage-count yes;

       }

      common {    

syncer {

# rate after al-extents use-rle cpu-mask verify-alg csums-alg

                 rate 100M;

                 al-extents 257;

}

      }

    resource mfs {

         #使用的协议,收到写入确认就认为完成写操作

protocol C; 

disk {

                on-io-error detach;

                #同步磁盘的大小,建议如果同步的磁盘大小不相同,请在该处设置最小的磁盘大小

                size 100G;  

  }                                                                                                                                                       net {

        after-sb-0pri disconnect;

                 rr-conflict disconnect;

             }

syncer {

                #同步速率

                 rate 100M;

                 al-extents 257;

}

      on mfsmaster {

               #drbd的设备

               device /dev/drbd0;

               #同步的磁盘

               disk  /dev/sdb1;

               #server IP 地址,及其端口

               address 10.10.1.1:7788;

               meta-disk  internal;

              }

      on mfsback {

             device /dev/drbd0;

             disk  /dev/sdb1;

             address 10.10.1.2:7788;

             meta-disk  internal;

            }

       }

    3  在主次节点上分别启动drbd

      #service  drbd  start

      #drbdadm  create-md   resource 注:resource 为资源名称

      #mkfs.ext3 /dev/drbd0

    4 在主节点上执行下面命令

     #drbdsetup  /dev/drbd0  primary –o

     #mount  /dev/drbd0  /mfsdata

第四 安装moosefs ,一定要安装在drbd的挂载的目录下面

    1 创建用户 

      #useradd  -s  /sbin/nologin mfs

    2 安装mfs

      #tar xvf mfs-1.6.20-2.tar.gz

      #cd  mfs-1.6.20-2

      # ./configure --prefix=/mfsdata/mfs --disable-mfschunkserver --disable-mfsmount --with-default-user=mfs --with-default-group=mfs

      #make  && make install     

    3 配置mfs服务

        #cd /mfsdata/mfs/etc

        #cp  mfsexport.cfg.dist  mfsexprot.cfg 

        #cp mfsmaster.cfg.dist   mfsmaster.cfg

        #cd  ../var/mfs/

        #cp  metadata.mfs.empty  metadata.mfs

    4 启动mfsmaster 即元数据服务器

        #/mfsdata/mfs/sbin/mfsmaster  start    

第五 安装heartbeat,并进行整合heartbeat和drbd,moosefs 启动脚本

      1 监控moosefs 元数据的运行状态的脚本

         #!/bin/bash

         #By Frank

         ##monitor mfs status

        STATUS="`/etc/init.d/heartbeat  status | awk '{print $1,$2}'`"

        OK="heartbeat OK"

       while true 

         do

           if [ -d /mfsdata/mfs -a ! -f /mfsdata/mfs/var/mfs/metadata.mfs.back ]

                then

                #  echo "`date +%y-%m-%d-%H:%M:%S`: $STATUS " >>monitormfsd.log

                   if [ "$STATUS"="$OK" ]

                        then

                           /etc/init.d/heartbeat stop   >>/dev/null 2>&1

                             break

                       fi

              else

                 continue

            fi

        done  &

    

      2 创建moosefs元数据启动脚本

           #vim  mfsd         

             #!/bin/bash 

             #By Frank

             ##mfsmaster start shell

            #chkconfig: 2345 99 10 

            #description:mfsd start

 

          . /etc/rc.d/init.d/functions

           ## start mfs service

   start() {

            /mfsdata/mfs/sbin/mfsmaster -c /mfsdata/mfs/etc/mfsmaster.cfg

            /bin/sleep  2

            /bin/bash   /etc/ha.d/resource.d/monitormfsd >>/dev/null 2>&1

            }

   stop() {

 

            PID=`/bin/ps -ef |/bin/grep monitormfsd | /bin/grep -v grep  |/bin/awk  '{print $2}'`

             /bin/kill  -9 $PID >>/dev/null 2>&1

             /bin/sleep  5

             /mfsdata/mfs/sbin/mfsmaster stop

          }

  

  case "$1"  in

            start )

                 start

                 ;;

              stop )

                    stop

                  ;;

                 * )

                   echo "Usage: $0 start|stop"     

                   exit 0

    esac

 

  

   4 整合drbd heartbeat moosefs元数据服务器(mfsmaster),注意的是,当主节点出现故障恢复正常是不让其自动收回资源,因为drbd易出现split    

      brain 现象

       #vim  /etc/ha.d/haresource

       mfsmaster drbddisk::mfs  Filesystem::/dev/drbd0::/mfsdata::ext3 mfsd::  IPaddr::192.168.2.100/24/eth0

   5  并把drbd 及heartbeat,mfsd 添加到开机启动队列中

     #cp  /etc/ha.d/resource/mfsd  /etc/init.d/mfsd

      #chmod 700 /etc/init.d/mfsd

      #chkconfig   --add  mfsd

      #chkconfig   mfsd on

      #chkconfig  heartbeat on

      #chkconfig   mfsd on

第六 出现的问题,如下                

  在该集群上eth1 为mfsmaster和mfsback 进行数据同步,由于网络的不稳定,易造成DRBD 出现split brain 现象,

  如下

   1 测试发生split brain 情况

        [root@mfsmaster ~]#   ifdown  eth1 注:一段时间后在启动该网卡(ifup  eth1)drbd 同步eth1 进行数据同步

      并查看 在mfsmaster

      [root@mfsmaster ~]# cat /proc/drbd 

version: 8.3.10 (api:88/proto:86-96)

GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsmaster, 2011-02-28 11:31:28

      0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----

     ns:40 nr:0 dw:856 dr:2090 al:9 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:784

   2  在mfsback

        [root@mfsback ~]# cat /proc/drbd 

        version: 8.3.10 (api:88/proto:86-96)

       GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsback, 2011-02-28 11:29:00

       0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   r-----

      ns:0 nr:40 dw:900 dr:1169 al:5 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:784

   3 解决方法

      首先关闭在主从节点上关闭heartbeat 不然不能恢复drbd 的正常连接

      #service heartbeat stop

      在mfsmaster 运行一下命令

       #drbdadm  secondary resource(注:resource 为drbd的资源名)

        #drbdadm  --  --discard-my-data  connect resource

       在mfsback 上运行下面命令

        #drbdadm  connect source

  4 再次查看drbd的信息

      查看mfsmaster 上的drbd的信息

        #cat /proc/drbd 

            [root@mfsmaster~]# cat /proc/drbd 

         version: 8.3.10 (api:88/proto:86-96)

        GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsmaster, 2011-02-28 11:31:28

             0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

              ns:0 nr:2620 dw:4168 dr:2102 al:9 bm:5 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

         查看mfsback 上的drbd信息

               [root@mfsback ~]# cat /proc/drbd 

        version: 8.3.10 (api:88/proto:86-96)

        GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsback, 2011-02-28 11:29:00

        0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

               ns:2620 nr:0 dw:1632 dr:4830 al:6 bm:6 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

  5 在主备节点上依次重启heartbeat

     #service heartbeat  start

 

 

你可能感兴趣的:(高可用,heartbeat,MFS)