DRBD原理知识

DRBD(Distributed Relicated Block Device 分布式复制块设备), 能够解决磁盘单点故障。通常状况下只支持2个节点。缓存

大体工做原理以下图:bash

2

通常状况下文件写入磁盘的步骤是: 写操做 --> 文件系统 --> 内存缓存中 --> 磁盘调度器 --> 磁盘驱动器 --> 写入磁盘。而DRBD的工做机制如上图所示,数据通过buffer cache后有内核中的DRBD模块经过tcp/ip协议栈通过网卡和对方创建数据同步。ssh

1、DRBD的工做模式

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

这种机制,在某一时刻只容许有一个主节点。主节点的做用是能够挂在使用,写入数据等;从节点知识做为主节点的镜像,是主节点的备份。异步

这样的工做机制的好处是能够有效的避免磁盘出现单点故障,不会文件系统的错乱。async

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

所谓双主模型是2个节点均可以当作主节点来挂载使用。那么,思考这样一个问题?当第一个主节点对某一文件正在执行写操做,此时另外一个节点也正在对同一文件也要执行写操做,结果会如何呢??tcp

通常这种状况会形成文件系统的错乱,致使数据不能正常使用。缘由是:对文件的加锁机制是由操做系统内核所管理的,一个节点对文件加速以后,另外一个节点并不知道对方的锁信息。分布式

解决办法是:使用集群文件系统。集群文件系统使用分布式文件锁管理器,当一个节点对文件加锁以后会经过某种机制来通知其余节点锁信息,从而实现文件锁共享。ide

2、DRBD的复制模型

当某一进程对某一文件执行了写操做时,写操做在上图执行到那个过程时就认为文件已经同步完成。工具

复制协议:

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

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

C协议:同步复制( sync)如上图 文件写操做执行到C点是就认为写入磁盘成功。性能差,数据可靠性高。也是drbd默认使用的复制协议

3、drbd的配置(主从模式)

实验环境:

2个节点:

172.16.10.50 director1.example.com

172.16.10.51 director2.example.com

一、准备工做

# drbd 2个节点之间通讯是基于主机名的
# 设置主机名和主机名解析文件

4

3

# 准备好大小相同的磁盘,这里使用大小相同的分区代替。只需划好分区就好,不须要格式化。

5

6

二、安装软件包

drbd共有两部分组成:内核模块和用户空间的管理工具。
其中drbd内核模块代码已经整合进Linux内核2.6.33之后的版本中,所以,若是内核版本高于
此版本的话,只须要安装管理工具便可;不然,您须要同时安装内核模块和管理工具两个软件包,
而且此二者的版本号必定要保持对应。

# 对应的内核模块的名字分别为 drbd-kmod
注意:
drbd和drbd-kmdl的版本要对应;另外一个是drbd-kmdl的版本要与当前系统的内核版本(uname -r)相
   对应。
下载地址:   直接安装便可。


7

8

三、配置drbd

配置文件说明:

drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前一般会将些配置文件分红多个部分,
且都保存至/etc/drbd.d/目录中,
主配置文件中仅使用"include"指令将这些配置文件片段整合起来。一般,/etc/drbd.d目录中的配置
文件为global_common.conf和全部以.res结尾的文件。
其中global_common.conf中主要定义global段和common段,而每个.res的文件用于定义一个资源。 

在配置文件中,global段仅能出现一次,且若是全部的配置信息都保存至同一个配置文件中而不分开
为多个文件的话,global段必须位于配置文件的最开始处。
目前global段中能够定义的参数仅有minor-count, dialog-refresh, disable-ip-verification
  和usage-count。 

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

resource段则用于定义drbd资源,每一个资源一般定义在一个单独的位于/etc/drbd.d目录中的以.res结
尾的文件中。
资源在定义时必须为其命名,名字能够由非空白的ASCII字符组成。
每个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数都可以从
    common段或drbd的默认中进行继承而无须定义。配置过程:
###############下面的操做在director1.example.com上完成。

# 1 配置/etc/drbd.d/global-common.conf
global {
        usage-count no; # 是否为drbd官方收集数据
        # minor-count dialog-refresh disable-ip-verification
}
# common是各个资源共用的选项
common {
        protocol 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";
                # 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 120;
                #degr-wfc-timeout 120;
        }

        disk {
                on-io-error detach; # 发生i/o错误的处理方法,detach将镜像磁盘直接拔除
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }
}

二、定义一个资源/etc/drbd.d/test.res,内容以下:
resource test {
  on director1.example.com {
    device    /dev/drbd0;
    disk      /dev/sda3;
    address   172.16.10.50:7789;
    meta-disk internal;
  }
  on director2.example.com {
    device    /dev/drbd0;
    disk      /dev/sda3;
    address   172.16.10.51:7789;
    meta-disk internal;
  }
}

以上文件在两个节点上必须相同,所以,能够基于ssh将刚才配置的文件所有同步至另一个节点。

scp  /etc/drbd.d/*  director2.example.com:/etc/drbd.d

在两个节点上初始化已定义的资源并启动服务

1)初始化资源,在 director1 和 director2上分别执行:
drbdadm create-md test 

2)启动服务,在 director1 和 director2 上分别执行:
/etc/init.d/drbd start


完成以上2步骤后,查看启动状态:

9

10

完成以上操做后,继续下面操做。同步metadata(元数据)

# 将director1.example.com 节点设置为Primary。在要设置为Primary的节点上执行以下命令:
drbdadm primary --force test

11

接下来建立文件系统,挂载使用

mke2fs -t ext4 -L DRBD /dev/drbd0
mount /dev/drbd0 /mnt/

12

配置完成。

3、主从节点切换

drbd主从模型只有主节点才能挂载使用。因此就会有升级降级的操做。对主Primary/Secondary模型的drbd服务来说,在某个时刻只能有一个节点为Primary,所以,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary。

具体使用以下:

13

14

这样的切换需手动升级,降级。一般drbd会于HA一块儿使用来达到自动切换的效果,此时drbd是HA的一种clone资源。

drbd的双主模型,需借助于集群文件系统,在之后会详细介绍。

相关文章
相关标签/搜索