DRBD安装与部署及应用

DRBD(Distributed Relicated Device分布式复制块设备),可以解决磁盘

单点故障。一般情况下只支持2个节点

DRBD是一种块设备,能够被用于高可用(HA)之中.它相似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另外一台主机上.以同样的形式记录在一个文件系统中。

简单来说:drbd就是一款基于网络的raid0技术

 

DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。你可以把它看作是一种网络RAID。它允许用户在远程机器上建立一个本地块设备的实时镜像。

 

DRBD工作模式:

(DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台主机(DRBD Secondary)。另一个主机再将数据存到自己的磁盘中。目前,DRBD每次只允许对一个节点进行读写访问,但这对于通常的故障切换高可用集群来说已经足够用了

 

大致工作原理:

数据经过buffer cache后有内核中的DRBD模块通过tcp/ip协议栈经过网卡和对方建立数据同步

 

DRBD的工作模式:

  1、主从模型master/slave(primary/secondary)

     在某一时刻只允许有一个主节点。主节点的作用是可以挂载使用,写入数据等;

      从节点只是作为主节点的镜像,是主节点的备份,可避免磁盘出现单点故障

  2、双主模型dula primary(primary/primary)

      即2个节点都可以当做主节点来挂载使用;但是可能造成文件系统的错乱,导致数据不能正常使用,解决办法是:使用集群文件系统

 

DRBD的复制协议(同步协议):

  A协议:异步复制(asynchronous)  文件写操作执行到A点时就认为写入磁盘成功,性能好,数据可靠性差

  B协议:半同步复制(semi sync)  文件写操作执行到B点时就认为写入磁盘成功,性能好,数据可靠性介于A和C之间

  C协议:同步复制(sync)  文件写操作执行到C点时就认为写入磁盘成功,性能差,数据可靠性高。也是drbd默认使用的复制协议,依赖于网络带宽,是集群节点中常用的模式

 

 

DRBD的配置(主从模式): 2个节点都要安装drbd

  环境:2个节点

   192.168.56.101    one

   192.168.56.102    two

准备工作:两台主机之间通过主机名互通,在/etc/hosts里加IP与主机名的对应

          每个节点各准备一个磁盘,只分区即可,不需格式化:fdisk /dev/sd磁盘号

          分区大小必须一致;分区后执行partprobe,刷新分区信息,便于内核读取到

          

安装软件包:

drbd共有两部分组成,内核模块和用户空间管理工具

其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于此版本的话,只需要安装管理工具即可;否则,需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应

 

对应的内核模块的名字分别为: drbd-kmdl(内核模块)和drbd(用户空间管理工具)

drdb和drdb-kmdl的版本要对应;drbd-kmdl的版本要与当前系统的内核版本(uname -r)相对应

在每个节点执行:modprobe drbd和lsmod |grep drbd  查看系统是否支持drbd模块,若支持,则只用安装drbd,否则要更新内核:

   yum install kernel-devel  kernel kernel-headers  -y

更新完内核后需要重启系统

http://elrepo.org/tiki/tiki-index.php  参考该网站执行yum仓库的安装

采取安装指定yum源再安装的方式: (编译太复杂,容易错)

   下载rpm包: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

   rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum install -y kmod-drbd84 drbd84-utils -y   安装完成

   安装的是: kmod-drbd84和drbd84-utils  这两个,一个是内核,一个是服务

   安装完成后需要重启,因为这个过程中也升级了内核版本

 

编译安装需要安装:drbd、drbdmanage、drbd-utils

安装drbd:  tar -zxvf drbd-版本号.tar.gz

cd  drbd-版本号/

make  && make install

加载drbd内核模块: modprobe  drbd ; lsmod | grep drbd

安装drbd-utils : tar -zxvf drbd-utils-版本号.tar.gz

                 ./autogen.sh

               ./configure  -prefix=/usr --localstatedir=/var --sysconfdir=/etc

                 make && make install

安装drbdmanage:  tar -zxvf drbdmanage-版本号.tar.gz

                  python  setup.py  install

安装完这三个软件后,drbd就完成安装了

 

 

DRBD配置文件:

/etc/drbd.conf   主配置文件

/etc/drbd.d/global_common.conf  全局配置文件

以及 /etc/drbd.d/目录下以.res结尾的文件(需要自己编写添加)

主配置文件中的内容包括了: global_common.conf以及/etc/drbd.d/目录下以.res结尾的文件

 

配置文件/etc/drbd.d/global_common.conf :

  在此配置文件中,global段仅能出现一次;且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处

  global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源

  global段中可以定义的参数有:

minor-count, dialog-refresh, disable-ip-verification和usage-count

  common段用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义,实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。

resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。

 

.res资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义

配合文件示例:

/etc/drbd.d/global_common.conf  全局配置文件配置:  

global {

   usage-count no;  #是否参加DRBD使用统计,默认为yes,是官方统计debd的装机量

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

}

common {

        protocol C;  #使用DRBD的同步协议C,有A、B、C三种复制协议

handlers{

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";

        }

        startup {

            #wfc-timeout 120;

            # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

        }

        options {

            # cpu-mask on-noo-data-accessible    

        }

        disk {

            on-io-error detach;  #配置磁盘I/O错误处理策略为分离

            # size max-bio-bvecs on-io-error fencingdisk-barrier disk-flushes

            # disk-drain md-flushes resync-rate resync-afteral-extents

                  # c-plan-ahead c-delay-target c-fill-targetc-max-rate

                  # c-min-rate disk-timeout

        }

        net {

            cram-hmac-alg "sha1";  #用哪一种加密算法来做消息认证

            shared-secret "mydrbd1ab";  #共享密钥,可自己设置

# protocol timeout max-epoch-sizemax-buffers unplug-watermark

            # connect-int ping-int sndbuf-sizercvbuf-size ko-count

            # allow-two-primaries cram-hmac-algshared-secret after-sb-0pri

            # after-sb-1pri after-sb-2pri always-asbprr-conflict

            # ping-timeout data-integrity-alg tcp-corkon-congestion

            #congestion-fill congestion-extents csums-alg verify-alg

            # use-rle

        }

       syncer {

            rate 1024M;  #设置主备节点同步时的网络速率,以免过大占用带宽资源

       }

}

on-io-error 策略可能为以下选项之一:

  detach分离:这是默认和推荐的选项,如果在节点上发生底层的硬盘I/O错误,它会将设备运行在Diskless

无盘模式下,会把磁盘从当前镜像中拆除

  pass_on :DRBD会将I/O错误报告到上层,在主节点上,它会将其报告给挂载的文件系统,但是在此节点上就往往忽略(因此此节点上没有可以报告的上层)

  -local-in-error:调用本地磁盘I/O处理程序定义的命令;这需要有相应的local-io-error调用的资源处理程序处理错误的命令;这就给管理员有足够自由的权力命令命令或是脚本调用local-io-error处理I/O错误定义一个资源

 

/etc/drbd.d/test.res  资源配置文件配置

  resource test {   #test是资源名,可以自己设定

  #protocol C;      #指定使用的协议

  meta-disk internal;  #drbd的元数据存放在何处,internal表示存放在内部

  device /dev/drbd0;   #DRBD设备名称,可自己指定,如/dev/drbd0或/dev/drbd1等

  syncer {

  verify-alg sha1;  #加密算法

  }                           蓝色底纹的可以写可以不写

  net {

  allow-two-primaries;

  }

  on one {    #节点1主机名

    disk  /dev/sdb1;  #用于drbd镜像的磁盘或分区,及新创建的磁盘或分区

    address  192.168.56.102:7789;   #节点主机IP,端口默认是7789

  }

  on two {    #节点2主机名

    disk  /dev/sdb1;  #用于drbd镜像的磁盘或分区,及新创建的磁盘或分区

    address  192.168.56.102:7789;   #资源监听的节点主机IP,端口默认是7789

  }

}

 

以上的两个文件在两个节点上必须相同,一个节点配置完后,执行拷贝

将配置好的两个配置文件copy到另一个节点上:

scp   /etc/drbd.d/*  two:/etc/drbd.d/

 

 

 

 

 

 

 

具体操作步骤:

1、执行: drbdadm create-md test   初始化资源test,在两个节点上都执行

 

 

2、执行: drbdadm up test   #启动资源test,在两个节点都执行

 

3、执行:/etc/init.d/drbd start 或systemctl start drbd.service 启动服务,两个节点上都执行

 

4、查看drdb启动状态,可通过这两个命令:cat /proc/drbd  或  drbd-overview

   

   

ds:Inconsistent/Inconsistent    #这个提示表示主从节点上数据非一致

 

在drbd的主从模式中,只有主节点才能挂载使用,从节点仅作为备份的功能。所以要使用该设备需要将其中一个节点提升为主节点(primary)

两个节点先创建一个磁盘且分一个区即可

 

5、执行:drbdadm primary test --force将节点设为Primary,在要设置为Primary的节点上执行

查看设为主节点Primary后的状态:cat /proc/drbd

   

执行: drbdadm role test   在任何节点上执行,可查看该节点是Primary还是Secondary

 

6、执行: drbd-overview  可查看数据正处于同步过程中,由于drbd的两个对等设备是按位同步的,所以不管设备上面有没有数据,都会有这个过程

  

查看同步完成后的状态:drbd-overview

  

 

7、同步完成后即可在/dev/drbd0上创建文件系统并进行挂载:

格式化创建文件系统: mke2fs -t ext4  /dev/drbd0  或其他文件系统格式

  

   挂载: mount /dev/drbd0 /mnt/  挂载到/mnt目录下  

          cd /mnt

          cp /etc/issue  ./    #复制一个文件到挂载点目录下,用来测试8步骤是否同步

综上:只有主节点执行挂载和格式化文件系统,副节点不需要执行

 

8、主从切换:DRBD的主从模型,在某一个时刻只能有一个节点为Primary,若要进行角色转换,需要先将Primary节点设置为Secondary后,才能将原来的Secondary节点提升为Primary,切换主节点时必须保证资源不在使用中

    角色切换步骤:

       在当前Primary节点上执行:

         umount  /mnt   

         drbdadm  secondary  test

       在当前Secondary节点上执行:

         drbdadm  primary  test   

         drbd-overview    查看,此时又在同步了

         mount  /dev/drbd0  /mnt   #将/dev/drbd0挂载到/mnt上

    此时在刚提升为Primary节点上的/mnt目录下会看到之前在原主节点one上挂载点的文件

建议:如果是单主模式,资源只能在主(Primary)节点上挂载使用,而且不建议手动切换主备节点

drbd的挂载点可以是一个磁盘也可以是一个分区,drbd的文件系统只能挂载在主Primary节点上

 

这是drbd的手动切换主节点,通常drbd会与HA一起使用来达到自动切换的效果,此时drbd是HA的一种clone资源

drbd的双主模型,需借助于集群文件系统

drbd节点间的通信延迟在3秒内

 

9、drbd脑裂恢复: 针对于集群情况

集群发生故障,drbd可能会发生脑裂。在drbd的两个节点上都得不到对方的情况

若发生脑裂,这时可以对其中一个设备重新创建设备,在两个节点上重启服务即可

   drbdadm   down  test

   drbdadm  create-md  test

   重启服务之后数据会重新开始同步:

   

 

 

其他命令:

  查看其他资源连接状态:

drbdadm  cstate  test    #test为资源名称

  查看硬盘状态命令:

drbdadm  dstate  test   

  启用和禁用资源: 也可使用all 表示所有资源

drbdadm up  test      #启用资源

drbdadm down  test    #禁用资源

drbdadm up all  或 drbdadm down all

  升级和降级资源:

drbdadm primary  test     #升级

drbdadm secondary  test   #降级

  连接和断开资源:

drbdadm connect  test     #连接资源

drbdadm disconnect  test   #断开资源,断开资源需要先 umoun /mnt

 

在单主模式下的DRBD,两个节点同时处于连接状态,任何一个节点都可以在特定的时间内变成主;但两个节点中只能一为主,如果已经有一个主,需先降级才可能升级;在双主模式下没有这个限制

  

总结:

  DRBD与HA的关系:

一个DRBD系统由两个节点构成,与HA集群类似,也有主节点和备用节点之分,在带有主要设备的节点上,应用程序和操作系统可以运行和访问DRBD设备(/dev/drbd*)。在主节点写入的数据通过DRBD设备存储到主节点的磁盘设备中,同时,这个数据也会自动发送到备用节点对应的DRBD设备,最终写入备用节点的磁盘设备上,在备用节点上,DRBD只是将数据从DRBD设备写入到备用节点的磁盘中。现在大部分的高可用性集群都会使用共享存储,而DRBD也可以作为一个共享存储设备,使用DRBD不需要太多的硬件的投资。因为它在TCP/IP网络中运行,所以,利用DRBD作为共享存储设备,要节约很多成本,因为价格要比专用的存储网络便宜很多;其性能与稳定性方面也不错 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值