DRBD+Heartbeat+NFS配置高可用性网络

一.DRBD简介

    分布式复制块设备(DRBD技术)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。

    DRBD镜像数据具有实时性,透明性与同步镜像和异步镜像等特点

    DRBD的两种模式,单主模式与双主模式

    1.单主模式是不论任何资源在任何特定的时间,集群之中只存在一个主节点,并且只能在主模式下操作数据,这个模式可以在任何文件系统中使用。

    2.双主模式是在DRBD8.0之后才加入的新特性,它是在集群中有两个主节点,这种模式需要一个集群文件系统,利用分布工的锁机制进行管理,如:GFS和OCFS2

DRBD提供了三种复制方式,我们先看下DRBD在LINUX的I/0堆栈中的位置

 

    1.协议A:本地磁盘写入成功,数据包已在发送队列中,就被认为是完成操作,通俗点讲就是在主节点写入已经成功后,但是数据包还在发送队列中,并没有到达备用节点,就被主节点认为是完成了全部的读写操作,显然可能在备用节点如果发生故障时,并没有收到数据包,主节点也认为数据已经发送成功,显然不合理,这种主要用在地理上分开的节点!

简言之:数据一旦写入磁盘并发送到网络中就认为完成了写入操作

    2.协议B:本地磁盘已写入完成且复制数据包达到了对等节点,则被认为是完成操作。但是如果在节点往磁盘写数据时时候,发生故障的话,数据还是不能在对等节点上写入磁盘成功。

 简言之:收到接收确认就认为完成了写入操作

    3.协议C:在本地和远程节点的磁盘都已经确认了写入操作完成才被认为操作完成。这是群集节点的流行模式,但I/0吞吐量依赖于网络带宽。

 简言之:收到一定程度确认才认为完成写入操作

 

二.实例            

1.拓扑图

  

 

 

    2.实验要求

   本实验使用Heartbeat,NFS与DRBD技术来实现两个节点之间的数据的同步,并且通过Heardbeat实现故障转移,保证服务的不间断!

3.IP地址配置

     按照拓扑图的规划,对IP地址进行配置

4.DRBD配置

  节点一:drbd1.a.com

    1> 修改主机名

     [[email protected] ~]# vim /etc/sysconfig/network      主机名修改如下

     HOSTNAME=drbd1.a.com

     [[email protected] ~]# hostname drbd1.a.com          不用注销,重新登录即可修改

    2> 同步系统时间RTC

       [[email protected] ~]# hwclock -s

    3> 配置服务器可相互解析

        [[email protected] ~]# vim /etc/hosts      添加如下内容

          192.168.2.10       drbd1.a.com

          192.168.2.20       drbd2.a.com

    4> 安装DRBD软件

    [[email protected] ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm   //主文件安装

        [[email protected] ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装

    5> 加载内核

       [[email protected] ~]# modprobe drbd

    6> 配置主文件

       [[email protected] ~]# vim /etc/drbd.conf     在末行模式下输入如下命令

       

 

   将得到如下内容

   

 

  7> 创建一个共享空间

     

 

  8> 配置全局文件

     [[email protected] ~]# cd /etc/drbd.d

     [[email protected] drbd.d]# cp global_common.conf global_common.conf.bak  //备份文件

     [[email protected] drbd.d]# vim global_common.conf    修改如下

       

    global {

        usage-count no;                           //取消DRBD使用者统计

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;                              //使用协议C

        startup {

                wfc-timeout  120;               //启动延迟

                degr-wfc-timeout 120;

         }

        disk {                                 //fence防脑裂

                  on-io-error detach;

                  fencing resource-only;

          }

        net {

                cram-hmac-alg "sha1";           //主备节点使用的通信算法

                shared-secret  "mydrbdlab";

         }

        syncer {

                  rate  100M;                   //主备节点同步速率

         }

}

 

    9> 定义资源

       [[email protected] ~]# vim web.res

 

 

节点二:drbd2.a.com配置

      1> 修改主机名

     [[email protected] ~]# vim /etc/sysconfig/network      主机名修改如下

     HOSTNAME=drbd2.a.com

     [[email protected] ~]# hostname drbd2.a.com          不用注销,重新登录即可修改

    2> 同步系统时间RTC

       [[email protected]~]# hwclock -s

    3> 配置服务器可相互解析

        [[email protected] ~]# vim /etc/hosts      添加如下内容

          192.168.2.10       drbd1.a.com

          192.168.2.20       drbd2.a.com

    4> 安装DRBD软件

    [[email protected] ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm   //主文件安装

        [[email protected] ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装

    5> 加载内核

       [[email protected] ~]# modprobe drbd

    6> 配置主文件

       [[email protected] ~]# vim /etc/drbd.conf     在末行模式下输入如下命令

       

 

   将得到如下内容

   

 

  7> 创建一个共享空间

    

 

  8> 配置全局文件

     [[email protected] ~]# cd /etc/drbd.d

     [[email protected] drbd.d]# cp global_common.conf global_common.conf.bak  //备份文件

     [[email protected] drbd.d]# vim global_common.conf    修改如下

       

    global {

        usage-count no;                           //取消DRBD使用者统计

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;                              //使用协议C

        startup {

                wfc-timeout  120;               //启动延迟

                degr-wfc-timeout 120;

         }

        disk {                                 //fence防脑裂

                  on-io-error detach;

                  fencing resource-only;

          }

        net {

                cram-hmac-alg "sha1";           //主备节点使用的通信算法

                shared-secret  "mydrbdlab";

         }

        syncer {

                  rate  100M;                   //主备节点同步速率

         }

}

 

    9> 定义资源

       [[email protected] ~]# vim web.res

 

 

  5.在节点1 与节点2上初始化资源web

   [[email protected] ~]# drbdadm create-md web

      Writing meta data...

      initializing activity log

      NOT initialized bitmap

      New drbd meta data block successfully created.

   [[email protected] ~]# drbdadm create-md web

      Writing meta data...

       initializing activity log

       NOT initialized bitmap

       New drbd meta data block successfully created.

  6.启动drbd服务

注意两个节点要一起启动,否则在启动时会处于一直等待状态

[[email protected] ~]# service drbd start

[[email protected] ~]# service drbd start

  7.查看节点状态

    在节点一上查看

    [[email protected] ~]# drbd-overview 

       0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r----

    在节点二上查看    

   [[email protected] ~]# drbd-overview 

       0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 

 web:资源名

 Secondary/Secondary:自身状态/另外节点状态

  由上面的两个节点的状态可看到,两个节点都是备用节点,我们需要手动调整

   8.将drbd1.a.com调整为主节点

     [[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary web

   9.再次查看状态

     节点一

      [[email protected] ~]# drbd-overview 

       0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

      节点二

      [[email protected] ~]# drbd-overview 

      0:web  Connected Secondary/Primary UpToDate/UpToDate C r----

可以看出drbd1.a.com已经成为主节点了

10.在主节点上创建文件系统

      [[email protected] ~]# mkfs.ext3 -L drbdweb /dev/drbd0         L:卷名

   11.测试

     1> 在主节点上创建挂载点,挂载后,写入一个文件

      [[email protected] ~]# mkdir /mnt/drbd

        [[email protected] ~]# mount /dev/drbd0 /mnt/drbd

        [[email protected] ~]# cd /mnt/drbd

        [[email protected] drbd]# touch index.html

        [[email protected] drbd]# ll

        total 16

        -rw-r--r-- 1 root root     0 Jan 20 18:09 index.html

        drwx------ 2 root root 16384 Jan 20 18:07 lost+found

        [[email protected] drbd]# 

     2> 将drbd1.a.com配置成从节点,将drbd2.a.com配置成主节点

        节点一

        [[email protected] drbd]# cd 

        [[email protected] ~]# 

        [[email protected] ~]# umount /mnt/drbd

        [[email protected] ~]# drbdadm secondary web

        [[email protected] ~]# drbdadm role web

        Secondary/Primary        

        [[email protected] ~]#  

       节点二

        [[email protected] ~]# drbdadm primary web

        [[email protected] ~]# drbd-overview 

        0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

     3> 在节点二挂载,查看是否有内容

        [[email protected] ~]# mkdir /mnt/drbd

        [[email protected] ~]# mount /dev/drbd0 /mnt/drbd

        [[email protected] ~]# ll /mnt/drbd/

       total 16

       -rw-r--r-- 1 root root     0 Jan 20 18:09 index.html    //可以看到已经写入成功

       drwx------ 2 root root 16384 Jan 20 18:07 lost+found