DRBD磁盘镜像技术

jopen 10年前

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。

第一章:DRBD概念原理以及安装

 

    1.DRBD是由内核模块和相关脚本而构成,用以构建高可用的集群.其实现方式是通过网络来镜像整个设备(磁盘).它允许用户在远程机器上建立一个本地块设备实时镜像,与心跳链接结合使用,也可看做一种网络RAID(比基于文件系统的同步高效)

 

    2.DRBD(实现块设备的同步)负责接收数据,把数据写到本地磁盘,然后发送到另一个主机.另一个主机将数据存到自己磁盘中.DRBD目前每次只允许一个节点进行写访问,(必须是primary状态才能对磁盘进行写操作),必须将另外一个磁盘设置secondry(两个节点状态:primary和secondry)

    3.DRBD一般会用在HA集群中,那么drbd和HA集群的关系;

    

    一个DRBD系统由两个以上的节点组成,有主备节点之分,drbd设备(将本地磁盘设备虚拟成drbd设备)。在主节点写入的数据通过drbd设备存贮到主节点的磁盘设备,同时,这个数据也会自动发送到备用节点的相应drbd设备,最后写入备用节点的磁盘设备。在备用节点上,drbd只是将数据从drbd设备写入到备用节点的磁盘设备中。

使用DRBD作为HA集群的一个共享存储设备,不需要任何硬件的投资,并且使用的是IP网络运行(iscsi网络存储)

4.DRBD内部实现原理图:

DRBD磁盘镜像技术

那么格式化是格式化drbd设备

用户将数据写到drbd,通过tcp/ip网络传输到远程主机的drbd(传输的是drbd块设备)

 

5.DRBD协议:

A 数据一旦写入磁盘并发送到网络就认为完成写操作

B 只要接受到确认,就会认为完成写操作

C 收到写入(磁盘)确认,再同步(此协议能够保证数据完全写入)

DRBD设备进程三个:drbd_work主进程  drbd0_asender是primary上drbd0的数据发送过程  drbd0_receiver是secondary上drbd0的数据接收进程

 

6.DRBD的工作原理(drbd 同步底层块设备)

DRBD磁盘镜像技术

 

7.DRBD实现原理图:

DRBD磁盘镜像技术

 

9.DRBD的安装

http://www.drbd.org 官网下载(若要源码编译,可以解压后查看.spec文件直接用rpmbuild –bb *.spec  构建rpm包)    需要kernel-devel的支持哦

 

#./configure --enable-spec  --with-km    带有spec的编译和内核支持,会生成spec文件

 

1>准备工作

对两台drbd同步主机进行解析以及hostname设置

在/etc/hosts添加两台主机的解析

192.168.2.88 drbd2

192.168.2.99 drbd1

分别在两台主机上添加虚拟磁盘设备(最好一样大,不然多余就浪费,创建成lvm)

#fdisk -l

#fdisk -cu /dev/vdb 

#pvcreate /dev/vdb1 

#vgcreate drbdvg /dev/vdb1 

#lvcreate -L 1G -n drbdlv drbdvg

 

2>drbd下载安装

#tar zxf drbd-8.4.3.tar.gz   //解压后,发现目录有.spec.in文件,即可以打包成rpm包格式

#yum install rpm-build -y

#./configure --enable-spec --with-km     //在软件的以及目录编译(启用spec和增加kernel模块)

注意:缺少的包相应解决啊

#rpmbuild -bb drbd.spec 构建drbd包

#rpmbuild -bb drbd-km.spec 构建drbd的kernel模块(yum install kernel-devel)

#cd  /root/rpmbuild/RPMS/x86_64/      生成的rpm包位置

#yum localinstall *.rpm -y    本地drbd安装成功

#scp * 192.168.2.88:  直接将rpm包拷贝到备份主机上

!!(如果系统信息不一致,最好使用源码编译,会生成和系统内核匹配的drbd模块drbd-km会根据自己系统的相关信息编译出适合内核的模块)!!

 

安装成功后,/sbin目录下有drbdadm drbdmeta drbdsetup 命令以及drbd启动脚本

 

10.注意事项

1.mount drbd设备前,必须把设备设置为primary状态

2.两个节点不能同时为primary

3.处于secondary状态的服务器上不能进行写操作

4.主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,drbd磁盘镜像相当于raid1

注意:drbd设备主机上的配置必须完全一致

 

 

第二章:DRBD配置以及使用:

 

1./etc/drbd.conf   主配置文件

真正的实际配置文件在/etc/drbd.d/ 两个文件gloab_comman.conf  

另外drbd的详细配置文件需要在*.res文件编辑,这个文件默认不存在

vim /etc/drbd.d/drbd.res        文件的配置必须注意(可能出现share没定义)

resource share {            定义资源的名称为share之后会用到

meta-disk internal; 源数据的存放方式

device /dev/drbd1;   共享出来的drbd块标识

syncer {

verify-alg sha1;               使用的验证方式和密码方式

rate 200M;

}

net { allow-two-primaries; } 可以两台主机同时挂载(不能使用写哦)

on drbd1{   定义drbd设备

disk /dev/drbdvg/drbdlv; 说明drbd设备/dev/drbd1使用的磁盘分区是/dev/sdb1

address 192.168.0.99:7789; 设置drbd的监听端口,用来和端口通信

}

on drbd2{

disk /dev/drbdvg/drbdlv;

address 192.168.0.88:7789;

}

}

需要将主备drbd进行解析哦

 

2.启动DRBD

 

 1>在两个节点执行启动

启动只前在两台主机分区上创建供drbd记录信息的源数据库

#drbdadm create-md share(资源名字) 或者drbdadm create-md all

 

 2>在两个节点启动服务

#/etc/init.d/drbd start 

 

 3>在任意节点查看状态信息

#cat /proc/drbd 

提示:cs 表示连接状态 ro:节点角色 ds:磁盘状态信息 ns:网络信息

提示:Dw:磁盘写信息  Dr:磁盘读信息

 

第一次启动drbd都为secondary状态,需要手工设置为primary

 

 4>设置主节点

#drbdsetup /dev/drbd1 primary  --force  第一次设置主节点(否则不能格式化)

或者#drbdadm –overwrite-data-of-peer primary all

#drbdadm primary share(all)    再次设置主机角色

#cat /proc/drbd  查看同步信息

 

5>格式化文件系统

#mkfs.ext4 /dev/drbd1    对primary状态节点进行格式化(格式化共享drbd1)

#mount /dev/drbd1 /mnt    格式化的是drbd块设备

#df  -H 查看挂载信息

 

3.DRBD主备节点的切换

1>停止drbd服务切换

关闭主节点服务,此时挂载的drbd分区自动在主节点卸载了

在备用节点设置主节点 #drbdadm primary share(all)

2>正常切换

先执行umount卸载分区

设置备节点#drbdadm secondary share(all)

将备用节点设置主节点: #drbdadm primary share(all)

备用节点执行monut操作(mount /dev/drbd1 /mnt)

 

注意:使用系统的版本不一致的时候,不能将生成的drbd*.rpm拷贝到另外一个节点上,因为不同版本的kernel版本不一致,如果使用一样的rpm安装可能出现不能识别到drbd module

因此,可以将drbd.-8.4tar.gz源码编译,在不同的系统中生成自己的源码包,这个会根据kernel来自定义rpm包。

 

作者在试验环境中主节点使用rhel6.3,用源码包编译drbd的rpm包.安装

备用节点rhel6.4使用源码包安装的时候提示module drbd not found .因为drbd-km包和系统不一致。重新用源码包编译适合自己kernel的drbd的rpm包。

 

附录:

DRBD性能优化:

1.网络环境:DRBD是基于块设备的同步,对网络的要求比较大,因此一般会将同步网络和提供服务的网络分开

2.用做DRBD分区磁盘的性能:磁盘性能必须好,例如可以考虑使用多块15kb的SAS盘作为RAID0或RAID10 以提供I/O性能

3.设置syncer参数设置,即rate  200M

 

总结:drbd设备目前只能用在两个硬件IO设备上(也就使真实提供硬件块存储的主机上才能使用共享),并不是任意一个client安装好drbd软件就可以使用共享设备了。这应该是一个瓶颈。貌似可以给其他用吧??

    其 次,在格式化drbd设备时候,选择的是ext4格式,因此,永远只能在primary状态进行挂载并且读写数据,secondary状态不能进行任何操 作,只是数据存储在远端,两块真实的块设备上。其中还有一个问题就是,应该存储方式类似raid1,如果一块盘坏了,数据会自动放在另外一块盘上。(运维 人员只需用将新的磁盘安装上来创建.res文件上相应的设备就ok了)

 

    在ext4下也可以设置双主模式,但是这样会存在一个问题:两边可以同时查看,但是任意一方修改数据,对方不能接受。其实这个时候已经产生脑列问题了,当再次修改主备会发现彼此都认为对方是primary.当你重新恢复drbd服务,会发现自动保存第一个主机的内容。

来自:http://my.oschina.net/xxbAndy/blog/308399