1、数据镜像软件DRBD介绍

分布式块设备复制(Distributed Replicated Block Device),简称DRBD,它是一种基于软件的、基于网络的块复制存储解决方案,主要用于服务器之间的磁盘、分区、逻辑卷等进行数据镜像。当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步,当本地主机出现问题,远程主机上还保留着一份相同的数据,可以继续使用,保证了数据的安全。

2、DRBD的基本功能

DRBD的核心功能就是数据的镜像,其实现方式是通过网络来镜像整个磁盘设备或磁盘分区,将一个节点的数据通过网络实时的传送到另一个远程节点,保证两个节点间数据的一致性,这有点类似于一个网络RAID1的功能。对于DRDB数据镜像来说,它具有如下特点:

实时性。当应用对磁盘数据有修改操作时,数据复制立即发生。

透明性。应用程序的数据存储在镜像设备上是透明和独立的。数据可以存储在基于网络的不同服务器上。

同步镜像。当本地应用申请写操作时,同时也在远程主机上开始进行写操作。

异步镜像。当本地写操作已经完成时,才开始对远程主机进行写操作。

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

数据镜像软件DRBD_第1张图片

4、DRDB的安装与配置,操作系统centos6.7

数据镜像软件DRBD_第2张图片


其中,主备节点两块磁盘/dev/sdb是未经格式化的物理磁盘,大小均为20GB

[root@Master-drbd ~]# wget http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
[root@Master-drbd ~]# wget http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
[root@Master-drbd ~]# rpm -ivh elrepo-release-6-6.el6.elrepo.noarch.rpm 
warning: elrepo-release-6-6.el6.elrepo.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID baadae52: NOKEY
Preparing...                ########################################### [100%]
   1:elrepo-release         ########################################### [100%]

[root@Master-drbd ~]# yum install drbd kmod-drbd84 -y
[root@Master-drbd ~]# modprobe drdb
[root@Master-drbd ~]# lsmod |grep -i drbd
drbd                  372759  0 
libcrc32c               1246  1 drbd


5、DRBD有三个进程:

drbd0——worker:主进程

drbd0——asender:primary上drbd0的数据发送进程

drbd0——receiver;secondary上drbd0的数据接受进程

配置DRBD前需要注意几点:

mount drbd设备以前必须把设备切换到primary状态,两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态,处于secondary状态的服务器上不能加载drbd设备。主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd镜像相当于网络raid1.

主节点配置,备用节点也是一样的配置
[root@Master-drbd ~]# cat /etc/drbd.conf 
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";


global {
    usage-count no;
}

common {
  syncer { 
        rate 100M; 
        verify-alg crc32c;
  }
}

###primary for drbd1
resource data {
  protocol C;

  disk {
    on-io-error   detach;
  }

  on Master-drbd {
    device    /dev/drbd0;
    disk      /dev/sdb;
    address   172.16.80.128:7788;    #心跳地址
    meta-disk internal;
  }

  on Slave-drbd {
    device     /dev/drbd0;
    disk       /dev/sdb;
    address    172.16.80.127:7788;
    meta-disk  internal;
  }

6、DRBD的管理与维护


1.在两个节点执行

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

[root@master-drbd ~]# drbdadm create-md r0 或者执行drbdadm create-md all

initializing activity log

NOT initializing bitmap

Writing meta data...

New drbd meta data block successfully created.

[root@slave-drbd ~]# drbdadm create-md data

2.在两个节点启动服务

接着在两个drbd节点启动DRBD服务,操作如下:

[root@Master-drbd ~]# /etc/init.d/drbd start

Starting DRBD resources: [

     create res: data

   prepare disk: data

    adjust disk: data

     adjust net: data

]


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

最好是在两个节点同时启动DRBD服务。

3.在任意节点查看节点状态

登录任意drbd节点,然后执行“cat /proc/drbd”命令,输出结果如下:

[root@Master-drbd ~]# cat /proc/drbd 

version: 8.4.7-1 (api:1/proto:86-101)

GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10485404


7、设置主节点的状态

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

[root@Master-drbd ~]# drbdadm -- --overwrite-data-of-peer primary data
[root@Master-drbd ~]# cat /proc/drbd 
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:301056 nr:0 dw:0 dr:301728 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10184348
[>....................] sync'ed:  2.9% (9944/10236)M
finish: 0:03:56 speed: 43,008 (43,008) K/sec
[root@Master-drbd ~]# 
[root@Master-drbd ~]# cat /proc/drbd 
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
    ns:534152 nr:0 dw:0 dr:535200 al:8 bm:0 lo:0 pe:2 ua:1 ap:0 ep:1 wo:f oos:9952924
[>...................] sync'ed:  5.2% (9716/10236)M
finish: 0:04:02 speed: 40,960 (40,960) K/sec

[root@Master-drbd ~]# cat /proc/drbd 
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10485404 nr:0 dw:0 dr:10486076 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@Master-drbd ~]# 
第一次执行完此命令后,如果需要设置哪个是主节点,也可以使用另外一个命令:
[root@master-drbd ~]#/sbin/drbdadm primary data或者/sbin/drbdadm primary all
执行此命令后,开始同步两台机器对应磁盘的数据:


数据镜像软件DRBD_第3张图片


8、挂载drbd设备

由于mount操作只能在主节点进行,因此只有设置了主节点后才能格式化磁盘分区,同时,在两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态,而处于secondary状态的节点上不能挂载DRBD设备,要在备用节点上挂载DRBD设备,必须停止备用节点的DRBD服务或将备用节点角色升级为主节点。

下面首先将DRBD设备格式化为ext4文件系统,然后在主节点挂载,操作如下:

[root@master-drbd ~]#mkfs.ext4 /dev/drbd0

[root@master-drbd ~]#mount /dev/drbd0 /data

完成挂载后,就可以在/data目录下写数据了,此目录下的数据会自动同步到备用节点上。

[root@Master-drbd ~]# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621351 blocks
131067 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Master-drbd ~]# mount /dev/drbd0 /data
[root@Master-drbd ~]# 
[root@Master-drbd ~]# touch /data/{a,b,c,d,e}  创建5个测试文件
[root@Master-drbd ~]# ls /data/
a  b  c  d  e  lost+found


9、主备切换

首先在主节点卸载磁盘分区:
[root@ master-drbd /]# umount /data
然后执行:
[root@master-drbd ~]#drbdadm secondary all
如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报如下错误:
2: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup 2 primary' terminated with exit code 11
此时查看master-drbd节点的DRBD状态,信息如下:
[root@Master-drbd ~]# cat /proc/drbd 
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10783236 nr:0 dw:297832 dr:10486805 al:90 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
可以看到,两个节点都处于“Secondary”状态了,那么接下来就要指定一个主节点,在备用节点执行如下命令:
[root@slave-drbd ~]#drbdadm primary all
[root@Slave-drbd ~]# drbdadm primary all
[root@Slave-drbd ~]# cat /proc/drbd 
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:10783236 dw:10783236 dr:672 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
至此,主备节点成功切换角色。最后在新的主节点挂载DRBD磁盘分区即可:
[root@Slave-drbd ~]# mount /dev/drbd0 /data/
[root@Slave-drbd ~]# ls /data/  可以看到之前在主节点上面创建的5个文件都有
a  b  c  d  e  lost+found


数据镜像软件DRBD_第4张图片


我们这里进行的手动的切换,实际工作中应该要自动切换,配合高可用软件heartbeat 或者keepalived