[转]DRBD 介绍

标签: | 发表时间:2014-01-01 01:43 | 作者:zeo112140
出处:http://blog.csdn.net/zeo112140

DRBD基础

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间 镜像 块设备内容的存储复制解决方案。
DRBD Logo

DRBD Logo

数据 镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
DRBD的核心功能通过Linux的 内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。
DRBD的位置处于文件系统以下,比文件系统更加靠近 操作系统内核及IO栈。
工具:
drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令,
drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用
drbdmeta:管理META数据结构,平时很少直接用。
在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)
每个资源有个角色,是Primary或Secondary,下面简称“主”和“备”
主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于 块设备的raw或直接IO访问。
备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。
角色可以改变。

2 DRBD功能

单主模式:典型的高可靠性 集群方案。
复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。
复制模式:3种模式:
协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。
协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。
一般用协议C。选择协议将影响流量,从而影响网络时延。
有效的同步:按线性而不是当初写的顺序同步块。同步损坏时间内的不一致数据。
在线的设备检验:一端顺序计算底层存储,得到一个数字,传给另一端,另一端也计算,如果不一致,则稍后进行同步。建议一周或一月一次。
复制过程的一致性检验:加密后,对方若不一致则要求重传。防止网卡、缓冲等问题导致位丢失、覆盖等错误。
Split brain:当网络出现暂时性 故障,导致两端都自己提升为Primary。两端再次连通时,可以选择email通知,建议手工处理这种情况。
当数据写在缓冲区里,没有真正写到磁盘上时,系统崩溃会导致数据丢失。而disk flush是指将数据真正写到磁盘上后才返回。
有些带电池的 硬盘控制器,如带电池的带点出Dell PERC Raid卡,不但自带缓存而且自带电池,会在系统意外断电或者崩溃后将最后的数据写入磁盘,对这类控制器,可以使用disk flush,从而在保证性能的前提下提高了数据的安全性。
磁盘错误处理策略:
传递给上层:可能造成文件系统remounting成只读,不推荐。
对上层屏蔽:用另一端的相应块进行读写,应用不中断。可以在任何方便的时候再切换。
不一致的(inconsistent)数据:不能以任何方式访问和使用的数据。如正在同步时的目标节点数据,这些数据不能识别,不能mount,甚至不能通过 磁盘的自动检测。
过期的(outdated)数据:在备机上的数据,与主机一致,但不需要同步。如主备机网络中断后,备机上的数据就是过期的。
DRBD有接口允许应用程序在网络中断时将备机数据标识为过期的。DRBD拒绝将这个节点提升为主角色。这些管理接口在Heartbeat框架上得到完整实现。
一旦过期资源的复制链接恢复,他的过期标志自动清除,接着进行后台同步。

工作原理

在高可用(HA)中使用DRBD功能,可以代替使用一个 共享盘阵.因为数据同时存在于 本地主机和远程主机上,
切换时,远程 主机只要使用它上面的那份备份数据,就可以继续进行服务了.
DRBD的工作原理如下图:
+--------+ | 文件系统 | +--------+
|
V
+--------+|  块设备层 | | (/dev/drbd1) +--------+
| |
V V
| 本地硬盘 | | (/dev/hdb1) | | 远程 主机硬盘 | | (/dev/hdb1) |
关于安装及配置 ,请看参考链接。 [1]



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、drbd 工作原理

DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中。 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。

 

二、环境配置:

 

 

1、操作系统:radhat 5.4

2、主服务器:

主机名:master

IP:192.168.2.124

镜像的硬盘:/dev/hdb

3、  备份服务器

主机名:slave

IP:192.168.2.125

镜像的硬盘:/dev/hdb

 

三、安装drbd

 

1、下载源代码: http://oss.linbit.com/drbd/。此次安装的版本是drbd-8.3.5

2、把下载好的drbd-8.3.5.tar.gz解压

[root@master ] # tar –zxvf drbd-8.3.5.tar.gz

[root@master ] # cd drbd-8.3.5

[root@master ] # make 

[root@master ] #  make install

[root@master ]# modprobe drbd            @加载安装drbd模块

[root@master ]# lsmod |grep drbd       

drbd         271736  0

@通过lsmod检查是否已经成功,如果有类似内容输出,则表示drbd安装成功了

[root@master ]# mknod /dev/drbd0 b 147 0    @创建硬件设备drbd

 

四、配置drbd

 

DRBD运行时,会读取一个配置文件/etc/drbd.conf.这个文件里描述了DRBD设备与硬盘分区的映射关系,数据一旦写入磁盘并发送到网络中就认为完成了写入操作。

1、drbd.conf的配置参数说明

Protocol

Protocol  A         @数据一旦写入磁盘并发送到网络中就认为完成了写入操作

Protocol  B         @收到接收确认就认为完成了写入操作。

Protocol  C         @收到写入确认就认为完成了写入操作。

2、global

global { usage-count yes; }         @是否参加DRBD使用者统计,默认是yes

3、common

common { syncer { rate 1M; } }

@设置主备节点同步时的网络速率最大值,单位是字节.

4、resource

一个DRBD设备(即:/dev/drbdX),叫做一个"资源"。里面包含一个DRBD设备的主备节点的的ip信息,底层存储设备名称,设备大小,meta信息存放方式,drbd对外提供的设备名等等。

resource r0 {

protocol C;         @使用协议C.表示收到远程主机的写入确认后,则认为写入完成.

net {

     cram-hmac-alg sha1;            @设置主备机之间通信使用的信息算法.

     shared-secret "FooFunFactory";

   }

@每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.

on master {

    device    /dev/drbd0;

    disk      /dev/ hdb;

    address   192.168.2.124:7898;    @设置DRBD的监听端口,用于与另一台主机通信

    meta-disk  internal;

   }

on slave{

    device    /dev/drbd0;

    disk      /dev/ hdb;

    address   192.168.2.124:7898;

     meta-disk  internal;

    }

 }

5、以下为测试时的完整配置

global {

  usage-count yes;

}

common {

  protocol C;

}

resource r0 {

  on master {

    device    /dev/drbd0;

    disk      /dev/hdb;

    address   192.168.2.124:7789;

    meta-disk  internal;

  }

  on slave {

    device    /dev/drbd0;

    disk      /dev/hdb;

    address   192.168.2.125:7789;

    meta-disk internal;

  }

}

6、双机两个节点的配置文件是一模一样的。DRBD源码目录下有个样本,里面说得比较详细。

五、启动drbd

1、创建matadata

在启动DRBD之前,需要分别在两台主机的hdb分区上,创建供DRBD记录信息的数据块.分别在两台主机上执行:

[root@master ]#drbdadm create-md r0

[root@slave ]#drbdadm create-md r0

备注:

1) “r0”是在drbd.conf里定义的资源名称.

2) 当执行命令”drbdadm create-md r0”时,出现以下错误信息。

Device size would be truncated, which

would corrupt data and result in

'access beyond end of device' errors.

You need to either

 * use external meta data (recommended)

 * shrink that filesystem first

 * zero out the device (destroy the filesystem)

Operation refused.

Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40

drbdadm create-md r0: exited with code 40

解决办法:初始化磁盘文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdXYZ; sync

[root@master ]#  dd if=/dev/zero bs=1M count=1 of=/dev/hda3; sync

2.启动DRBD,分别在两台主机上执行

[root@master ]# /etc/init.d/drbd start

[root@slave ]# /etc/init.d/drbd start

备注:

如果在启动过程中找不到node时,查看是/dev/hda3是否是处于挂载状态,如果是,用umount命令取消挂载

3. 查看DRBD的状态,分别在两台主机上执行

[root@slave drbd]# cat /proc/drbd


 

对输出的含义解释如下:

ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,

ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。

Ns表示网络发送的数据包信息。

Dw是磁盘写信息

Dr是磁盘读信息

4、设置主节点

由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:

[root@master]#drbdsetup /dev/drbd0 primary –o

或者执行下面命令也是可以的

[root@ master]#drbdadm -- --overwrite-data-of-peer primary all

第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:

[root@ master]#/sbin/drbdadm primary r0或者/sbin/drbdadm primary all

再次查看drbd状态,

 


 

可以看到现在状态已经是primary/secondary,而且磁盘信息是upTodat/Inconsistent(实时/不一致),而且已经开始同步两台机器对应磁盘的数据

过了一会,我们再次查看drbd状态,如下:


 

此时的状态信息就是primary/secondary,磁盘信息是UpToDate/UpToDate,说明已经同步完成了。

六、测试同步

把主机上的DRBD设备挂载到一个目录上进行使用。备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。

主备节点切换有两种方式,分别是停止drbd服务切换和正常切换,依次介绍:
1、停止drbd服务切换
关闭主节点服务,此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:
[root@drbd2 ~]#drbdadm primary all
此时会报错:
2: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command 'drbdsetup 2 primary' terminated with exit code 11
因此,必须在备用节点执行如下命令:
[root@drbd2 ~]#drbdsetup /dev/drbd0 primary –o
或者
[root@drbd2~]#drbdadm -- --overwrite-data-of-peer primary all
此时就可以正常切换了。
当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。
2、正常切换
在主节点卸载磁盘分区,然后执行
[root@drbd1 ~]#drbdadm secondary all
如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:
2: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup 2 primary' terminated with exit code 11
接着,在备用节点执行
[root@drbd2 ~]#drbdadm primary all
最后在备用节点挂载磁盘分区即可:
[root@drbd2 ~]#mount /dev/drbd0 /mnt

3、注意点

1)mount drbd设备以前必须把设备切换到primary状态。

2)两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。

3)处于secondary状态的服务器上不能加载drbd设备。

4)主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd磁盘镜像相当于网络raid 1。

 

查阅相关文档:

http://www.cnblogs.com/feisky/archive/2011/12/25/2310346.html

http://lucklong.blog.51cto.com/23691/591804

http://blog.sina.com.cn/s/blog_68a062130100jk1k.html

http://www.ixdba.net/a/os/linux/2010/1011/795.html


作者:zeo112140 发表于2013-12-31 17:43:06 原文链接
阅读:12 评论:0 查看评论

相关 [drbd] 推荐:

[转]DRBD 介绍

- - 小鸥的博客
Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间 镜像 块设备内容的存储复制解决方案. 数据 镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回). DRBD的核心功能通过Linux的 内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃.

Linux下DRBD配置

- - CSDN博客系统运维推荐文章
一、Drbd 工作原理. DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.(可以比较一下Linux的NFS)当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.

drbd脑裂处理

- - x-marker的博客
前面写过一篇关于使用drbd+corosync+pacemaker实现postgresql高可用的博客,其实drbd的对等节点如果不在线的话,即主节点的数据更改如果无法及时传送到备节点达到一定时间,会造成数据不一致,即使故障节点在长时间离线后恢复,drbd可能也不能正常同步了. 或者另外一种情况,主备都在线,但心跳网络断了而出现脑裂,两个节点都认为自己是主节点,也会造成两个节点的数据不一致,这样需要人工干预,告诉drbd以哪个节点为主节点,或者在drbd配置脑裂的行为.

drbd+xfs+heartbeat+mysql实现高可用

- - C1G军火库
DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.

pacemaker+corosync+drbd实现postgresql高可用

- - x-marker的博客
这种防守的优点是配置较为简单,流复制的备库还能提供一些查询服务,但备库提升为主库后,原来的主库需要使用regmgr重新生成主库,还要开启regmgr监控进程,因此故障只能切换一次,然后进行人工干预(虽然此步骤也可以写成脚本实现自动切换,但我感觉最好还是手工提升,避免来回切换造成数据丢失). 这两天实验了下centos6.4 x-64下的pacemaker+corosync+drbd来实现postgresql的高可用.

drbd性能测试及调优

- - x-marker的博客
今天在qq群里,有个哥们说千万不要用drbd做mysql的HA,说对性能影响非常大,drbd对性能有影响是肯定的,把数据通过网络发送给对端备库必定有性能损耗,而我正好有一套drbd,借此测试一把,看看drbd对性能的影响到底有多大,也给网友一个参考. 我测试的是一套两节点的drbd+pacemaker+corosync的mysqlHA高可用集群,主机都是普通的过时的pc机,内存2g,cpu 2核.

基于DRBD的高可用NFS解决方案分析

- - 忘我的追寻
之前对DRBD分析比较多,但是一直没有找到该怎么用他. 最近又在看NFS协议( RFC3530). 分析了NFS4对于的迁移、复制和服务端重启等场景的定义. DRBD提供块设备,其上是文件系统,而NFS在文件系统上层,二者结合可以构建一个高可用的文件共享解决方案. 关于DRBD,在之前的博客中有一些分析(tag: DRBD).

drbd+pacemaker实现数据库高可用的问题总结

- - x-marker的博客
前面的一篇文章记录下drbd+pacemaker+corosync实现postgresql数据库的高可用(参考 这里),经过一段时间的测试和测试环境使用,总结下遇到的问题. drbd脑裂是指当两个节点(假设只有两个节点)因为网络问题或某一个节点的主机故障等问题,造成数据不能实时同步,就会产生脑裂,drbd脑裂在drbd配置文件的net部分有三个场景,并分别有相应的自动处理策略:.