drbd

环境:RHEL6.0 x86-64  selinux and iptables disabled
软件下载:http://oss.linbit.com/drbd

系统管理:drbd的使用


一. DRBD介绍


DRBD(Distributed Replicated Block Device)是linux平台上由内核模块和相关脚本而构成的分散式储存系统,也可以说是一种块设备。用以构建高可用性(HA)的集群。其实现方式是通 过网络来镜像整个设备。它类似于一个网络RAID-1功能。
使用DRBD后,当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中.本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。
也可以说,DRBD负责接受数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。

在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
DRBD的工作原理如下图:
          +----------+
          | 文件系统 |
          +----------+
                 |
                V
        +-----------------+
        |     块设备层     |
        | (/dev/drbd1) |
        +-----------------+
         |                   |
         |                   |
         V                 V
 +-------------+  +-----------------+
 | 本地硬盘     |  | 远程主机硬盘 |
 |(/dev/hdb1)|  | (/dev/hdb1) |
 +--------------+  +----------------+
DRBD官方网站:http://www.drbd.org/
DRBD是以GPL2授权散布的自由软体。

二. DRBD的安装

从官方网站(www.drbd.org)下载源码包:drbd-8.0.4版本.然后分别在两台主机上安装DRBD:

# tar jxf drbd-8.0.4.tar.gz
# cd drbd-8.0.4
# make
# make install

make install执行之后:
drbd.ko被安装到/lib/modules/$KernelVersion/kernel/drivers/block下.
drbd相关工具(drbdadm,drbdsetup)被安装到/sbin下.
并会在/etc/init.d/下建立drbd启动脚本.

三. DRBD的配置

1.DRBD使用的硬盘分区
你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小必须相同.
我们指定两台主机的/dev/hdb1分区作为DRBD的使用的分区.这两个分区大小都为300MB.

2.drbd.conf配置文件
DRBD运行时,会读取一个配置文件/etc/drbd.conf.这个文件里描述了DRBD设备与硬盘分区的映射关系,和DRBD的一些配置参数.
下面是一个drbd.conf文件的简单示例:
<主机>Turbolinux 10.5操作系统,主机名为g105-1,IP地址为 10.0.1.2,DRBD分区为/dev/hdb1.
<备机>Turbolinux 10.5操作系统,主机名为g105-2,IP地址为 10.0.2.2,DRBD分区为/dev/hdb1.

       # 是否参加DRBD使用者统计.默认是yes
       global { usage-count yes; }
       # 设置主备节点同步时的网络速率最大值,单位是字节.
       common { syncer { rate 1M; } }
       # 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的
       # 相关信息.
       #
       resource r0 {
            # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
            protocol C;
            net {
                 # 设置主备机之间通信使用的信息算法.
                 cram-hmac-alg sha1;
                 shared-secret "FooFunFactory";
            }
            # 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
            on g105-1 {
                 # /dev/drbd1使用的磁盘分区是/dev/hdb1
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 # 设置DRBD的监听端口,用于与另一台主机通信
                 address   10.0.1.2:7898;
                 meta-disk  internal;
            }
            on g105-2 {
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 address   10.0.2.2:7898;
                 meta-disk  internal;
            }
       }

然后将这个drbd.conf文件分别复制到两台主机的/etc目录下.

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

[root@g105-1 /]# drbdadm create-md r0
[root@g105-2 /]# drbdadm create-md r0

“r0”是我们在drbd.conf里定义的资源名称.可修改.
现在我们可以启动DRBD了,分别在两台主机上执行:

[root@g105-1 /]# /etc/init.d/drbd start
[root@g105-2 /]# /etc/init.d/drbd start

现在可以查看DRBD的状态,然后在g105-1主机上执行:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

”/proc/drbd”中显示了drbd当前的状态.第一行的st表示两台主机的状态,都是”备机”状态.ds是磁盘状态,都是”不一致”状态.
这是由于,DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化一个主机.在g105-1上执行:

[root@g105-1 /]# drbdsetup /dev/drbd1 primary -o

现在再看一个g105-1上的DRBD状态:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:42688 nr:0 dw:0 dr:42688 al:0 bm:2 lo:4 pe:0 ua:4 ap:0
        [==>.................] sync'ed: 14.7% (262464/305152)K
        finish: 0:02:58 speed: 1,440 (1,292) K/sec
        resync: used:1/31 hits:2669 misses:3 starving:0 dirty:0 changed:3
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

主备机状态分别是”主/备”,主机磁盘状态是”实时”,备机状态是”不一致”.
在第3行,可以看到数据正在同步中,即主机正在将磁盘上的数据,传递到备机上.现在的进度是14.7%.
现在看一下g105-2上面的DRBD状态.

[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
    ns:0 nr:56608 dw:56608 dr:0 al:0 bm:3 lo:0 pe:0 ua:0 ap:0
        [===>................] sync'ed: 20.0% (248544/305152)K
        finish: 0:02:57 speed: 1,368 (1,284) K/sec
        resync: used:0/31 hits:3534 misses:4 starving:0 dirty:0 changed:4
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

稍等一会,在数据同步完后,再查看一下g105-1的DRBD状态:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:305152 nr:0 dw:0 dr:305152 al:0 bm:19 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:19053 misses:19 starving:0 dirty:0 changed:19
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


磁盘状态都是”实时”,表示数据同步完成了.

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

[root@g105-1 /]# mount /dev/drbd1 /mnt/drbd1
[root@g105-1 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda3             9.3G  6.5G  2.4G  73% /
/dev/hda1              99M  9.3M   85M  10% /boot
none                  249M     0  249M   0% /dev/shm
/dev/drbd1            289M   11M  264M   4% /mnt/drbd1

现在,我们在drbd1目录里建立一个200M的文件:

[root@g105-1 /]# dd if=/dev/zero of=/mnt/drbd1/tempfile1.tmp bs=104857600 count=2

操作完成后,在g105-2(备机)上执行:
我们先停止DRBD

[root@g105-2 /]# /etc/init.d/drbd stop

现在,我们可以将hdb1进行挂载

[root@g105-2 /]# mount /dev/hdb1 /mnt/drbd1
[root@g105-2 /]# ls /mnt/drbd1 -hl
total 201M
drwx------  2 root root  12K Jul 28 23:44 lost+found
-rw-r--r--  1 root root 200M Jul 29 00:20 tempfile1.tmp
[root@g105-2 /]# umount /mnt/drbd1

可以看到,在主机g105-1上产生的文件tmpfile1.tmp,也完整的保存在备机g105-2的DRBD分区上.这就是DRBD的网络RAID-1功能. 在主机上的任何操作,都会被同步到备机的相应磁盘分区上,达到数据备份的效果.

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

[root@g105-1 /]# umount /mnt/drbd1

将主机降级为”备机”.

[root@g105-1 /]# drbdadm secondary r0
[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14

 1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

现在,两台主机都是”备机”.
在备机g105-2上,将它升级为”主机”.

[root@g105-2 /]# drbdadm primary r0
[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

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




四、实验

主机:momo 192.168.0.178
    desktop115 192.168.0.115

在做此实验时,要注意网络要通,且能链接到外网。即:
[root@momo ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.218.77) 56(84) bytes of data.
64 bytes from 119.75.218.77: icmp_seq=1 ttl=54 time=41.8 ms
...........................................................
[root@desktop115 ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.218.77) 56(84) bytes of data.
64 bytes from 119.75.218.77: icmp_seq=1 ttl=54 time=42.5 ms
...........................................................
-------------------------------------------------------------------------------------------------------------
#在本地服务器上下载软件
[root@momo ~]# lftp 192.168.0.254
lftp 192.168.0.254:/pub/docs/drbd/rhel6> mget pub/docs/drbd/rhel6/drbd-8.4.0.tar.gz                              
lftp 192.168.0.254:/pub/docs/drbd/rhel6> quit

#在主机momo上安装DRBD
[root@momo ~]# tar zxf drbd-8.4.0.tar.gz
[root@momo ~]# yum install -y gcc flex rpm-build kernel-devel gi    #解决软件依赖性
[root@momo ~]# rpmbuild ~    #在家目录生成rpmbuild编译所需路径;在这里会出现错误,但是家目录中生成了rombuild目录

[root@momo ~]# cd drbd-8.4.0
[root@momo drbd-8.4.0]# ./configure
[root@momo drbd-8.4.0]# make rpm    #编译 drbd
[root@momo drbd-8.4.0]# make km-rpm    #编译 drbd 内核模块

#执行以上步骤后,会在/root/rpmbuild/RPMS/x86_64/里生成rpm包
[root@momo drbd-8.4.0]# cd /root/rpmbuild/RPMS/x86_64/
[root@momo x86_64]# ls         #生成的rpm包
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
[root@momo x86_64]# rpm -ivh *     #安装软件包
[root@momo x86_64]# scp * 192.168.0.115:    #拷贝生成的rpm包到另一主机,并安装软件包   
-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# ls
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
[root@desktop115 ~]# rpm -ivh *    #安装软件包

-------------------------------------------------------------------------------------------------------------
[root@momo x86_64]# cd /etc/drbd.d/
[root@momo drbd.d]# ls
global_common.conf
[root@momo drbd.d]# cd /etc/   
[root@momo etc]# cat 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";

[root@momo etc]# cd /usr/share/doc/drbd-utils-8.4.0/
[root@momo drbd-utils-8.4.0]# ls
ChangeLog  COPYING  drbd.conf.example  README   
[root@momo drbd-utils-8.4.0]# cd /etc                       
[root@momo etc]# cp /usr/share/doc/drbd-utils-8.4.0/drbd.conf.example /etc/drbd.d/drbd.res  #注意:一定要是.res文件
[root@momo etc]# cd /etc/drbd.d/
[root@momo drbd.d]# ls
drbd.res  global_common.conf
[root@momo drbd.d]# vim drbd.res     #drbd.res里面可以定义很多资源
 on momo.example.com {
                address 192.168.0.178:7780;

                volume 0 {
                       device minor 0;
                       disk /dev/vdb;
                       meta-disk internal;
                }
        }
        on desktop115.example.com {
                address 192.168.0.115:7780;

                volume 0 {
                       device minor 0;
                       disk /dev/vdb;
                       meta-disk internal;
                }
        }
}
[root@momo drbd.d]# scp drbd.res 192.168.0.115:/etc/drbd.d/
    
[root@momo drbd.d]# drbdadm create-md example  #example你的资源名,默认是example。仅仅是资源名字
..........................................
New drbd meta data block successfully created.
success
[root@momo drbd.d]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: example
   prepare disk: example
    adjust disk: example
     adjust net: example
]
..........

***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'example'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  20]:
.


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

[root@desktop115 ~]# drbdadm create-md example    
............................................
New drbd meta data block successfully created.
success
[root@desktop115 ~]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: example
   prepare disk: example
    adjust disk: example
     adjust net: example
]
.
[root@desktop115 ~]# cat /proc/drbd     #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:1048508

[root@desktop115 ~]# ll /dev/drbd0
brw-rw---- 1 root disk 147, 0 May 19 12:05 /dev/drbd0

-------------------------------------------------------------------------------------------------------------
[root@momo drbd.d]# cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:1048508

#将momo设置为primary节点,并同步数据;只有primary时才可用
[root@momo drbd.d]# drbdsetup /dev/drbd0 primary --force

[root@momo drbd.d]# watch  cat /proc/drbd   #查看同步状态
[root@momo drbd.d]# mkfs.ext4 /dev/drbd0     #数据同步结束后创建文件系统
........................................
[root@momo drbd.d]# mount /dev/drbd0 /mnt/    #挂载文件系统

[root@momo drbd.d]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/vda3              7247916   3680044   3199696  54% /
tmpfs                   390440       260    390180   1% /dev/shm
/dev/vda1               396672     30589    345603   9% /boot
/dev/drbd0             1032020     17668    961928   2% /mnt
[root@momo drbd.d]# cd /mnt/
[root@momo mnt]# ls
lost+found
[root@momo mnt]# cp /boot/* .    #存放数据
[root@momo mnt]# ls
config-2.6.32-71.el6.x86_64         symvers-2.6.32-71.el6.x86_64.gz
initramfs-2.6.32-71.el6.x86_64.img  System.map-2.6.32-71.el6.x86_64
lost+found                          vmlinuz-2.6.32-71.el6.x86_64
[root@momo mnt]# cd

[root@momo ~]# umount /mnt/    #卸载文件系统
[root@momo ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/vda3              7247916   3680044   3199696  54% /
tmpfs                   390440       260    390180   1% /dev/shm
/dev/vda1               396672     30589    345603   9% /boot
[root@momo ~]# cat /proc/drbd     #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1101484 nr:0 dw:52976 dr:1050077 al:18 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# cat /proc/drbd     #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0

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

[root@momo ~]# drbdadm secondary example    #将momo设置为 secondary 节点

[root@momo ~]# cat /proc/drbd     #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1101484 nr:0 dw:52976 dr:1050077 al:18 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0

-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# cat /proc/drbd     #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
[root@desktop115 ~]# drbdadm primary example      #将desktop115设置为 primary 节点
[root@desktop115 ~]# cat /proc/drbd   #查看同步状态
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:664 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
[root@desktop115 ~]# mount /dev/drbd0 /mnt/    #挂载文件系统,查看数据是否同步
[root@desktop115 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       4684748   1276780   3169992  29% /
tmpfs                   251696         0    251696   0% /dev/shm
/dev/vda1               495844     29176    441068   7% /boot
/dev/drbd0             1032020     37276    942320   4% /mnt
[root@desktop115 ~]# cd /mnt/
[root@desktop115 mnt]# ls
config-2.6.32-71.el6.x86_64         symvers-2.6.32-71.el6.x86_64.gz
initramfs-2.6.32-71.el6.x86_64.img  System.map-2.6.32-71.el6.x86_64
lost+found                          vmlinuz-2.6.32-71.el6.x86_64

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

注意:两台主机上的/dev/drbd0 不能同时挂载,只有状态为primary 时,才能被挂载使用,而此时另一方的状态为 secondary
 

你可能感兴趣的:(drbd)