理论总结:
DRBD:distributed replicated block device分布式复制块设备,基于主机通过网络复制数据,是内核中控制复制数据的一个模块
drbdadm:用户空间的管理工具,需要分析配置参数来实现对drbd的控制
drbd运行在两个节点,默认为主从,主从可以切换
 
Master/Master模式:
1、文件系统必须为集群文件系统如:GFS2;OCFS2(本身提供高可用功能)
2、使用高可用环境
3、使用分布式锁DLM
 
Master/Slave模式:
1、可以使用普通文件系统
2、可以切换主从角色
3、如果需要为高可用提供存储空间,需要将DRBD作为HA的一个资源
4、从节点不可读、不可写、不可挂载
 
复制协议:
ProtocolA:异步,数据被送到TCP/IP协议缓冲区就宣布复制完成
ProtocolB:半同步,也称内存同步,数据发送到从节点的内存接收缓冲区
ProtocolC:异步,数据写到对方的磁盘
 
准备工作
1、 使主机能正常解析两节点:
 
  1. #vim /etc/hosts  
  2. 172.16.3.11       cluster1.luck.com cluster1  
  3. 172.16.3.12       cluster2.luck.com cluster2 
注意:
2、 在两节点上建立双机互信如在节点cluster1上:
 
  1. #ssh-keygen –t rsa  
  2. #ssh-copy-id –i .ssh/id_rsa.pub root@cluster2.luck.com  
3、 使两节点的时间保持同步
4、 在两节点上新建立一个属性大小都相同的分区,分区尽可能小
假设节点cluster1的新建分区为/dev/sda5,cluster2的为/dev/sda6
 
安装与配置基本上两节点配置相同,已建立了双机互信,可以直接拷贝相同文件(命令scp)
下载rpm包:
 
drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。
 
目前在用的drbd版本主要有8.0、8.2和8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和kmod-drbd83。各版本的功能和配置等略有差异;我们实验所用的平台为x86且系统为rhel5.4,因此需要同时安装内核模块和管理工具。我们这里选用最新的8.3的版本(drbd83-8.3.8-1.el5.centos.i386.rpm和kmod-drbd83-8.3.8-1.el5.centos.i686.rpm),下载地址为:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/
 
安装:
  1. #rpm –ivh drbd83-8.3.8-1.el5.centos.i386.rpm  
  2. #rpm –ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm  
drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。
 
为drbd准备配置文件:
 
  1. #cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc  
为drbd配置参数,编辑global_common.conf文件添加如下几个参数:
  1. #vim /etc/drbd.d/global_common.conf  
  2. disk {  
  3.      on-io-error detach;  
  4. }  
  5. net {  
  6. cram-hmac-alg “sha1”;         #定义在  
  7. shared-secred “mysajfkafkjaklj”;  
  8. }  
  9. syncer {  
  10.        rate 1000M;  
  11. }  
定义一个资源/etc/drbd.d/web.res,内容如下:
注意:资源名不能有空白,且只能是ASCII码
 
  1. #vim /etc/drbd.d/web.res  
  2. resouce web {           #资源名为“web”  
  3.         device /dev/drbd0;     #指出drbd的标示名  
  4.         meta-disk internal;     #网络通信属性  
  5.    on cluster1.luck.com {      #设置节点cluster1  
  6.         disk /dev/sda5;       #指出作为drbd的设备  
  7.         address 172.16.3.11:7789;   #指定ip和端口号  
  8.    }  
  9.    on cluster2.luck.com {  
  10.          disk /dev/sda6;  
  11.          address 172.16.3.12:7789;  
  12.  }  
以上文件两个节点上必须相同,因此可以基于ssh将刚才配置的文件同步到cluster2节点上:
  1. #scp /etc/drbd.* clusters2:/etc  
在两个节点上初始化已定义的资源并启动服务:

 1)初始化资源,在两节点执行:

  1. # drbdadm create-md web  

 2)启动服务,在cluster1和cluster2上分别执行: 

  1. #/etc/init.d/drbd start              
以下两个命令可以查看启动状态:
  1. # cat /proc/drbd  
  2. # drbd-overview  
注意命令执行后可以看到“Secondary/Secondary”的关键字,此信息表示两个节点都处于secondary状态
设置节点cluster1的状态为primary:
 
  1. # drbdsetup /dev/drbd0 primary –o  
设置主节点的命令还可写为:
 
  1. # drbdadm -- --overwrite-data-of-peer primary web  
而后再次查看状态,可以发现数据同步过程已经开始,等数据同步完成以后再次查看状态,可以发现节点已经实时状态,且节点已经有了主次
 
  1. # drbd-overview  
创建文件系统:
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
 
  1. # mke2fs -j -L DRBD /dev/drbd0  
  2. # mkdir /mnt/drbd  
  3. # mount /dev/drbd0 /mnt/drbd  
切换主从节点时,要先把现在状态为primary的 节点设为secondary:
假如cluster1节点的状态为primary,下面来验证主从drbd的复制:
Cluster1:
 
  1. # cp -r /etc/drbd.* /mnt/drbd   
  2. # umount /mnt/drbd  
  3. # drbdadm secondary web  
查看状态:
 
  1. # drbd-overview  
  2.  0:web Connected Secondary/Secondary UpToDate/UpToDate C r----  
Cluster2:
  1. # drbdadm primary web  
  2. # drbd-overview  
  3.  0:web Connected Primary/Secondary UpToDate/UpToDate C r----  
  4. # mkdir /mnt/drbd  
  5. # mount /dev/drbd0 /mnt/drbd  
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
  1. # ls /mnt/drbd