一、什么是
DRBD
?
DRBD
是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络
RAID
。
二、
drbd
的应用范围是什么?除此之外,创建高可用性集群还需要什么?
Drbd
负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。其他所需的组件有集群成员服务
,如
TurboHA
或
心跳连接,以及一些能在块设备上运行的应用程序。
例如:
--裸
I/O
--文件系统及
fsck
--具有恢复能力的数据库。
三、它是如何工作的?
每个设备(
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
下载它。
您可以从
CVS
中得到最新的源文件。注意,有时代码不能进行编译。您可以通过
cvs
或命令行界面得到它:
[philipp@alf drbd]$
export CVSROOT= :pserver :anonymous@cvs.drbd.org :/var/lib/cvs/drbd
[philipp@alf drbd]$ cvs login
(
Logging in to anonymous@cvs.drbd.org
)
CVS password
:
[Press the return key]
[philipp@alf drbd]$ cvs -z9 checkout drbd
要获取当前的开发分支,可以使用如下命令:
[philipp@alf drbd]$ cvs -z9 checkout -r rel-0_7-branch
六、编译包
直接编译即可。只需如下操作:
$ make
$make install
如果您想为
drbd
编译不同版本的内核,您需要定义
KERNVER
(包括路径)同时您也要定义
drbd
的安装路径。
make KERNVER=2.4.22-7 KDIR=/usr/src/linux-2.4.22-7-include
make KERNVER=2.4.22-7 PREFIX=/local/lib/module/path/ install
测试
加载
drbd
模块
如果这些都已经创建和安装妥当,您就可以测试加载模块了。
$ /sbin/insmod drbd
如果一切正常,您不会看见任何
ERROR
(错误)信息,用
Ismod
程序可以验证模块是否已被加载。
dev2-98
:
~/rpm/SPECS # lsmod
Module Size Used by Tainted
:
PF
drbd 40140 0
(
unused
)
...
$ dmesg
...
drbd
:
initialised.Version
:
0.6.8
(
api
:
63/proto
:
62
)
如果您看到了
drbd
,就表示一切正常。就可以继续执行
rmmod
,并转到举例配置部分。
$ /sbin/rmmod drbd
问题未解决符号
如果在加载模块时,出现了如下信息:
drbd.o
:
unresolved symbol sock_alloc
drbd.o
:
unresolved symbol proc_register
drbd.o
:
unresolved symbol schedule_timeout
...
这就表示您在内核中编译了
CONFIG_MODVERSIONS
,而
DRBD
模块中没有编译
MODVERSIONS
,或者正好相反。这里给出两种解决方案:
用不带
MODVERSIONS
的系统:
更改您的内核配置,
删掉
CONFIG_MODVERSIONS
选项。(参见
~linux/.config
。)重建内核。
使用带
MODVERSIONS
模块的系统:编辑
~drbd/Makefile.vars
,并将
-DMODVERSIONS -DCONFIG_MODVERSIONS
添加到
KERNFLAGS
,最后重建
DRBD
。
七、命令的使用
drbdsetup
drbsetup
是
drbd
程序套件中的底层配置工具。您可以使用该工具把低层模块设备和
drbd
设备联系起来、安装
drbd
设备对,
以便镜像它们的低层模块设备和检查运行
drbd
设备的配置。
使用
drbdsetup
的例子
假设您的两台机器分别命名为节点
1
(
10.0.0.10
)和节点
2
(
10.0.0.20
),您想在这两台机器上使用
/dev/hdc6
作为它们的低层设备。
那么在节点
2
上,您可以发出以下命令:
$ insmod drbd.o
$ drbdsetup /dev/nb0 disk /dev/hdc6
$ drbdsetup /dev/nb0 net 10.0.0.20 10.0.0.10
B
在节点
1
上,您可以发出以下命令:
$ insmod drbd.o
$ drbdsetup /dev/nb0 disk /dev/hdc6
$ drbdsetup /dev/nb0 net 10.0.0.10 10.0.0.20
B
$ drbdsetup /dev/nb0 primary
此时,您就可以像在其他设备一样使用
/dev/nb0
了。
$ mkfs -b 4096 /dev/nb0
$ mount /dev/nb0 /mnt/mountpoint
上例中使用了
“B”
协议。
drbd
允许您选择所需的协议,以控制如何将数据写入辅助设备。
八、
DRBD
协议
协议说明
A
数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
B
收到接收确认就认为完成了写入操作。
C
收到写入确认就认为完成了写入操作。
您还可以选择其它参数来将数据传输给磁盘和网络选项。更多详情,请参见
drbdsetup
手册页。
九、
Config
和脚本的使用
drbd.conf
和脚本
在上面,我们介绍了
drbdsteup
的使用。
drbd
也允许您直接在
drbd.conf
文件中进行设置。通过正确地设置该文件和使用
init.d/drbd
脚本,
您能够轻松让
drbd
在机器启动后正常运行起来。
drbd.conf
设置举例
在本配置中,两台机器分别命名为
thost1
和
thost2
。
thost1
的
IP
地址是
10.1.1.31
,
thost2
的
IP
地址是
10.1.1.32
。
我们要在
thost1
的
/dev/hda7
和
thost2
的
/dev/hda7
之间创建镜像。下面是一个完成该操作的
/etc/drbd.conf
文件范例:
resource drbd0 {
protocol=B
fsck-cmd=fsck.ext2 -p -y
on thost1 {
device=/dev/nb0
disk=/dev/hda7
address=10.1.1.31
port=7789
}
on thost2 {
device=/dev/nb0
disk=/dev/hda7
address=10.1.1.32
port=7789
}
}
脚本的使用
创建了
drbd.conf
文件之后,在
thost1
上运行如下命令:
$ /etc/rc.d/init.d/drbd start
在
thost2
进行同样的操作,
$ /etc/rc.d/init.d/drbd start
此时,两台设备之间就建立起一个镜像,您可以查看
/proc/drbd
进行核实。
$ cat /proc/drbd
现在您可以在设备上创建一个文件系统,然后把它加载到
thost1
上。
$ mkfs /dev/nb0
$ mount /dev/nb0 /mnt/disk
恭喜您,现在您已经使用
drbd
创建了一个镜像。要进一步创建高可用性的故障切换系统,请查看脚本子目录,并可结合使用
linux-ha.org
上提供的心跳软件
352

被折叠的 条评论
为什么被折叠?



