DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.它是有内核模块和相关程序而组成,通过网络通信来同步镜像整个 设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以 完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的).本地节点(主机)与远程节点(主机)的数据可以保证实时的同 步,并保证IO的一致性.当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的.(摘自互联网)

  drbd需要同时运行在两个节点上,但只能有一个节点(primary/secondary模型)是Master,而另一个节点为Slave;因此,它是一种比较特殊的集群资源,其资源类型为多状态(Multi-stateclone类型,即主机节点有MasterSlave之分,且要求服务刚启动时两个节点都处于slave状态。

  工作流程图:

此实验由于需要两节点实现名称相互解析等配置,您可以参考笔者(集群系列五)的文章。

1,前提准备

我们这里选用最新的8.3的版本(drbd83-8.3.8-1.el5.centos.i386.rpmkmod-drbd83-8.3.8-1.el5.centos.i686.rpm),下载地址为:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/

下载drbd软件如下:

drbd83-8.3.8-1.el5.centos.i386.rpm  

kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

 

将软件放在/root/drbd目录下,然后安装:

# cd /root/drbd/

# yum -y --nogpgcheck localinstall *.rpm

 

2,配置文件

拷贝模版配置文件到指定目录下:

# cp  -f  /usr/share/doc/drbd83-8.3.8/drbd.conf   /etc/

我们来看一下drbd.conf

# cat /etc/drbd.conf 

 

 
   
  1. # You can find an example in  /usr/share/doc/drbd.../drbd.conf.example   《----注释信息 
  2.  
  3.  include "drbd.d/global_common.conf";《-------主要定义global段和common段 
  4.  
  5.  include "drbd.d/*.res";    《-----包含定义资源的文件 

编辑/etc/drbd.d/global_common.conf 

# cp /etc/drbd.d/global_common.conf{,.bak}-----养成个好习惯,每次配置这样的配置文件都备份一份

# vim /etc/drbd.d/global_common.conf 

 

 
   
  1. global { 
  2.  
  3.         usage-count no; 
  4.  
  5.         # minor-count dialog-refresh disable-ip-verification 
  6.  
  7.  
  8. common { 
  9.  
  10.         protocol C; 
  11.  
  12.         handlers { 
  13.  
  14.                 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"; 
  15.  
  16.                 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"; 
  17.  
  18.                 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; 
  19.  
  20.                 # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; 
  21.  
  22.                 # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; 
  23.  
  24.                 # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; 
  25.  
  26.                 # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; 
  27.  
  28.                 # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; 
  29.  
  30.         } 
  31.  
  32.         startup { 
  33.  
  34.                 wfc-timeout 120; 
  35.  
  36.                 degr-wfc-timeout 120; 
  37.  
  38.         } 
  39.  
  40.         disk { 
  41.  
  42.                 on-io-error detach; 
  43.  
  44. fencing resource-only; 
  45.  
  46.         } 
  47.  
  48.         net { 
  49.  
  50. cram-hmac-alg "sha1"; 
  51.  
  52.   shared-secret "mydrbdlab"; 
  53.  
  54.         } 
  55.  
  56.         syncer { 
  57.  
  58.                 rate 100M; 
  59.  
  60.         } 
  61.  

每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。

定义一个资源/etc/drbd.d/web.res,内容如下

#vim  /etc/drbd.d/web.res

 

 
   
  1. resource web { 
  2.  
  3.   on node1.a.com { 
  4.  
  5.     device    /dev/drbd0; 
  6.  
  7.     disk      /dev/sdb5;《-------此处的磁盘分区是自己提前分好的 
  8.  
  9.     address   172.16.4.11:7789; 
  10.  
  11.     meta-disk internal; 
  12.  
  13.   } 
  14.  
  15.   on node2.a.com { 
  16.  
  17.     device    /dev/drbd0; 
  18.  
  19.     disk      /dev/sdb5; 
  20.  
  21.     address   172.16.4.22:7789; 
  22.  
  23.     meta-disk internal; 
  24.  
  25.   } 
  26.  

拷贝配置文件到另一个节点:

#scp  -r  /etc/drbd.conf  /etc/drbd.d/    node2:/etc/

3,在两个节点上初始化已定义的资源并启动服务:

1)初始化资源,在Node1Node2上分别执行:

# drbdadm create-md web

 

2)启动服务,在Node1Node2上分别执行:

/etc/init.d/drbd start

3)查看启动的状态:

# cat /proc/drbd

 
   
  1. version: 8.3.8 (api:88/proto:86-94) 
  2.  
  3. GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16 
  4.  
  5.  0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- 
  6.  
  7. ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1959768 

也可以使用:

# drbd-overview

 
   
  1. 0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r----  

 

从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:

# drbdsetup  /dev/drbd0  primary   -o

 

此时再查看时:

# drbd-overview 

 
   
  1. 0:web  Connected Primary/Secondary UpToDate/UpToDate C r----  

此节点已经变为主节点了。

 

4,创建文件系统:

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

# mke2fs -j -L DRBD /dev/drbd0

# mkdir /web

# mount /dev/drbd0  /web

# cp /etc/inittab   /web   -----拷贝数据用于测试

 

查看是主节点还是从节点:

# drbdadm role web-----node1上执行的结果

Primary/Secondary

# drbdadm role web------node2上执行的结果

Secondary/Primary

 

如果我们想把自己设置为从节点:

# umount /web

# drbdadm secondary web

然后再把原来的从节点设置为主节点:

# mkdir /web

# drbdadm primary  web 

# mount /dev/drbd0  /web   ----注意此时一定不要再格式化/dev/drbd0

#cd  /web

[root@node2 web]# ls

inittab  lost+found<--------验证此时文件仍然存在