使用DRBD进行磁盘复制
本教程展示了如何在 Alpine Linux 上配置分布式复制块设备 (DRBD) 设备。它假设您熟悉 DRBD 是什么以及为什么要使用它。如果不是这种情况,请参阅 DRBD 首页。
您还应该熟悉使用命令行工具创建磁盘分区、文件系统和逻辑卷。
除非另有说明,否则所有步骤都将在两台主机上执行。
关于配置
本教程中的示例使用两台主机:alpine1.domain 和 alpine2.domain。两者都是虚拟机。由于虚拟机需要相互通信,因此重要的是使用桥接适配器或内部网络,而不是网络地址转换 (NAT)。
虚拟硬件
单个 CPU 和 512M 内存就足够了。该示例使用单个磁盘,大小为 8G。
虚拟机 hypervisor 配置的详细信息各不相同,不在本文档的范围之内。
Alpine 操作系统
主机系统安装在 /dev/sda 上。ROOT_SIZE
环境变量用于将分区大小限制为 4G(例如 export ROOT_SIZE=4096 ; setup-alpine)并在磁盘上留下一些可用空间。可用空间将用于为 DRBD 创建逻辑卷。
为DRBD创建设备
DRBD 设备需要一个块设备作为基础。在本教程中,我使用逻辑卷 (/dev/vg0/drbd0)。如果您愿意,也可以在常规磁盘上使用分区,例如 /dev/sda4。
创建设备的过程需要您执行以下步骤
- 安装必要的软件包
- 为 LVM 创建分区
- 创建物理卷、卷组和逻辑卷
- 配置 LVM 在系统启动时启动。
您将运行以安装软件包和创建分区的命令如下所示
apk add cfdisk lvm2 cfdisk /dev/sda
您需要在驱动器的可用空间区域中创建一个分区,将类型更改为 Linux LVM,写入并退出。
完成之后,您可以继续创建逻辑卷。假设 /dev/sda4 是 LVM 的分区,则命令将如下所示
pvcreate /dev/sda4 vgcreate vg0 /dev/sda4 lvcreate -n drbd0 -L 1G vg0 rc-update add lvm boot
逻辑卷 /dev/vg0/drbd0 应该已准备好使用。在继续之前,运行 ls /dev/vg0/drbd0
进行验证。
DRBD 软件包和配置文件
在创建 DRBD 设备之前,您需要进行一些设置。
- 安装必要的软件包
- 收集主机的网络详细信息
- 根据网络和逻辑磁盘详细信息创建配置文件
首先,安装软件包。
apk add drbd-utils lsblk
接下来,您需要两台主机的主机名和 IP 地址。
uname -n ifconfig eth0
最后,您可以创建 DRBD 资源配置文件。在本示例中,它名为 drbd0.res,位于 /etc/drbd.d/ 目录中。需要在两台主机上创建此文件。
内容将类似于此示例
/etc/drbd.d/drbd0.res 的内容
行 disk /dev/vg0/drbd0;
应反映您正在使用的设备的名称。如果您没有使用逻辑卷,它可能类似于 disk /dev/sda4;
on alpine1.domain {
行应反映您的主机的名称。它应该与 uname -n
的输出完全匹配。
address 192.168.0.11:7789;
行应反映主机 alpine1 的 IP 地址。address 192.168.0.12:7789;
应反映主机 alpine2。端口号不需要更改。
DRBD 设备
现在配置文件已就位,drbdadm 用于创建 DRBD 设备并使其可供使用。只需要两个命令。
drbdadm create-md drbd0 drbdadm up drbd0
您可以使用 lsblk
和 drbdadm status
来验证是否成功。
从 lsblk 命令中,您应该看到类似以下示例的内容
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi ├─sda2 8:2 0 920M 0 part [SWAP] ├─sda3 8:3 0 4G 0 part / └─sda4 8:4 0 3G 0 part └─vg0-drbd0 253:0 0 1G 0 lvm └─drbd0 147:0 0 1023.9M 0 disk
drbd status
的输出将类似于下面显示的内容。“Inconsistent”和“Connecting”此时不是问题。
# drbdadm status drbd0 role:Primary disk:Inconsistent peer role:Secondary replication:Established peer-disk:Connecting
主节点和辅助节点
在本示例中,我们将指定 alpine1 主机作为主节点,alpine2 作为辅助节点。
以下命令应仅从主节点(alpine1 主机)运行。
alpine1:~# drbdadm primary --force drbd0
现在,在辅助主机 (alpine2) 上运行此命令
alpine2:~# drbdadm secondary drbd0
再次使用 drbdadm status
检查状态,最终它将显示磁盘和复制状态均为 UpToDate。
使用设备
现在一切都已设置好,您可以像使用任何其他磁盘分区一样使用 /dev/drbd0。创建文件系统、挂载它、复制文件等。从现在开始,所有命令都应在主节点上执行。
以下是一些示例
alpine1:~# mkfs.ext4 /dev/drbd0 alpine1:~# e2fsck /dev/drbd0 alpine1:~# mount -t ext4 /dev/drbd0 /mnt
这些命令都不能在辅助节点上工作。这是 DRBD 系统的设计。如果您尝试使用该设备,您将看到如下所示的错误。
alpine2:~# e2fsck /dev/drbd0 e2fsck 1.46.4 (18-Aug-2021) e2fsck: Read-only file system while trying to open /dev/drbd0 Disk write-protected; use the -n option to do a read-only check of the device.
同样,这是设计使然。虽然可以配置双主系统,但这超出了本文档的范围。有关更多信息,请参阅 https://kb.linbit.com/drbd-9-and-dual-primary。
当出现问题时
使用 DRBD 的全部原因是为了在主节点发生故障时保护您的数据。因此,最好了解一下这种情况以及如何从中恢复。
以下是简要步骤
- 关闭 alpine1 以模拟主节点故障。
- 将 alpine2 提升为主节点
- 在 alpine2 上挂载 drbd0 的文件系统。
但在那之前,在 alpine1 上的 /mnt 下创建一个测试文件。任何内容都可以,这只是为了验证该过程是否有效。
然后,当 alpine1 关闭电源时,运行 drbdadm 命令以使 alpine2 成为主节点
alpine2:~# drbdadm primary drbd0
检查状态。您应该看到磁盘为 UpToDate,但对等端为 Connecting。这是预期的,因为 alpine1 已关闭电源。
alpine2:~# drbdadm status drbd0 role:Primary disk:UpToDate peer connection:Connecting
真正的证明在于文件系统和您创建的测试文件。为了验证,将 alpine2 的 /dev/drbd0 挂载到 /mnt 上,看看它包含什么。
alpine2:~# e2fsck /dev/drbd0 e2fsck 1.46.4 (18-Aug-2021) /dev/drbd0: clean, 12/65536 files, 8859/262127 blocks alpine2:~# mount -t ext4 /dev/drbd0 /mnt alpine2:~# ls /mnt lost+found test.txt
现在 alpine2 是主节点,alpine1 必须保持关闭电源。如果您想重新启动 alpine1,请先将 alpine2 重新配置为辅助节点。
alpine2:~# drbdadm secondary drbd0
有关更多信息,请参阅 LinBit DRBD 网站。
重要提示
DRBD(或任何其他复制存储)不能替代良好的备份和恢复计划。如果您的数据很重要,请务必 备份它!