介绍DRBD的不错的网文
http://blogold.chinaunix.net/u/24866/showart_2549042.html
http://arch.huatai.me/?p=600
 
一、DRBD原理
二、DRBD的安装与配置
     DRBD的安装
     DRBD的配置
     DRBD分区及其文件系统的创建
三、DRBD的测试
 
DRBD原理
官方网站:http://www.drbd.org/home/what-is-drbd/
网站首页介绍了什么是DRBD,那个图也很好,虽然细节有待于我们去发掘,但大致上说明白了DRBD的工作流程。
结合网上资料,主要是IBM网站和DRBD官网上的文章,谈一下我对DRBD的理解:
DRBD是一个系统,架构分为两个部分:一个是内核模块,用于虚拟一个块设备;另一个是用户空间管理程序,用于和DRBD内核模块通讯,以管理DRBD资源。我们平时所说的DRBD,有时候指的是DRBD系统,但更多时候是指DRBD虚拟块,所以网上很多文章都这样说:“DRBD是个块设备”。若没有特别说明,后文所说的DRBD一律是指DRBD虚拟块。
用户空间管理工具有:
drbd:用来启动和停止drbd的脚本。
drbddisk:用来标记DRBD设备为primary,和挂载文件系统。它设计为用来被Heartbeat使用。
drbdadm:最高层的管理工具,drbd.conf文件就是被该工具所读取。常用工具。
drbdsetup:用于配置已经加载到内核中的drbd模块,底层工具,不常用。
drbdmeta:用于管理和修改drbdmeta数据结构,不常用。
DRBD系统是这样工作的:DRBD块被加载到正常的块设备之上,文件系统之下,在文件系统和磁盘之间形成一个中间层。这样,当用户往文件系统中写入数据时,数据被正式写入磁盘之前会被DRBD系统截获,DRBD系统在捕获到有磁盘写入时,会通知用户空间管理程序把这些数据拷贝一份,写入远程DRBD镜像,然后存入DRBD镜像所映射的磁盘。
DRBD块虽然是虚拟的,但完全可以把它看作一个正常的块设备而进行使用,可以创建一个DRBD分区,可以为它创建文件系统,可以把DRBD分区挂载到文件系统中的某个目录......
在我们往DRBD分区写入数据之前,DRBD系统已经为整个DRBD块做了远程镜像。我们把想要备份的数据写入DRBD分区,DRBD系统就会自动把这些数据写入到自己的远程镜像中。
 DRBD系统向虚拟块的镜像中写入数据时,有三种protocol
  A--数据一旦写入磁盘并发送到网络中就认为完成了写入操作
  B--收到接收确认就认为完成了写入操作
  C--收到写入确认就认为完成了写入操作
 很明显,protocol C更加安全一些。这个东西在DRBD的配置文件会用到。 
 
测试环境:
192.168.9.210 drbd-a
192.168.9.53  drbd-b
64位的CentOS 5.6操作系统
  
NameNode:drbd-a,192.168.9.210
备用NameNodedrbd-b192.168.9.53
DRBD把两台NameNode虚拟成一台,主机名为DRBDIP192.168.9.200,由这台虚拟主机对外提供服务。平时虚拟主机指向的是drbd-a,一旦它出错,虚拟主机切换成指向drbd-b。服务器状态检测,以及切换过程,这两项功能由Pacemaker来实现。
Hadoop所需要做的事情,只是把NameNodeJobTracker的访问地址设定成那个虚拟IP,然后把hadoop.tmp.dirdfs.name.dir参数设定的目录指向到DRBD分区,这两个参数存储着NameNode管理集群所需要的信息,所以需要镜像到从NameNode上。

一、hosts表及SSH无密码登陆配置:略
二、drbd安装配置:
工作要点(注意事项):
a)所有节点机器的底层分区使用了LVMDRBD分区建在LV卷上,而DRBD分区使用xfs文件系统,结构如下:
                                   XFS
                                     |
                                 DRBD分区
                                     |
                                   LV
                                     |
                                  LVM系统
                                     |
                                 正常磁盘
b)根据上面的结构示例,在主节点机器上(hdp0)准备一个空白LV分区,不要创建文件系统,而是要使用drbd的相关命令在它上面创建DRBD分区,最后才在DRBD分区上创建文件系统
c)在备用节点机器上(drbd-b)做相同动作,注意:lv卷的路径和大小要和主节点机器保持一致。据说,大小可以不一致,最好是备用的节点比主机点的容量大一些。
d)为DRBD创建文件系统时,只需要为主节点机器上的DRBD创建文件系统,所有备用节点上的DRBD的文件系统,都是通过同步来完成的
e)切换drbd节点时,必须首先卸载原节点上的drbd分区,并降级该节点的角色,然后才能在新节点上挂载分区并提升节点角色
f)主、备节点机器的用户名最好一致,这点一般不会成为问题,因为hadoop也是如此要求的
  
安装配置:
在主节点hdp0上:
1、drbd版本的选择:drbd官方网站建议下载与内核版本相对应的drbd版本,网站也给出几大Linux分发的相应版本,参考:http://www.drbd.org/download/mainline/,以及 http://www.drbd.org/download/packages/
drbd版本与rpm包的对应关系为:
8.0——drbd
8.2——drbd82
8.3——drbd83
我这里选择drbd 8.3的版本。另外,drbd的内核模块已经写入linux kernel 2.6.33及其以后的内核版本中,若Linux内核版本高于2.6.33,只需要安装用户管理程序即可,否则还要安装drbd内核模块,在安装drbd内核模块时要注意和用户管理程序的版本保持一致。
 
2、下载,安装drbd及其内核模块:
rpm -ivh drbd83-8.3.8-1.el5.centos.x86_64.rpm
rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.x86_64.rpm  
安装过程就么简单!但要注意两台节点都要安装。(似乎yum安装更加简单一些?!)
确认drbd内核模块是否加载成功:
modprobe drbd
lsmod |grep drbd
 
3、配置drbd
配置文件语法及详细选项,参考:http://www.drbd.org/users-guide-emb/re-drbdconf.html,也可以参考我个人翻译的文档:http://share.blog.51cto.com/278008/626653
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/drbd.conf
修改/etc/drbd.d/namenode.res文件,添加如下内容:
  1. resource namenode {   
  2. meta-disk internal;   
  3. device /dev/drbd0; #device指定的参数最后必须有一个数字,用于global的minor-count,否则会报错。device指定drbd应用层设备。   
  4. disk /dev/VolGroup00/DRBD; #所有语句末尾必须有分号。disk指定存储数据的底层设备。   
  5.  
  6. on drbd-a {    #注意:drbd配置文件中,机器名大小写敏感!
  7. address 192.168.9.210:9876;   
  8. }   
  9. on drbd-b {   
  10. address 192.168.9.53:9876;   
  11. }   
  12. }  
修改/etc/drbd.d/global_common.conf,修改如下:
  1. global {  
  2.         usage-count no;  
  3.         # minor-count dialog-refresh disable-ip-verification  
  4. }  
  5.  
  6. common {  
  7.         protocol C;  
  8.  
  9.         handlers {  
  10.                 pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";  
  11.                 pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";  
  12.                 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";  
  13.                 # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";  
  14.                 # split-brain "/usr/lib/drbd/notify-split-brain.sh root";  
  15.                 # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";  
  16.                 # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";  
  17.                 # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;  
  18.         }  
  19.  
  20.         startup {  
  21.                 # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb  
  22.                 wfc-timeout 15;  
  23.                 degr-wfc-timeout 15;  
  24.                 outdated-wfc-timeout 15;  
  25.         }  
  26.  
  27.         disk {  
  28.                 on-io-error detach;  
  29.                 fencing resource-and-stonith;  
  30.         }  
  31.  
  32.         net {  
  33.                 timeout 60;  
  34.                 connect-int 15;  
  35.                 ping-int 15;  
  36.                 ping-timeout 50;  
  37.                 max-buffers 8192;  
  38.                 ko-count 100;  
  39.                 cram-hmac-alg sha1;  
  40.                 shared-secret "123456";                  
  41.         }  
  42.  
  43.         syncer {  
  44.                 # rate after al-extents use-rle cpu-mask verify-alg csums-alg  
  45.                 rate 10M;  
  46.                 al-extents 512;  
  47.                #verify-alg sha1;  
  48.                 csums-alg sha1;  
  49.         }  
 4、安装xfs所需软件:
    yum install kmod-xfs xfsprogs xfsprogs-devel xfsdump
5、准备空白分区:创建空白lv卷,大小为10G,名称为DRBD(两个节点都要做!)
    lvm lvcreate -L 10G -n DRBD VolGroup00
6、LV空白分区上创建drbd分区(两个节点都要做!):
   drbdadm create-md namenode  #注:参数namenode为配置文件中的资源的名称
7、启动drbd,设置主节点,并查看drbd状态:
启动drbd(即启用drbd分区):/etc/rc.d/init.d/drbd start
   设定主节点:首次设定primary时,并不是在某个节点上使用命令drbdadm primary resourename,而是drbdsetup /dev/drdb0 primary -o,或drbdadm --overwrite-data-of-peer primary resourcename
    查看drbd运行状态:cat /proc/drbd,或service drbd status,应该可以看到节点的角色,也可以看到两个节点之间正在同步数据,如下图:
DRBD的各种状态参数的解释,参考:http://www.drbd.org/users-guide-emb/ch-admin.html#s-proc-drbd
   注意:
   1)启动drbd时,两个节点都要手动进行启动
   2)刚开始可能有点转不过弯来,因为一般都是先创建文件系统,然后再启动服务。但这里,drbd是一个块设备,启动drbd服务实际上是在启用drbd块设备
   3)只有在启用了drbd块设备,并设置了primary节点以后,才能创建并挂载文件系统!  
8、drbd分区创建文件系统:
不必等数据同步完成,就可以在DRBD分区(注:不是底层设备分区)上创建xfs文件系统:mkfs.xfs -L drbd /dev/drbd0   #创建xfs分区,并指定标签为drbd
9、使用DRBD分区
跟使用普通的硬盘分区一样,创建挂载点,挂载分区,最好写入/etc/fstab
   mkdir /data
   mount /dev/drbd0 /data
注:/dev/drbd0分区只能在primary节点使用。 
10、测试drbd系统是否工作正常:
     在主节点drbd-a上:echo “$(date “+%F %T”) hello” >/data/test.txt
     卸载drbd设备:umount /data
     节点降级:drbdadm secondary namenode
   然后,在备用节点drbd-b上:drbdadm primary namenode
   挂载drbd设备:mount /dev/drbd0 /data 
 
   drbd-b节点上看到了节点drbd-a上创建的test.txt文件!查看drbd状态,可以看到节点的角色已经发生了变化:    
注:这个切换过程,在实际生产环境中,可以由heartbeatpacemaker来自动完成。
 
在备用节点drbd-b上的工作:
1、安装drbd:略
2、配置drbd:从drbd-a节点scp过来,不需要配置
3、安装xfs所需软件:略
4、准备空白分区(lv卷):略
注:由于drbd-bVG名称与drbd-a不同,需要改名:lvm vgrename lvm VolGroup00。但如果在resource配置文件中,分别为两个节点配置disk和device选项,就无需如此了。
5、创建DRBD分区:略
6、启动drbd系统:手动启动
7、DRBD分区创建xfs文件系统:不需要手动操作!