原始磁盘块设备上的 DRBD

Yve*_*tin 7 drbd raw-disk

我尝试在/dev/sdb没有分区表的原始磁盘设备上设置 DRBD ,也没有 LVM 堆栈 PV/VG/LV

由于这个磁盘是虚拟的,并且我使用的管理程序允许动态磁盘扩展,我不想在扩展我的 DRBD 文件系统时打扰 LVM 操作或重新分区

我的资源定义再简单不过了

resource data {
  device  /dev/drbd1;
  meta-disk internal;
  disk    /dev/sdb;
  on node1 {
    address 10.10.10.16:7789;
  }
  on node2 {
    address 10.10.10.17:7789;
  }
}
Run Code Online (Sandbox Code Playgroud)

创建元数据作品

# drbdadm create-md data
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
Run Code Online (Sandbox Code Playgroud)

但是附加操作失败

 # drbdadm attach data
 1: Failure: (127) Device minor not allocated
 additional info from kernel:
 unknown minor
 Command 'drbdsetup-84 attach 1 /dev/sdb /dev/sdb internal' terminated with exit code 10
Run Code Online (Sandbox Code Playgroud)

错误消息确实听起来像命令期望分区表索引作为设备次要代码。

我应该如何将原始设备附加到 DRBD 资源?

Mat*_*man 5

drbdadm attach data 不是创建元数据后要使用的唯一命令。

以下过程之一应该适用于启动您的设备:

drbdadm create-md data
drbdadm up data
Run Code Online (Sandbox Code Playgroud)

- 或者 -

drbdadm create-md data
drbdsetup-84 new-resource data
drbdsetup-84 new-minor data 1 0 
drbdmeta 1 v08 /dev/sdb internal apply-al 
drbdsetup-84 attach 1 /dev/sdb /dev/sdb internal
drbdsetup-84 connect data ipv4:10.10.10.16:7789 ipv4:10.10.10.17:7789 --protocol=C
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您将拥有一个连接状态为“已连接”且磁盘状态为“不一致/不一致”的设备;这将始终/只有在您在两个节点上创建全新的元数据后才会如此。

从那里,只需选择一个节点来提升到 Primary,这将导致 DRBD 从Primary => Secondary同步:

# drbdadm primary data --force 
Run Code Online (Sandbox Code Playgroud)

从现在开始,您应该永远不会在正常情况下需要使用--force来提升您的 DRBD 设备。

不过,你也说过:

由于这个磁盘是虚拟的,并且我使用的管理程序允许动态磁盘扩展,我不想在扩展我的 DRBD 文件系统时打扰 LVM 操作或重新分区

这可能不适用于 DRBD。DRBD 将它的元数据放在块设备的末尾,并在该元数据中跟踪块(和其他东西)的数量。动态扩展后备块设备可能会给您带来问题。


Yve*_*tin 2

在 Debian DRBD 软件包的特殊情况下,不需要操作“附加数据”。

以下是在 Debian 上启动并运行 DRBD 的最小顺序:

  • 在两个节点上创建资源文件/etc/drbd.d/data.res,通常用于定义/dev/drbd1(请记住此卷号1以进行清除位图操作!)
  • drbdadm create-md data在两个节点上调用
  • 在两个节点上启动服务,它们应该等待对方准备好:systemctl start drbd.service
  • 使用确认Connected状态drbdadm cstate data如果没有,请不要继续操作,直到解决任何服务启动或网络连接问题。
  • 仅在primary节点上,清除位图以防止无用的初始同步:(drbdadm -- --clear-bitmap new-current-uuid data/1注意最后一个参数resourceName/volumeNumber:)
  • 仅在primary节点上,将节点提升为primarydrbdadm primary data

从那时起,在primary节点上,/dev/drbd1设备可用于任何常规块操作,例如blockdevmkfs

请小心触发清除位图操作,这会使辅助节点上的任何数据都无法恢复。顺便说一句,它对于初始设置来说非常方便,因为它可以防止辅助节点存储在几个小时内完全写入,强制虚拟化层在存储上分配块,这对于精简配置来说很烦人。