简介
DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块。
通常将两个节点的整块磁盘(或者分区,LVM逻辑卷等设备)规划为DRBD设备。
如果primary节点宕机,secondary节点可以在高可用集群中提升成为primary节点。
当接收到数据,内核判断是发往到drbd设备的数据,存储到本机,同时将一份副本网络传输到secondary节点。
传输过程包括三种方式:异步(A),半同步(B),同步(C)。
通常作为双节点环境保持数据一致性的一种解决方案。
一 环境准备
1 操作系统
准备两个操作系统环境
建议使用多块网卡环境,将drbd的网络流量独立出来减缓业务网卡压力。
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.90.172 test1
172.16.90.174 test2
192.168.1.11 test11
192.168.1.13 test22
# cat /etc/openEuler-release
openEuler release 20.03 (LTS-SP1)
# uname -a
Linux test3 4.19.90-2012.5.0.0054.oe1.x86_64 #1 SMP Tue Dec 22 15:58:47 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/yum.repos.d/openEuler.repo
[everything]
name=everything
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler
[EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/EPOL/$basearch/
enabled=1
gpgcheck=1
# dnf install -y drbd drbd-kernel drbd-utils drbd-pacemaker drbd-udev drbd-xen drbd-bash-completion
# rpm -qa |grep drbd
drbd-bash-completion-9.5.0-5.oe1.x86_64
drbd-utils-9.5.0-5.oe1.x86_64
drbd-udev-9.5.0-5.oe1.x86_64
drbd-xen-9.5.0-5.oe1.x86_64
drbd-9.5.0-5.oe1.x86_64
drbd-kernel-9.0.27-1.oe1.x86_64
drbd-pacemaker-9.5.0-5.oe1.x86_64
# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
# systemctl stop firewalld
# systemctl disable firewalld
2 磁盘
每个操作系统中存在一个单独的磁盘用于DRBD,本文档中均为/dev/sdb设备,大小为1G
# fdisk -l /dev/sdb
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
二 配置
说明:
磁盘设备: /dev/sdb 1G
DRBD设备: /dev/drbd
DRBD resource名称:r0
DRBD设备挂载点: /test
/etc/drbd.d目录中,创建一个以.res结尾的资源文件,本文档中为/etc/drbd.d/r0.res。
两个节点上DRBD相关配置文件内容保持一致,本文档中仅增加了r0.res资源文件。
# cat /etc/drbd.d/r0.res
resource r0 {
on test1 {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.1.11:7789;
meta-disk internal;
}
on test3 {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.1.13:7789;
meta-disk internal;
}
}
注意:文件中使用的test1和test3分别是主机名称。
分别在两个节点初始化元数据信息
# drbdadm create-md r0
initializing activity log
initializing bitmap (32 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
注意:
如果设备非首次使用,初始化之前使用如下命令进行清理。
# dd if=/dev/zero of=/dev/sdb bs=1M count=100
# systemctl is-enabled drbd
disabled
注意:
如果是在类似pacemaker的场景中使用DRBD作为集群资源,drbd服务的启动停止等由pacemaker控制,保持drbd服务开机自启动为disabled状态。
如果是在单独使用drbd的场景中,设置drbd服务为enable状态。
# systemctl start drbd
# systemctl status drbd
# lsmod | grep drbd
drbd_transport_tcp 24576 1
drbd 532480 2 drbd_transport_tcp
libcrc32c 16384 4 nf_conntrack,nf_nat,drbd,sctp
通过命令 drbdsetup show 可以直接查看资源配置情况
在其中一个节点上执行如下命令,强制设置为primary,使其开始同步:
# drbdsetup primary r0 --force
primary节点上状态:
# drbdsetup status
r0 role:Primary
disk:UpToDate
test3 role:Secondary
peer-disk:UpToDate
secondary节点状态:
# drbdadm status
r0 role:Secondary
disk:UpToDate
test1 role:Primary
peer-disk:UpToDate
primary节点上状态:
# mkfs.xfs -f /dev/drbd0
meta-data=/dev/drbd0 isize=512 agcount=4, agsize=65532 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=262127, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1566, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
两个节点上创建挂载目录:
mkdir -p /test
primary节点上:
# mount /dev/drbd0 /test
# mount |grep test
/dev/drbd0 on /test type xfs (rw,relatime,attr2,inode64,noquota)
# echo "hello" > /test/a.txt
# cat /test/a.txt
hello
# umount /dev/drbd0
# drbdsetup secondary r0
secondary节点上执行操作提升为primary节点:
# drbdsetup primary r0
# drbdsetup status
r0 role:Primary
disk:UpToDate
hatest1 role:Secondary
peer-disk:UpToDate
# mount /dev/drbd0 /test
# cat /test/a.txt
hello
至此,DRBD设备可以确认正常工作。