DRBD(Distributed Replicated Block Device),DRBD 号称是 “网络 RAID”,开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于 Linux 平台下的高可用(HA)方案之中.他有内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络 RAID-1 的功能.也就是说当你将数据写入本地的 DRBD 设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在文件系统中.本地节点与远程节点的数据可以保证实时的同步,并保证 IO 的一致性.当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
环境:rhel6.5 192.168.2.108
rhel6.5 192.168.2.109
drbd版本:drbd-8.4.3.tar.gz
一.先在两台主机上分出各一块硬盘分区,做成LV。
1.由于环境采用的是两台虚拟机做实验,所以先给每台虚拟机,加了2G的虚拟用盘。
1.新加的硬盘进行分区
fdisk -cu /dev/sdb
2.先删除分区表
partx -d /dev/sdb
3.再增添分区表
partx -a /dev/sdb
4.制作pv
pvcreate /dev/sdb1
5.制作vg
vgcreate -s 8M drbdvg /dev/sdb1 PE大小为8M vg名为drbdvg
6.制作lv
lvcreate -n drbdlv -L 1G drbdvg -n lv名称 -L lv 大小 vg名称
lvcreate -l 20 -n drbdlv drbdvg 这是lv的另外一种制作方法 -l指定lv大小为20个PE
注意:不能将需要挂载的磁盘格式化
二.安装drbd
1.yum install gcc flex rpm-build kernel-devel -y #解决软件包依赖性
2.tar zxf drbd-8.4.3.tar.gz
3.cd drbd-8.4.3
4./configure --with-km --enable-spec #这时候会报错说是 drbd-8.4.3.tar.gz 包不在 SOURCE 目录中
5cd /root/
6.rpmbuild -bb drbd.spec 生成rpmbuild目录
7cp drbd-8.4.3.tar.gz /root/rpmbuild/SOURCES/ #拷过去
8cd drbd-8.4.3
9#编译生成 drbd 的 rpm 包
rpmbuild -bb drbd.spec
10#编译生成内核模块
rpmbuild -bb drbd-km.spec
11cd ~/rpmbuild/RPMS/x86_64
12rpm -ivh *
13modprobe -l |grep drbd
#查看 drbd 的内核模块是否安装成功
拷贝生成的 rpm 包到 server2,安装并查看下内核模块。
三.配置drbd(两台主机都要配置)
1. vim /etc/drbd.d/drbd.res #只要是以 res 结尾的文件都行,没有这些文件,这里需要新建
resource example { #example 是资源的名字,可以随便定义,但后面会用到
meta-disk internal; #metadata 的存放位置, internal 表示将 meta 存放到 drbd 挂载的磁盘分区的最后的位置上
device /dev/drbd1; #这个路径是最后做成的 drbd 设备的路径
syncer {
verify-alg sha1;
}
on desktop108.example.com {
disk /dev/drbdvg/drbdlv; #这里是 server1 做成的 LV 的路径
address 192.168.2.108:7789; #设置 drbd 的监听端口,用于与另一台主机通信
}
on desktop109.example.com {
disk /dev/drbdvg/drbdlv;
address 192.168.2.109:7789; #这里是 server2 做成的 LV 的路径,可以跟 sever1 的不同,只要是本机的一块 lv 设备就行
}
}
2.将这个配置文件拷贝到另一台主机的配置文件中
3.接着分别在两台主机上执行以下命令:
(1)drbdadm create-md lee
(2)/etc/init.d/drbd start
出现如下提示,说明启动成功,如果有报错,检查配置文件
Starting DRBD resources: [
create res: example
prepare disk: example
adjust disk: example
adjust net: example
4.将192.168.2.108 设置为 primary 节点,并同步数据:
(在 192.168.2.108 上执行以下命令)
(1)drbdsetup /dev/drbd1 primary --force
(2)在两台主机上查看同步状态:
watch cat /proc/drbd
(3)数据同步结束后创建并挂载文件系统:
mkfs.ext4 /dev/drbd1
mount /dev/drbd1 /var/www/
(4)存放数据:
cp -r /etc/* /var/www/
(5)卸载文件系统:
umount /dev/drbd1
(6)然后将主机设置为secondary节点
drbdadm secondary example
然后在另一台主机执行以下命令
(1)将主机设置为primary
drbdadm primary example
(2)挂载文件系统,查看数据是否同步:
mount /dev/drbd1 /var/www/html
注意:两台主机上的/dev/drbd1 不能同时挂载,只有状态为 primary 时,才能被挂载使
用,而此时另一方的状态为 secondary。
四.metadata
drbd 将数据的各种信息块保存在一个专用的区域里,这些 metadata 包括了
a,DRBD 设备的大小
b,产生的标识
c,活动日志
d,快速同步的位图
metadata 的存储方式有内部和外部两种方式,使用哪种配置都是在资源配置中定义的
内部 meta data
内部 metadata 存放在同一块硬盘或分区的最后的位置上
优点:metadata 和数据是紧密联系在一起的,如果硬盘损坏,metadata 同样就没有了,同样在恢复的时候,metadata 也会一起被
恢复回来
缺点:metadata 和数据在同一块硬盘上,对于写操作的吞吐量会带来负面的影响,因为应用程序的写请求会触发 metadata 的更新,
这样写操作就会造成两次额外的磁头读写移动。
外部 meta data
外部的 metadata 存放在和数据磁盘分开的独立的块设备上
优点:对于一些写操作可以对一些潜在的行为提供一些改进
缺点:metadata 和数据不是联系在一起的,所以如果数据盘出现故障,在更换新盘的时候就需要认为的干预操作来进行现有 node 对
新硬盘的同步了