DRBD的全称为:Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,基于软件的,无共享(shared-nothing),对硬盘、分区、逻辑卷进行复制镜像的存储解决方案。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。
工作原理:Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。DRBD不需要任何的硬件投资,利用drbd作为共享存储设备,比存储网络要实惠的多;原理图:

181538109.png

安装部分:
如果系统内核(linux)版本低于2.6.33,在安装软件之前需要加载DRBD模块,如果高于(或等于)2.6.33,则只安装客户端软件。
如果没有安装DRBD模块,会在启动drbd时出现如下错误:

Starting DRBD resources: Can not load the drbd module.
从www.drbd.org下载drbd-8.3.8.1.tar.gz,分别在两个节点上编译安装:
注意,DRBD需要内核模块支持,2.6.33后的Linux内核已内置DRBD的支持,在此版本前,安装时需要kernel-devel包,同时编译drbd时要带上--with-km。
#./configure --prefix=/ --with-km
#make
#make install
安装成功之后/sbin目录下面有drbdadm,drbdmeta,drbdsetup命令,以及/etc/init.d/drbd启动脚本。(多半时候是在使用drbdadm ,它其实调用的是drbdsetup drbdmeta两个命令)
在这里我准备的是两个物理分区,分区大小必须一致;

配置部分:
/etc/drbd.conf

global {
usage-count no; #统计drbd的使用
}
common {
syncer {rate 100M;} #同步速率,单位是字节
}
resource r0 {
protocol C; #使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
disk {
on-io-error detach;
}
net { #通信验证算法信息,及脑裂处理信息
cram-hmac-alg "sha1";
shared-secret "FootFunFactory";
after-sb-0pri discard-younger-primary;
after-sb-1pri call-pri-lost-after-sb;
rr-conflict disconnect;
}
syncer {
rate 100M;
al-extents 257;
}
on drbd-master{ #具体主机磁盘信息,后面是主机名,在/etc/hosts 注明;端口是7789
device /dev/drbd0;
disk /dev/sdb;
address 192.168.6.101:7789;
meta-disk internal;
}
on centos.weipengfei.net{
device /dev/drbd0; #device名字必须是drbd开头,后面是数字,从0开始,最大为147
disk /dev/sdc;
address 192.168.6.135:7789;
meta-disk internal;
}
} 配置的详细信息,后续再谈;

启动之前的操作:

分别在两台主机的drbd分区上,创建DRBD记录信息的数据块,分别在两台主机上运行:

drbdadm create-md r0

在两节点分别启动服务:

/etc/init.d/drbd start

查看节点状态:

cat /proc/drbd

1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2007644

设置主节点

于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:

drbdadm -- --overwrite-data-of-peer primary all

第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:

/sbin/drbdadm primary r0

执行此命令后,开始同步两台机器对应磁盘的数据

如果第一次设置主备节点时使用“/sbin/drbdadm primary r0”命令,那么会提示如下错误:
0: State change failed: (-2) Need access to UpToDate data Command '/sbin/drbdsetup 0 primary' terminated with exit code 17

只要第一次用上面命令成功后,以后就可以用“/sbin/drbdadm primary r0”命令了。

格式化文件系统

由于mount操作只能在主节点进行,所以只有设置了主节点后才能格式化磁盘分区,然后挂载:

mkfs.ext3 /dev/drbd0

mount /dev/drbd0 /mnt


主备节点切换

1、停止drbd服务的切换:

关闭主节点服务,此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:

drbdadm -- --overwrite-data-of-peer primary all

当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。

2、正常切换

在主节点卸载磁盘分区,然后执行

drbdadm secondary all

如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:
2: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup 2 primary' terminated with exit code 11

接着,在备用节点执行

drbdadm primary all

最后在备用节点挂载磁盘分区即可;