原文:http://blog.chinaunix.net/uid-26719405-id-3904528.html

DRBD(Distributed Replicated Block Device),分布式复制块设备,是一种通过TCP/IP网络实现块设备数据实时镜像的方案。利用这种方案,单一主节点模式(single primary mode)双机系统能够实时地将业务数据保存在主备节点的磁盘中,正常情况下两个节点的数据是一模一样的。


drbd的结构示意图及工作原理

Centos 6.1 DRBD配置与使用_第1张图片

   从上图我们可以 清晰的看出drbd是以主从(Primary/Secondary)方式工作的,这点原理与mysql的主从复制的架构有些相似。主节点上的drbd提升为Primary并负责接收写入数据,当数据到达drbd模块时,一份继续往下走写入到本地磁盘实现数据的持久化,同时并将接收到的要写入的数据发送一分到本地的drbd设备上通过tcp传到另外一台主机的drbd设备上(Secondary node),另一台主机上的对应的drbd设备再将接收到的数据存入到自己的磁盘当中。这里与mysql的基于通过二进制日志完成数据的复制的确很相似,但是也有一些不同之处。比如:mysql的从节点不能写但是可以读,但是drbd的从节点是不能读、不能挂载。

   因此,drbd对同一设备块每次只允许对主节点进行读、写操作,从节点不能写也不能读。这样感觉是不是对主机有资源浪费,的确HA架构中为了提供冗余能力是有资源浪费,但是你可以对上图的两台主机建立两个drbd资源并互为主从,这样两台机器都能利用起来,但是配置起来就复杂了。但是话又说回来,用drbd作为廉价的共享存储设备,要节约很多成本,因为价格要比专用的存储网络便宜很多,其性能与稳定性方面也还不错。


drbd的复制模式(协议)

   A协议:

       异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。因此,这种模式效率最高,但是数据不安全,存在数据丢失。

   B协议:

       内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘

   C协议:

       同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有数据丢失,所以这是一个群集节点的流行模式,但I/O吞吐量依赖于网络带宽。因此,这种模式数据相对安全,但是效率比较低。


一.环境

系统:Centos6.1 x86

DRBD: 8.3.9编译安装 (http://www.drbd.org)

Hostname www.cheng.com

Ip: 192.168.0.11

Hostname : www.bao.com

Ip : 192.168.0.22

二.编译安装drbd     (两台机器做同样的操作)

安装依赖软件包 yum install kernel-devel -y

Wget  http://oss.linbit.com/drbd/8.3/drbd-8.3.9.tar.gz

tar -zxvf  drbd-8.3.9.tar.gz

cd drbd-8.3.9

./configure --prefix=/ --with-km

make  && make install

chkconfig  --add drbd

Chkconfig drbd on

检查是否安装成功: drbdadm

是否可以看到版本信息: cat /proc/drbd

重启后再次检查 : cat /proc/drbd

三.配置服务器中的hostname hosts

[root@www /]#  vim /etc/hosts

添加       192.168.0.11 www.cheng.com

          192.168.0.11 www.bao.com

三.在两个服务器上单独分区一个分区或者添加一个空的硬盘  (两台机器做同样的操作)

/dev/sdb5          

四.配置drbd

注意,新版本的DRBD的配置文件已拆分成多个,全部放在/etc/drbd.d/目录,具体可参考/etc/drbd.conf中的配置.
如果开了iptables防火墙,需要打开对应的7789端口。

在主节点配置

[root@www /]#  vim  /etc/drbd.d/dbdata.res

resource dbdata {

 on www.cheng.com{

   device    /dev/drbd1;

   disk      /dev/sdb5;

   address   192.168.0.11:7789;

   meta-disk internal;

 }

 on www.bao.com{

   device    /dev/drbd1;

   disk      /dev/sdb5;

   address   192.168.0.22:7789;

   meta-disk internal;

 }

}

创建drbd设备
[root@www /]#  drbdadm create-md all
[root@www /]#  /etc/init.d/drbd restart

查看是否有相应的块设备:
[root@www /]# ls -l /dev/drbd1
[root@www /]#  cat /proc/drbd

现在可以查看DRBD的状态,然后在www.cheng.com主机上执行:
[root@www /]#  cat /proc/drbd

五.使用drdb

数据同步完成后在主机上

[root@www /]#  drbdadm -- --overwrite-data-of-peer primary dbdata

[root@www /]#  mkfs.ext3  /dev/drbd1   #格式化

[root@www /]#  mount  /dev/drbd1 /mnt/

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

六.Drbd主备机切换

有时,你需要将DRBD的主备机互换一下.可以执行下面的操作:
在主机上,先要卸载掉DRBD设备.

192.168.0.11 进行降级操作

[root@www /]#  umount  /mnt     #必须先卸载

[root@www /]#  drbdadm  secondary dbdata    #切换成备机


在备机器上进行升级操作

[root@www /]#  drbdadm   primary  dbdata #切换成主机

成为了”主机”.你可以把它的/dev/drbd1进行挂载和使用了.同样,数据会被同步到
192.168.0.22上进行使用了