使用DRBD进行磁盘复制

来自 Alpine Linux

本教程展示了如何在 Alpine Linux 上配置分布式复制块设备 (DRBD) 设备。它假设您熟悉 DRBD 是什么以及为什么要使用它。如果不是这种情况,请参阅 DRBD 首页

您还应该熟悉使用命令行工具创建磁盘分区、文件系统和逻辑卷。

除非另有说明,否则所有步骤都将在两台主机上执行。

关于配置

本教程中的示例使用两台主机:alpine1.domainalpine2.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

创建设备的过程需要您执行以下步骤

  1. 安装必要的软件包
  2. 为 LVM 创建分区
  3. 创建物理卷、卷组和逻辑卷
  4. 配置 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 设备之前,您需要进行一些设置。

  1. 安装必要的软件包
  2. 收集主机的网络详细信息
  3. 根据网络和逻辑磁盘详细信息创建配置文件

首先,安装软件包。

apk add drbd-utils lsblk

接下来,您需要两台主机的主机名和 IP 地址。

uname -n ifconfig eth0

最后,您可以创建 DRBD 资源配置文件。在本示例中,它名为 drbd0.res,位于 /etc/drbd.d/ 目录中。需要在两台主机上创建此文件。

内容将类似于此示例

/etc/drbd.d/drbd0.res 的内容

resource drbd0 { device minor 0; disk /dev/vg0/drbd0; meta-disk internal; protocol C; on alpine1.domain { address 192.168.0.11:7789; } on alpine2.domain { address 192.168.0.12:7789; } }

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

您可以使用 lsblkdrbdadm 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 的全部原因是为了在主节点发生故障时保护您的数据。因此,最好了解一下这种情况以及如何从中恢复。

以下是简要步骤

  1. 关闭 alpine1 以模拟主节点故障。
  2. 将 alpine2 提升为主节点
  3. 在 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(或任何其他复制存储)不能替代良好的备份和恢复计划。如果您的数据很重要,请务必 备份它!

参见