DRBD原理知识

DRBD(Distributed Relicated Block Device 分布式复制块设备), 可以解决磁盘单点故障。一般情况下只支持2个节点。

大致工作原理如下图:

一般情况下文件写入磁盘的步骤是: 写操作 --> 文件系统 --> 内存缓存中 --> 磁盘调度器 --> 磁盘驱动器 --> 写入磁盘。而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个节点:

172.16.10.50 director1.example.com

172.16.10.51 director2.example.com

1、准备工作

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

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

2、安装软件包

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

# 对应的内核模块的名字分别为 drbd-kmod
注意:
drbd和drbd-kmdl的版本要对应;另一个是drbd-kmdl的版本要与当前系统的内核版本(uname -r)相对应。
下载地址: http://www.rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/下载完成后,直接安装即可。

3、配置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;
        }
}

2、定义一个资源/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/*  director.example.com:/etc/drbd.d

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

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

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

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

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

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

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

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

配置完成。

三、主从节点切换

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

具体使用如下:

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

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

 

时间: 2024-08-10 23:26:15

DRBD原理知识的相关文章

iptables原理知识

一.iptables的原理 iptables实际上是定义防火墙规则的工具,真正对数据报文处理的是内核中的netfilter模块.netfilter对报文的处理方式一般有:过滤,地址转换,连接追踪. 1.常用的数据报文格式的解释 防火墙实际上是对进出本机的各种报文进行控制,所以了解常见报文的结构(格式)可以精确的控制报文. 1)IP报文的格式 ip报文的结构如下图: 在这里与防火墙关系最大的是源地址.目标地址.协议.源地址指明报文的来源,目标地址说明报文的去处,协议指明传输层所使用的协议. 补充:

http协议原理知识

HTTP(Hyper Text Transfer Protocol,超文本传输协议) HTTP协议是应用层的一种协议,是一种C/S架构服务,基于TCP/IP协议来通信,监听在TCP的80端口上.下面就开始介绍HTTP协议的相关内容,在开始之前先简单的介绍一下端口类型.TCP协议的功能和状态.Socket通信时的系统调用. 一.常见的端口类型 众所周知: 0~1023:管理员才有权限使用,永久地分配给某应用使用. 注册端口: 1024~41951:只有一部分被注册,分配原则上非特别严格. 动态端口

【转】Unity资源管理原理知识(干货不嫌长)

最近unity 当需要频繁创建一个物体对象时,怎样减少内存. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的. 其实场景里所有静态的对象也有这么一个加载过程,只是Unity3D后台替你自动完

单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在51单片机的P0口工作在普通IO口模式下,为准双向IO口.而工作在第二功能状态下时,则为标准的双向IO口.由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路. 在第二功能状态下,51单片机P0口采用的是互补推挽的输出方式.何为互补推挽呢?下面是它的等效电路图. 当P0第二功能作为输出时

drbd原理

分布式复制块设备(Distributed Replicated Block Device,drbd) 通过网络实现块设备数据实时镜像,可以简单地理解为一种基于网络的raid1:drbd工作在内核空间,它镜像复制的是二进制数据 ,按位bit对应,数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了:作为高可用性的集群的资源,可以代替作为共享设备 工作原理 进行数据的写操作时,数据到达drbd管理模块后,分为两份,一份正常地写入本地磁

DRBD原理及特性概述

Distributed Replicated Block Device(DRBD)是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案.其核心功能通过Linux的内核实现,比文件系统更加靠近操作系统内核及IO栈.DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群.其实现方式是通过网络来镜像整个设备.你可以把它看作是一种网络RAID.它允许用户在远程机器上建立一个本地块设备的实时镜像. 一.DRBD镜像特性及其工作原理 1.特性 实时性: 当应用对磁盘的数据进行修改时

drbd原理详述

DistributedReplicated Block Device (DRBD) 通过分布式复制块设备,可以为位于IP网络上的两个不同站点的两个块设备创建镜像.和corosync一起使用时,DRBD支持分布式高可用Linux集群,主节点和次节点通过TCP/IP协议保持同步,主节点故障,远程节点保持着相同的数据,可以接替主节点继续工作.两个节点使用heartbeat来检测对方是否存活. DRBD确保数据的两个副本保持相同的方式将主设备上的数据复制到次设备上.可以将其视为联网的RAID1.实时对数

人工神经网络基础概念、原理知识(补)

一提到人工神经网络应当想到三个基础的知识点:一是神经元模型:二是神经网络结构:三是学习算法.神经网络的种类多种多样,但其分类依据逃不出上面上个基础知识点.所以在学习中如果能够仅仅把握住以上三个线索,就能触类旁通,拥有一个非常好的视角看待神经网络.今天就对这三个基础知识点进行总结,达到指导神经网络学习以及深化对神经网络的理解的目的. 一.神经元模型 人工神经网络是在现代神经生物学研究基础上提出的模拟生物过程 ,反映人脑某些特性的一种计算结构.它不是人脑神经系统的真实描写,而只是它的某种抽象.简化和

nginx 原理&知识

2015年6月4日 17:04:20 星期四 发现两个关于nginx原理的系列文章, 非常好 http://blog.sina.com.cn/s/blog_6d579ff40100wi7p.html (Nginx 变量漫谈) http://blog.sina.com.cn/s/blog_6d579ff40100xm7t.html (Nginx 配置指令的执行顺序)