DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络RAID。

DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。其他所需的组件有集群成员服    务,如TurboHA 或 心跳连接,以及一些能在块设备上运行的应用程序。例如:裸I/O、文件系统及fsck、具有恢复能力的数据库。

 

系统环境:rhel6 x86_64 selinux and iptables disabled

软件下载:http://oss.linbit.com/drbd

1. 安装DRBD

# yum -y install gcc flex rpm-build kernel-devel -y   # 解决依赖性

# rpmbuild ~   # 在家目录生成rpmbuild编译所需环境

# tar xf drbd-8.4.0.tar.gz

# cd drbd-8.4.0

# ./configure

# make rpm    # 编译drbd

# make km-rpm # 编译drbd内核模块

# cd ~/rpmbuild/RPMS/X86_64

# rpm -ivh *

Note: 从2.6.33开始drbd已经包含在内核中

Note: 拷贝生成的rpm包到另一主机,并安装软件包

2. 配置DRBD

# cp /usr/share/doc/drbd-utils-8.4.0/drbd.conf.example /etc/drbd.d/example.res

# vi /etc/drbd.d/example.res

 

resource example {

options {

on-no-data-accessible suspend-io;

}


net {

cram-hmac-alg "sha1";

shared-secret "secret_string";

}


# The disk section is possible on resource level and in each

# volume section

disk {

# If you have a resonable RAID controller

# with non volatile write cache (BBWC, flash)

disk-flushes no;

disk-barrier no;

md-flushes no;

}


# volume sections on resource level, are inherited to all node

# sections. Place it here if the backing devices have the same

# device names on all your nodes.

on server23.example.com {

address 192.168.0.123:7780;

volume 0 {

      device minor 0;

      disk /dev/vdb1;

      meta-disk internal;

}

}

on vserver2.example.com {

address 192.168.0.223:7780;

volume 0 {

      device minor 0;

      disk /dev/vdb1;

      meta-disk internal;

}

}

}

Note: 两台机器的配置一样,直接复制

3. 启动和测试

在两台主机上分别执行以下命令

# drbdadm create-md example

# /etc/init.d/drbd start

将其中一台机器设置为primary节点, 并同步数据

# drbdsetup /dev/drbd0 primary --force

在两台主机上查看同步状态

# watch cat /proc/drbd

 

version: 8.4.0 (api:1/proto:86-100)

GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@server36.example.com,

2011-08-14 09:44:01

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

ns:126192 nr:0 dw:0 dr:126856 al:0 bm:7 lo:0 pe:145 ua:0 ap:0 ep:1 wo:d oos:922896

[=>..................] sync'ed: 12.2% (922896/1048508)K

finish: 0:02:41 speed: 5,692 (4,484) K/sec

数据同步结束后创建文件系统
# mkfs.ext4 /dev/drbd0
挂载文件系统
# mount /dev/drbd0 /var/www/html
存放数据
# cp -r /etc/* /var/www/html
卸载文件系统
# umount /dev/drbd0
将这台机器设置为secondary节点
# drbdadm secondary example
将另一台机器设置为primary节点 (在另一台机器上执行)
# drbdadm primary example
挂载文件系统,查看数据是否同步
# mount /dev/drbd0 /var/www/html
Note: 两台主机上的/dev/drbd0不能同时挂载, 只有状态为primary时,才能被挂载使用,而此时另一方的状态为secondary