作者:沈小然
翻译:沈小然
msn :[email protected]
公司:北京方标讯业科技有限公司
日期:2007年9月12日
目 录
DRBD 是Linux 操作系统的一个分布式远程块设备。它允许您在远程机器上通过一个专用网络建立一个本地块设备的实时镜像,你看它就像一个网络上的raid-1。与双机软件结合使用。
DRBD接管数据流把它们写进本地磁盘并且发送到其他的主机上。
一个集群服务需要的另外一些成员就是heartbeat和工作在同一个块设备上的某类应用程序。这类成员例如:
A filesystem & fsck. (文件系统或者fsck)
A journaling FS. (日志型文件系统)
A database with recovery capabilities. (带有恢复能力的数据库)
每个设备(DRBD提供一个以上的这些设备)都有一个身份,被称为主或从设备。主设备节点被映射为逻辑设备/dev/drbdX。每次写操作都发送到本地的下级块设备,以及从设备节点。从设备简单地写入数据给它的下级块设备。读操作总是在本地完成。
如果主节点失败,heatbeat开始切换从设备转变为主设备身份,并开启应用服务程序。(如果你使用的是一个非日志文件系统,这就涉及到运行fsck)
如果失败的节点再次恢复,它就成为一个新的从设备节点并且与主设备连接做同步。当然这些将在后台运行不会中断服务。
并且,当然我们仅仅再次同步那些实际上发生过改变的数据。如果可能DRBD总是会执行智能同步。开启DRBD-0.7系列产品的服务后,你能够在必设大小尺寸里定义一个“活动配置”,这个配置使DRBD有可能有一个控制在1-3秒内的总同步时间,不必担心设备的容量大小(当前支持4TB以上),甚至是一个有物理损坏的活动节点。
根据我对大多数HA集群(例如HP,Compaq,……)的了解它们都是使用共享存储磁盘,因此磁盘设备被连接给多个节点(连接可以由SCSI总线或光线通道做到)。
DRBD提供给你一个大约原理类似的共享设备,但是它不需要任何稀奇古怪的硬件设备做支撑。它运行在IP网络基础之上,在我的印象中要比那些特殊的存储网络廉价得多。
你可以任意运行DRBD设置一个节点作为主设备角色同时设置一个节点作为从设备角色。这种做法是正统的故障切换集群。你应该在你使用一个普通日志文件系统(例如ext2,ext3,XFS,JFS,reiserFS……)时运用DRBD技术,而且DRBD技术必须在上面的文件系统下运行。
自从DRBD-8.0.0版本以来,你能够同时设置两个节点都作为主设备角色,授权挂载一个集群文件系统(一个物理并行文件系统)到兼容的两个节点之一上。例如像OCFS2和GFS这样的文件系统。
Suse,Debian,Redhat
gcc,make,etc
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
B 收到接收确认就认为完成了写入操作。
C 收到写入确认就认为完成了写入操作。
您还可以附加其它参数来将数据传输给磁盘和网络选项。更多详情,请参见drbdsetup 手册页。
主设备角色:192.168.0.247,hostname:cluster
Red Hat Enterprise Linux AS release 4-up3,内核版本:2.6.9-34.EL
从设备角色:192.168.0.245,hostname:test
Red Hat Enterprise Linux AS release 4-up3,内核版本:2.6.9-34.EL
# tar zxvf drbd-8.0.6.tar.gz
# cd drbd-8.0.6
# make
# make install
安装成功后将在/sbin/下生成命令文件:drbdadm drbdmeta drbdsetup。
配置文件:/etc/drbd.conf,启动脚本/etc/init.d/drbd。
源码文件:/lib/modules/2.6.9-34.EL/kernel/drivers/block/drbd.ko。
注:源码包里scripts/drbd.conf文件是安装前的源文件,如果/etc/drbd.conf损坏可以用这个替换。
# cd /usr/src/drbd-8.0.6/drbd 进入安装包drbd目录
# insmod drbd.ko
# lsmod
Module Size Used by
Drbd 222948 0
出现上面信息说明挂载成功,一切顺利。
5.4.1.3 配置 drbd.conf 文件(1)主设备分区表cluster:
Filesystem Size Used Avail Use% Mounted on
/dev/hda6 8.0G 2.8G 4.9G 36% /
/dev/hda1 97M 8.4M 84M 10% /boot
/dev/hda5 9.7G 913M 8.3G 10% /data
none 189M 0 189M 0% /dev/shm
/dev/hda2 9.9G 965M 8.5G 11% /home
/dev/hda3 8.7G 350M 7.9G 5% /opt
从设备分区表test:
Filesystem Size Used Avail Use% Mounted on
/dev/hda6 7.7G 2.2G 5.2G 30% /
/dev/hda1 99M 8.4M 86M 9% /boot
/dev/hda5 9.7G 55M 9.1G 1% /data
none 252M 0 252M 0% /dev/shm
/dev/hda8 3.5G 39M 3.2G 2% /home
/dev/hda7 4.9G 42M 4.6G 1% /opt
/dev/hda3 9.7G 118M 9.1G 2% /var
(2)配置/etc/hosts文件,将主从机的主机名各自添加进对方的文件里。
(3)vi /etc/drbd.conf
resource mail {
protocol B;
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
syncer {
rate 10M;
}
on cluster {
device /dev/drbd0;
disk /dev/hda5;
address 192.168.0.247:7788;
meta-disk internal;
}
on test {
device /dev/drbd0;
disk /dev/hda5;
address 192.168.0.152:7788;
meta-disk internal;
}
}
注意:这个配置文件必须是主机从机完全相同才行,否则服务启动不了。
# /etc/init.d/drbd start
# netstat –an|more
tcp 0 0 192.168.0.152:800 192.168.0.247:33293 ESTABLISHED
# cat /proc/drbd 查看同步信息的状态
version: 8.0.6 (api:86/proto:86)
SVN Revision: 3048 build by root@cluster, 2007-09-25 10:39:33
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent B r---
ns:1098668 nr:0 dw:0 dr:1106240 al:0 bm:67 lo:0 pe:5 ua:237 ap:0
[==>.................] sync'ed: 10.8% (8927/9999)M
finish: 2:32:21 speed: 936 (920) K/sec
resync: used:1/31 hits:68831 misses:68 starving:0 dirty:0 changed:68
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
与上面安装主设备步骤相同。略
两个节点同时只能有一个是primary,另外的是secondary状态,处于secondary状态的服务器不能挂载drbd设备。
主机从机的挂载磁盘最好是同等大小,否则以小容量的为准。
# sfdisk –s 这里必须用sfdisk(fdisk –l无法显示出来)。
/dev/hda: 39082680
/dev/hda1: 102280
/dev/drbd0: 10239888
# mkfs.ext2 /dev/hda5 格式化物理磁盘
# mkdir /data 创建一个挂载点
# mount /dev/drbd0 /data 主机挂接顺利
# mount /dev/drbd0 /data 从机无法挂接,/dev/drbd0被设置为只读模式
mount: block device /dev/drbd0 is write-protected, mounting read-only
mount: Wrong medium type
1.在主设备192.168.0.247,hostname:cluster上
# touch 123.txt /data 创建一个文件在/data分区上
# ls /data 查看/data分区上的数据,呆会对比下从机数据是否与主机的相同。
123.txt lost+found mss userdb userdb_front
# umount /data 卸载/data分区
# drbdadm secondary mail 切换角色为从设备
2.在从设备192.168.0.152,hostname:test上
# drbdadm primary mail 切换角色为主设备,这样才能挂接drbd0。
# mount /dev/drbd0 /data 挂载顺利
# ls /data 查看/data分区上的数据,挂接上后数据就已经全在了。
123.txt lost+found mss userdb userdb_front
详见我的Linux_HA技术文档
http://www.slackworks.com/~dkrovich/DRBD/index.html
翻译后的参考文档稍后发表
作者注:完全原创文章,严禁剽窃,转载请注明,谢谢!