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