什么是DRBD?
DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络RAID。
drbd 的应用范围是什么?除此之外,创建高可用性集群还需要什么?
Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。其他所需的组件有集群成员服
务,如TurboHA 或心跳连接,以及一些能在块设备上运行的应用程序。
例如:
o 裸I/O
o 文件系统及fsck
o 具有恢复能力的数据库。
它是如何工作的?
每个设备(drbd 提供了不止一个设备)都有一个状态,可能是‘主’状态或‘辅助’状态。在带有主要设备的节点上,应用程序应能运行和
访问设备(/dev/nbX)。每次写入都会发往本地低层设备和带有‘辅助’状态设备的节点中。次要设备只能简单地把数据写入它的低层块设
备上。读取数据通常在本地进行。如果主要节点发生故障,心跳将会把辅助设备转换到主状态,并启动其上的应用程序。(如果您将它和无
日志FS 一起使用,则需要运行fsck)。
如果发生故障的节点恢复工作,它就会成为新的辅助节点,而且必须使自己的内容与主节点的内容保持同步。当然,这些操作不会干扰到后
台的服务。
drbd 同现在的HA 集群有什么关系?
大部分现行高可用性集群(如:惠普、康柏等等)使用的是共享存储器,因此存储器连接多个节点(用共享的SCSI 总线或光纤通道就可以
做到)。Drbd 也可以作为一个共享的设备,但是它并不需要任何不常见的硬件。它在IP 网络中运行,而且在价格上IP 网络要比专用的存
储网络经济的多。目前,drbd 每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本
将支持两个节点进行读写存取。这很有用,比如对GFS 来讲就是如此。兼容性Drbd 可以在ide、SCSI 分区和整个驱动器之上运行,但不能
在回路模块设备上运行。(如果您硬要这样做,它就会发生死锁)。Drbd 也不能在回送网络设备中运行。(因为它同样会发生死锁:所有
请求都会被发送设备占用,发送流程也会阻塞在sock_sendmsg()中。有时,接收线程正从网络中提取数据块,并试图把它放在高速缓存器
中;但系统却要把一些数据块从高速缓存器中取到磁盘中。这种情况往往会在接收器的环境下发生,因为所有的请求都已经被接收器块占用
了。
安装
下载软件
最新的稳定版本为0.6.11,您可从http://www.drbd.org/releases.html 下载它。
环镜:redhat9.0 drbd.0.7.10.tar.gz
配置:查看解压的INSTALL文件。
1.[wanwan@root]cd /usr/src/linux-2.4
2.[wanwan@root]make mrproper
3.[wanwan@root]cp configs/kernel-2.4.20-i586.config ./config
4.[wanwan@root]make -s oldconfig_nonint ; make -s oldconfig_nonint
5.[wanwan@root] vi Makefile 修改 -8customer 把 customer删除
6.[wanwan@root] make dep
7.[wanwan@root]make include/linux/version.h
解压drbd-0.7.10
8.[wanwan@root]cd /usr/src/drbd-0.7.10/drbd
9.[wanwan@root]make clean all
10.[wanwan@root]make;
11.[wanwan@root]make install;
测试加载drbd 模块
如果这些都已经创建和安装妥当,您就可以测试加载模块了。
$ /sbin/insmod drbd
如果一切正常,您不会看见任何ERROR(错误)信息,用Ismod 程序可以验证模块是否已被加载。
dev2-98:~/rpm/SPECS # lsmod
最后修改配置文件/etc/drbd.conf
参考如下:
resource drbd0 { //设备名
protocol C;
incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
 .net {
}
syncer {
rate 10M;
group 1;
al-extents 257;
}
on Web_1{ //主机名
device /dev/drbd0; //设备名
disk /dev/sda2; //硬盘符
address 192.168.3.195:7788; //主机IP地址:端口
meta-disk internal;
}
on web_2 { //辅计算机
device /dev/drbd0; //设备名
disk /dev/sda5; //硬盘符
address 192.168.2.250:7788; //IP地址:端口
meta-disk internal;
}
另:增设为主镜像 drdbsetup /dev/drbd0 primary --do-what-I-say;
建立虚拟设备for i in `seq 0 15` ; do mknod -m 0660 /dev/drbd$i b 147 $i; done
镜像设备名:mount /dev/drbd0 /dev/sda2
启动drbd /etc/init.d/drbd start/stop/reload/restart/
后续的应用等续.