DRBD介绍
	
		DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 DRBD Logo数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。DBRD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
	
		DRBD编译安装
	
		安装所需依赖:
	
- 
				yum -y install gcc kernel-devel kernel-headers flex
			
 
 
		开始安装drbd,下载地址:http://oss.linbit.com/drbd/
安装用户空间工具:
	
- 
				cd /tmp
			
 
- 
				wget http://oss.linbit.com/drbd/8.4/drbd-8.4.1.tar.gz
			
 
- 
				tar xzf drbd-8.4.1.tar.gz
			
 
- 
				cd drbd-8.4.1
			
 
- 
				./configure --prefix=/usr/local/drbd --with-km
			
 
- 
				make KDIR=/usr/src/kernels/2.6.18-274.18.1.el5-i686/
			
 
- 
				make install
			
 
- 
				mkdir -p /usr/local/drbd/var/run/drbd
			
 
- 
				cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
			
 
- 
				chkconfig --add drbd
			
 
- 
				chkconfig drbd on
			
 
 
		安装drbd模块:
	
- 
				cd drbd
			
 
- 
				make clean
			
 
- 
				make KDIR=/usr/src/kernels/2.6.18-274.18.1.el5-i686/
			
 
- 
				cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
			
 
- 
				depmod
			
 
 
		注:usr/src/kernels/2.6.18-274.18.1.el5-i686/这个内核源码树路径需要根据自己的系统修改。
	
		DRBD配置
	
		建立分区
	
		假如现在有第二块硬盘hdb,两个node都要分区。
	
- 
				#fdisk /dev/hdb                                                      //准备为 hdb 建立分区
			
 
- 
				 The number of cylinders for this disk is set to 20805.
			
 
- 
				 There is nothing wrong with that, but this is larger than 1024,
			
 
- 
				 and could in certain setups cause problems with:
			
 
- 
				 1) software that runs at boot time (e.g., old versions of LILO)
			
 
- 
				 2) booting and partitioning software from other OSs
			
 
- 
				   (e.g., DOS FDISK, OS/2 FDISK)
			
 
- 
				 Command (m for help): n                                              //键入 n 表示要建立分区
			
 
- 
				 Command action
			
 
- 
				    e   extended
			
 
- 
				    p   primary partition (1-4)
			
 
- 
				 p                                                                    //键入 p 表示建立主要分区
			
 
- 
				 Partition number (1-4): 1                                            //键入 1 为此主要分区代号
			
 
- 
				 First cylinder (1-20805, default 1):                                 //开始磁柱值,按下 enter 即可
			
 
- 
				 Using default value 1
			
 
- 
				 Last cylinder or +size or +sizeM or +sizeK (1-20805, default 20805): //结束磁柱值,按下 enter 即可
			
 
- 
				 Using default value 20805
			
 
- 
				 Command (m for help): w                                              //键入 w 表示确定执行刚才设定
			
 
- 
				 The partition table has been altered!
			
 
- 
				 Calling ioctl() to re-read partition table.
			
 
- 
				 Syncing disks.
			
 
- 
				 [root@node1 yum.repos.d]# partprobe                                  //使刚才的 partition table 变更生效
			
 
 
		建立分区完成后使用指令 fdisk -l 确定 partition talbe 状态
	
- 
				#fdisk -l
			
 
- 
				 Disk /dev/hda: 21.4 GB, 21474754560 bytes
			
 
- 
				 255 heads, 63 sectors/track, 2610 cylinders
			
 
- 
				 Units = cylinders of 16065 * 512 = 8225280 bytes
			
 
- 
				    Device Boot      Start         End      Blocks   Id  System
			
 
- 
				 /dev/hda1   *           1          13      104391   83  Linux
			
 
- 
				 /dev/hda2              14        2610    20860402+  8e  Linux LVM
			
 
- 
				 Disk /dev/hdb: 10.7 GB, 10737377280 bytes
			
 
- 
				 16 heads, 63 sectors/track, 20805 cylinders
			
 
- 
				 Units = cylinders of 1008 * 512 = 516096 bytes
			
 
- 
				    Device Boot      Start         End      Blocks   Id  System
			
 
- 
				 /dev/hdb1               1       20805    10485688+  83  Linux
			
 
 
		建立分区完成后请建立 /db 目录。 (Node1 及 Node2 都必须建立)
	
		建立drbd配置文件
	
		主要定义两块global和resource。
	
- 
				vi /usr/local/drbd/etc/drbd.conf
			
 
 
		写入:
	
- 
				include "drbd.d/global_common.conf";
			
 
- 
				include "drbd.d/*.res";
			
 
 
- 
				vi /usr/local/drbd/etc/drbd.d/global_common.conf
			
 
 
		写入:
	
- 
				global {
			
 
- 
				  usage-count yes;
			
 
- 
				}
			
 
- 
				common {
			
 
- 
				  net {
			
 
- 
				    protocol C;
			
 
- 
				  }
			
 
- 
				}
			
 
 
- 
				vi /usr/local/drbd/etc/drbd.d/r0.res
			
 
 
		写入:
	
- 
				resource r0 {
			
 
- 
				  on node1 {
			
 
- 
				    device    /dev/drbd1;
			
 
- 
				    disk      /dev/hdb1;
			
 
- 
				    address   192.168.1.101:7789;
			
 
- 
				    meta-disk internal;
			
 
- 
				  }
			
 
- 
				  on node2 {
			
 
- 
				    device    /dev/drbd1;
			
 
- 
				    disk      /dev/hdb1;
			
 
- 
				    address   192.168.1.103:7789;
			
 
- 
				    meta-disk internal;
			
 
- 
				  }
			
 
- 
				}
			
 
 
		设置hostname
	
		根据上面的resource配置文件,需要对192.168.1.101和192.168.1.103分别设置hostname为node1和node2,设置方法如下:
	
- 
				vi /etc/sysconfig/network
			
 
 
		修改HOSTNAME为node1
	
		填入:
	
- 
				192.168.1.101 node1
			
 
- 
				192.168.1.103 node2
			
 
 
		使node1 hostnmae临时生效
	
		node2机器设置类似。
	
		设置resource
	
		以下操作需要在node1和node2操作。
	
- 
				#modprobe drbd                                    //载入 drbd 模块
			
 
- 
				#lsmod|grep drbd                                  //确认 drbd 模块是否载入
			
 
- 
				 drbd                  228528  0
			
 
- 
				 #dd if=/dev/zero of=/dev/hdb1 bs=1M count=100     //把一些资料塞到 hdb 內 (否则 create-md 时有可能会出现错误)
			
 
- 
				 #drbdadm create-md r0                             //建立 drbd resource
			
 
- 
				 #drbdadm up r0                                  //启动 resource r0
			
 
 
		查看node1和node2的状态应该类似下面的:
	
- 
				version: 8.4.1 (api:1/proto:86-100)
			
 
- 
				GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@localhost.localdomain, 2012-02-12 06:05:36
			
 
- 
				 m:res  cs         ro                   ds                         p  mounted  fstype
			
 
- 
				 0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
			
 
 
		表明现在已经启动服务,但还没有设置同步(即需要设置Primary Node)
	
		设置Primary Node
	
		以下操作仅在node1执行。
设置node1为primary node:
	
- 
				drbdadm primary --force r0
			
 
 
		再次查看node1的状态:
	
- 
				#cat /proc/drbd
			
 
- 
				version: 8.4.1 (api:1/proto:86-100)
			
 
- 
				GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@localhost.localdomain, 2012-02-12 06:47:37
			
 
- 
				 
			
 
- 
				 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
			
 
- 
				    ns:52892 nr:0 dw:0 dr:52892 al:0 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
			
 
 
		我们看到状态已经变成Primary/Secondary,即设置primary node成功。
	
		创建DRBD文件系统
	
		以下操作仅在node1执行。
上面已经完成了/dev/drbd1的初始化,现在来把/dev/drbd1格式化成ext3格式的文件系统。
	
		然后将/dev/drbd1挂载到之前创建的/db目录。
	
		现在你只要把数据写入/db目录,drbd即会立刻把数据同步到备机192.168.1.103的/dev/hdb1分区上。
	
		drbd同步测试
	
		当在备机node2启动drbd时,它是无法挂载/dev/hdb1分区的,我们可以尝试写些数据到node1的目录/db上,然后停止node2的drbd。
	
		之后就可以把node2的/dev/hdb1挂载到目录/db
	
- 
				mount -t ext3 /dev/hdb1 /db
			
 
 
		我们就可以查看node2的/db目录是否有node1的数据。
	
		手动切换主备机
	
		我们可以把node1改变为备机,而node2改变为主机。
在node1上操作:
	
- 
				umount /dev/drbd1
			
 
- 
				drbdadm secondary r0
			
 
 
		在node2上操作:
	
		此时应该已经切换成功