Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。
DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
工具:
drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令,
drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用
drbdmeta:管理META数据结构,平时很少直接用。
在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)
每个资源有个角色,是Primary或Secondary,下面简称“主”和“备”
主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。
备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。
角色可以改变。
一、drbd 工作原理
DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中。 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。
二、环境配置:
1、操作系统:radhat 5.4
2、主服务器:
主机名:master
IP:192.168.2.124
镜像的硬盘:/dev/hdb
3、 备份服务器
主机名:slave
IP:192.168.2.125
镜像的硬盘:/dev/hdb
三、安装drbd
1、下载源代码:http://oss.linbit.com/drbd/。此次安装的版本是drbd-8.3.5
2、把下载好的drbd-8.3.5.tar.gz解压
[root@master ] # tar �Czxvf drbd-8.3.5.tar.gz
[root@master ] # cd drbd-8.3.5
[root@master ] # make
[root@master ] # make install
[root@master ]# modprobe drbd @加载安装drbd模块
[root@master ]# lsmod |grep drbd
drbd 271736 0
@通过lsmod检查是否已经成功,如果有类似内容输出,则表示drbd安装成功了
[root@master ]# mknod /dev/drbd0 b 147 0 @创建硬件设备drbd
四、配置drbd
DRBD运行时,会读取一个配置文件/etc/drbd.conf.这个文件里描述了DRBD设备与硬盘分区的映射关系,数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
1、drbd.conf的配置参数说明
Protocol
Protocol A @数据一旦写入磁盘并发送到网络中就认为完成了写入操作
Protocol B @收到接收确认就认为完成了写入操作。
Protocol C @收到写入确认就认为完成了写入操作。
2、global
global { usage-count yes; } @是否参加DRBD使用者统计,默认是yes
3、common
common { syncer { rate 1M; } }
@设置主备节点同步时的网络速率最大值,单位是字节.
4、resource
一个DRBD设备(即:/dev/drbdX),叫做一个"资源"。里面包含一个DRBD设备的主备节点的的ip信息,底层存储设备名称,设备大小,meta信息存放方式,drbd对外提供的设备名等等。
resource r0 {
protocol C; @使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
net {
cram-hmac-alg sha1; @设置主备机之间通信使用的信息算法.
shared-secret "FooFunFactory";
}
@每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
on master {
device /dev/drbd0;
disk /dev/ hdb;
address 192.168.2.124:7898; @设置DRBD的监听端口,用于与另一台主机通信
meta-disk internal;
}
on slave{
device /dev/drbd0;
disk /dev/ hdb;
address 192.168.2.124:7898;
meta-disk internal;
}
}
5、以下为测试时的完整配置
global {
usage-count yes;
}
common {
protocol C;
}
resource r0 {
on master {
device /dev/drbd0;
disk /dev/hdb;
address 192.168.2.124:7789;
meta-disk internal;
}
on slave {
device /dev/drbd0;
disk /dev/hdb;
address 192.168.2.125:7789;
meta-disk internal;
}
}
6、双机两个节点的配置文件是一模一样的。DRBD源码目录下有个样本,里面说得比较详细。
五、启动drbd
1、创建matadata
在启动DRBD之前,需要分别在两台主机的hdb分区上,创建供DRBD记录信息的数据块.分别在两台主机上执行:
[root@master ]#drbdadm create-md r0
[root@slave ]#drbdadm create-md r0
备注:
1) “r0”是在drbd.conf里定义的资源名称.
2) 当执行命令”drbdadm create-md r0”时,出现以下错误信息。
Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
解决办法:初始化磁盘文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdXYZ; sync
[root@master ]# dd if=/dev/zero bs=1M count=1 of=/dev/hda3; sync
2.启动DRBD,分别在两台主机上执行
[root@master ]# /etc/init.d/drbd start
[root@slave ]# /etc/init.d/drbd start
备注:
如果在启动过程中找不到node时,查看是/dev/hda3是否是处于挂载状态,如果是,用umount命令取消挂载
3. 查看DRBD的状态,分别在两台主机上执行
[root@slave drbd]# cat /proc/drbd
对输出的含义解释如下:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,
ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。
Ns表示网络发送的数据包信息。
Dw是磁盘写信息
Dr是磁盘读信息
4、设置主节点
由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
[root@master]#drbdsetup /dev/drbd0 primary �Co
或者执行下面命令也是可以的
[root@ master]#drbdadm -- --overwrite-data-of-peer primary all
第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:
[root@ master]#/sbin/drbdadm primary r0或者/sbin/drbdadm primary all
再次查看drbd状态,
可以看到现在状态已经是primary/secondary,而且磁盘信息是upTodat/Inconsistent(实时/不一致),而且已经开始同步两台机器对应磁盘的数据
过了一会,我们再次查看drbd状态,如下:
此时的状态信息就是primary/secondary,磁盘信息是UpToDate/UpToDate,说明已经同步完成了。
六、测试同步
把主机上的DRBD设备挂载到一个目录上进行使用。备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。
主备节点切换有两种方式,分别是停止drbd服务切换和正常切换,依次介绍:
1、停止drbd服务切换
关闭主节点服务,此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:
[root@drbd2 ~]#drbdadm primary all
此时会报错:
2: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command 'drbdsetup 2 primary' terminated with exit code 11
因此,必须在备用节点执行如下命令:
[root@drbd2 ~]#drbdsetup /dev/drbd0 primary �Co
或者
[root@drbd2~]#drbdadm -- --overwrite-data-of-peer primary all
此时就可以正常切换了。
当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。
2、正常切换
在主节点卸载磁盘分区,然后执行
[root@drbd1 ~]#drbdadm secondary all
如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:
2: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup 2 primary' terminated with exit code 11
接着,在备用节点执行
[root@drbd2 ~]#drbdadm primary all
最后在备用节点挂载磁盘分区即可:
[root@drbd2 ~]#mount /dev/drbd0 /mnt
3、注意点
1)mount drbd设备以前必须把设备切换到primary状态。
2)两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。
3)处于secondary状态的服务器上不能加载drbd设备。
4)主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd磁盘镜像相当于网络raid 1。
查阅相关文档:
http://www.cnblogs.com/feisky/archive/2011/12/25/2310346.html
http://lucklong.blog.51cto.com/23691/591804
http://blog.sina.com.cn/s/blog_68a062130100jk1k.html
http://www.ixdba.net/a/os/linux/2010/1011/795.html