DRBD是Distributed Replicated Block Device的缩写,它是一种基于软件的,无共享,复制的开源存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。
工作原理:当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上,以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(从节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还保留有一份相同的数据备份可以继续使用。
环境
本文使用64位CentOS,基本环境:
DRBD 服务器A(目录A) :192.168.0.105,hostname:DRBD_A
DRBD 服务器B(目录B) :192.168.0.106,hostname:DRBD_B
CentOS安装DRBD
安装依赖:
yum update
yum install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel wget
创建几个构建DRBD需要使用的目录:
mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
下载DRBD源码:http://oss.linbit.com/drbd/
wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz
解压下载的两个tar包:
tar -zxvf drbd-8.*.tar.gz
tar -zxvf drbd-utils-latest.tar.gz
编译DRBD:
cd drbd-8*
make km-rpm KDIR=/usr/src/kernels/3.10.0-327.28.3.el7.x86_64/
注意替换KDIR,让其指向内核源码。
编译生成的两个rpm包:
编译drbd-utils:
cd ..
cd drbd-utils-8.9.6
./configure
make rpm
最后,安装我们构建的rpm包:
cd /root/rpmbuild/RPMS/x86_64
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*
如果你不想自己编译源码安装,可以使用现成的包:https://www.drbd.org/en/doc/users-guide-90/s-distro-packages
在服务器A和B上分别安装DRBD。
DRBD的配置
查看hostname:
uname -n
# DRBD_A/DRBD_B
在后面配置DRBD时,需要用到主机名。
DRBD模块:
modprobe drbd
lsmod | grep drbd
在两个服务器上创建一个新的分区做为DRDB设备,例如,我在新硬盘/dev/sdb上创建/dev/sdb1分区:
fdisk /dev/sdb
然后根据提示进行分区。
在两个服务器上分别创建配置文件:
vim /etc/drbd.d/s1.res
resource s1 {
on DRBD_A {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.0.105:7799;
meta-disk internal;
}
on DRBD_B {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.0.106:7799;
meta-disk internal;
}
}
配置文件创建完成之后,在两个服务器上分别执行如下命令,初始化分区:
drbdadm create-md s1
在两个服务器上分别启动DRBD服务:
/etc/init.d/drbd start
把DRBD_A做为主服务器:
drbdadm -- --overwrite-data-of-peer primary s1
你可以时不时的使用如下命令查看DRBD服务的状态信息:
/etc/init.d/drbd status
现在,写入DRBD_A分区(/dev/drbd1)的数据都会同步到DRBD_B。
测试
在A服务器上挂载/dev/drdb1:
mount /dev/drbd1 /media
随便创建几个文件,看看服务器B的DRBD分区是否有同样的文件。
参考文档:https://www.drbd.org/en/doc/users-guide-90