前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRBD磁盘镜像技术

DRBD磁盘镜像技术

作者头像
BGBiao
发布2018-02-26 11:28:40
1.9K0
发布2018-02-26 11:28:40
举报

第一章: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,通过tcp/ip网络传输到远程主机的drbd(传输的是drbd块设备)

5.DRBD协议:

    A 异步复制协议,数据一旦写入本地磁盘并发送到网络就认为完成写操作;但是数据包在可能在队列中,这样一旦一个节点故障就会造成数据的丢失,因此节点的数据将不同步,一般用在地理位置分开的情况。

    B 内存同步(半同步)复制协议,一旦本地磁盘完成写入,且复制数据包到对等节点,就会认为主节点完成写操作;数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘

    C 同步复制协议,只有本地和远程磁盘都确认完成写操作,写操作才被认为完成;没有任何数据丢失,一般默认使用这个协议,但是I/O吞吐量收到网络带宽的限制。

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

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

7.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服务,会发现自动保存第一个主机的内容。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云硬盘
云硬盘(Cloud Block Storage,CBS)为您提供用于 CVM 的持久性数据块级存储服务。云硬盘中的数据自动地在可用区内以多副本冗余方式存储,避免数据的单点故障风险,提供高达99.9999999%的数据可靠性。同时提供多种类型及规格,满足稳定低延迟的存储性能要求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档