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 [email protected],
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