DRBD(转载)

一、什么是 DRBD
    DRBD
是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络 RAID
二、 drbd 的应用范围是什么?除此之外,创建高可用性集群还需要什么?
        Drbd
负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。其他所需的组件有集群成员服务 ,如 TurboHA 心跳连接,以及一些能在块设备上运行的应用程序。
   
例如:
     
--裸 I/O
     
--文件系统及 fsck
     
--具有恢复能力的数据库。
三、它是如何工作的?
        
每个设备( drbd 提供了不止一个设备)都有一个状态,可能是 状态或 辅助 状态。在带有主要设备的节点上,应用程序应能运行和访问设备( /dev/nbX )。每次写入都会发往本地低层设备和带有 辅助 状态设备的节点中。次要设备只能简单地把数据写入它的低层块设备上。
 
读取数据通常在本地进行。
        
如果主要节点发生故障,心跳将会把辅助设备转换到主状态,并启动其上的应用程序。(如果您将它和无日志 FS 一起 使用 ,则需要运行 fsck )。
   
如果发生故障的节点恢复工作,它就会成为新的辅助节点,而且必须使自己的内容与主节点的内容保持同步。当然,这些操作不会干扰到后台的服务。
四、 drbd 现在HA 集群有什么关系?
        
大部分现行高可用性集群(如:惠普、康柏等等)使用的是共享存储器,因此存储器连接多个节点(用共享的 SCSI 总线或光纤通道就可以做到)。
    Drbd
也可以作为一个共享的设备,但是它并不需要任何不常见的硬件。它在 IP 网络中运行,而且在价格上 IP 网络要比专用的存储网络经济的多。
   
目前, drbd 每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持 两个节点进行读写存取。
   
这很有用,比如对 GFS 来讲就是如此。兼容性 Drbd 可以在 ideSCSI 分区和整个驱动器之上运行,但不能在回路模块设备上运行。
   
(如果您硬要这样做,它就会发生死锁)。
    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.Version0.6.8api63/proto62
   
如果您看到了 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 的例子
   
假设您的两台机器分别命名为节点 110.0.0.10 )和节点 210.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 thost2thost1 IP 地址是 10.1.1.31thost2 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 上提供的心跳软件

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值