首页 > 代码库 > 配置DRBD

配置DRBD

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

  2. DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点 (主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的 数据,可以继续使用,以达到高可用的目的。 

  3.DRBD的主要应用
如 果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat 为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat + drbd在Linux下创建一个高可用(HA)的集群服务器,在高可用(HA)解决方案中使用DRBD的功能,可以代替使用一个共享盘阵存储设备。因为数 据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了

DRBD的工作原理如下图: 
                     +----------+
                     | 文件系统 |
                     +----------+
                          |
                          V
                    +-------------+
                    |   块设备层  |
                    | (/dev/drbd1)|
                    +-------------+
                     |           |
                     |           |
                     V           V
               +------------+  +-------------+
       

         |  本地硬盘  |  | 远程主机硬盘|
               | (/dev/hdb1)|  | (/dev/hdb1) |
               +------------+  +-------------+
            ==========================================================



drbd的安装配置 - 慧 - 我的博客


二、测试

注意:你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小建议相同. 
            我们指定两台主机的/dev/sda3 分区作为DRBD的使用的分区.这两个分区大小都为11G.

*注意! 在没有建立drbd资源时,切不可提前格式化硬盘!

 

##############################################################
系统环境:Centos5.4 x86_64 [ 2.6.18-164.el5]
  master(主机):IP地址:192.168.1.60   镜像分区:/dev/sda3,11GB
  slave (备机):IP地址:192.168.1.61   镜像分区:/dev/sda3,11GB
软件环境:
    Centos自带RPM包:
    kernel-headers-2.6.18-164.el5
    kernel-devel-2.6.18-164.el5

    安装flex的rpm包,否则drbd不能编译过去

   flex-2.5.4a-41.fc6
需另下载的软件包:
    drbd-8.3.6.tar.gz    http://oss.linbit.com/drbd/8.3/drbd-8.3.6.tar.gz
                         http://oss.linbit.com/drbd/
                         http://www.drbd.org/download/packages/
##############################################################


1.安装内核开发环境(kernel-headers、kernel-devel)
yum install kernel-devel kernel-headers

2.安装drbd软件包
tar -zxvf drbd-8.3.6.tar.gz
cd drbd-8.3.6
./configure --prefix=/usr/local/drbd  --with-km
make
make install
ln -s /usr/local/drbd/etc/drbd.conf /etc/drbd.conf
ln -s /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/drbd
chkconfig --add drbd
chkconfig --level 35 drbd on

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


3.调整drbd服务脚本
vi /etc/init.d/drbd      //在服务脚本的start)部分添加模块加载语句
……
case "$1" in
    start)
    insmod  /lib/modules/2.6.18-164.el5/kernel/drivers/block/drbd.ko
    ……

cat > /etc/drbd.conf <<EOF
global {  usage-count yes;  }
common {

    # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成
    protocol C;
    syncer { rate 3M; }

    startup {
        wfc-timeout 10;
        degr-wfc-timeout 120;
        outdated-wfc-timeout 5;
        }
}
resource r0 {
    device minor 1;
    meta-disk internal;

    # 设置主备机之间通信使用的信息算法.
    net {
        cram-hmac-alg sha1;
        shared-secret "secret string";
    }

    # 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置
    on master {             
        device /dev/drbd0;
        disk /dev/sda3;
        address 192.168.1.60:7801;
    }
    on slave {
        device /dev/drbd0;
        disk /dev/sda3;
        address 192.168.1.62:7801;
    }
}
EOF

三.建立drbd设备,启动drbd服务(master,slave)
1.建立md设备

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

注意:如果你在这步之前已经给/dev/sda3格式化的话,这里会报错,并且无法继续,抱错内容如下:

            md_offset ...........
            al_offset ...........
            bm_offset ...........

            Found ext3 filesystem which uses 

            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

根据报错和官方描述的大概意思就是:有了文件系统,会被认为该设备已经被使用,不能被drbd所使用,最好的解决办法就是低格硬盘破坏该文件系统~
            官方的方法如下: 破坏文件系统 :dd if=/dev/zero bs=1M count=1 of=/dev/sda3; sync 


注:如果出现上面的情况要注意卸载文件系统,否则drbd不成功


# drbdadm create-md r0  // 配置文件中的resource名
  --==  Thank you for participating in the global usage survey  ==--
The server‘s response is:
you are the 1889th user to install this version
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

2.启动drbd服务程序
# /etc/init.d/drbd start

3. 确认drbd状态
# cat /proc/drbd
version: 8.3.6 (api:88/proto:86-91)
GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@master, 2010-07-12 15:36:10
 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:b oos:10723020
--------Secondary/Secondary 表示两个节点都处于辅助(从)状态

四.初始化Primary机(master)
  1. 设为主导状态(同步发起端)
# drbdsetup /dev/drbd0 primary -o
# cat /proc/drbd 
version: 8.3.6 (api:88/proto:86-91)
GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@master, 2010-07-12 15:36:10
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
    ns:54400 nr:0 dw:0 dr:54400 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:10668620
        [>....................] sync‘ed:  0.6% (10416/10468)M
        finish: 0:47:37 speed: 3,728 (3,200) K/sec

-------如需降级为备机,可执行
umount /dev/drbd0 
drbdadm secondary r0

五.验证磁盘镜像结果
1. master主节点
mkfs.ext3 /dev/drbd0  //此操作只要主的上进行即可
mkdir /data
mount -o rw /dev/drbd0 /data
2.slave备节点
mkdir /data

测试:
方法1)
master主节点
mount /dev/drbd0  /data
ls /etc/ > /data/master
接下来你需要将DRBD的主从机互换一下.
可以执行下面的操作:
在主机上,先要卸载掉DRBD设备.
umount /data
drbdadm secondary r0
现在,两台主机都是"备机"需要把备节点升为主节点
drbdadm primary r0
mount /dev/drbd0 /data
ls /data

方法2)
master主节点
mount /dev/drbd0  /data
ls /etc/ > /data/master
slave备节点
service drbd stop
mount /dev/sda3 /data

这只是简单的测试 下面再测试一下 ha+drbd+mysql 并对ha mysql进行监控

配置DRBD