注意

本文档适用于 Ceph 的开发版本。

RBD on Windows

rbd 命令可用于创建、删除、导入、导出、映射或取消映射镜像,就像在 Linux 上一样。请务必查看 RBD 基本命令指南。

librbd.dll 也可供能够原生使用 Ceph 的应用程序使用。

请查看安装指南以开始使用。

注意

有关客户端软件包支持,请参阅操作系统建议

Windows 服务

在 MS Windows 上,rbd-wnbd 守护程序由一个集中式服务管理。这使得守护程序可以与它们源自的 Windows 会话解耦。同时,该服务负责重新创建持久性映射,通常是在主机启动时。

请注意,每个主机上只能运行一个此类服务。

默认情况下,所有镜像映射都是持久性的。可以使用 -onon-persistent rbd 标志请求非持久性映射。

除非明确取消映射,否则持久性映射会在服务启动时重新创建。服务停止时会断开映射。这还允许调整 Windows 服务的启动顺序,以便在启动可能依赖于 RBD 镜像的服务(例如 VMMS)之前映射 RBD 镜像。

为了能够重新连接镜像,rbd-wnbd 会将映射信息存储在 Windows 注册表的以下位置:SYSTEM\CurrentControlSet\Services\rbd-wnbd

以下命令可用于配置服务。请相应地更新 rbd-wnbd.exe 路径

New-Service -Name "ceph-rbd" `
            -Description "Ceph RBD Mapping Service" `
            -BinaryPathName "c:\ceph\rbd-wnbd.exe service" `
            -StartupType Automatic

请注意,Ceph MSI 安装程序负责创建 ceph-rbd Windows 服务。

用法

集成

RBD 镜像可以暴露给操作系统和主机 Windows 分区,也可以像 iSCSI 磁盘一样附加到 Hyper-V VM。

从 Openstack Wallaby 开始,Nova Hyper-V 驱动程序可以将 RBD Cinder 卷附加到 Hyper-V VM。

映射镜像

工作流程和 CLI 与 Linux 对应项相似,但有一些明显的区别

  • 无法请求设备路径。磁盘编号和路径将由 Windows 选择。如果用户在映射镜像时提供了设备路径,它将用作标识符,也可以在取消映射镜像时使用。

  • 添加了 show 命令,它描述了特定的映射。这可用于检索磁盘路径。

  • 添加了 service 命令,允许 rbd-wnbd 作为 Windows 服务运行。默认情况下,所有映射都是持久性的,除非明确取消映射,否则在服务停止时会重新创建。服务停止时会断开映射。

  • list 命令还包括一个 status 列。

service 模式的目的是确保映射在重新启动后仍然存在,并且可以调整 Windows 服务的启动顺序,以便在启动可能依赖于 RBD 镜像的服务(例如 VMMS)之前映射 RBD 镜像。

映射的镜像可以直接由主机使用,或暴露给 Hyper-V VM。

Hyper-V VM 磁盘

以下示例导入 RBD 镜像并使用它启动 Hyper-V VM

# Feel free to use any other image. This one is convenient to use for
# testing purposes because it's very small (~15MB) and the login prompt
# prints the pre-configured password.
wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img `
     -OutFile cirros-0.5.1-x86_64-disk.img

# We'll need to make sure that the imported images are raw (so no qcow2 or vhdx).
# You may get qemu-img from https://cloudbase.it/qemu-img-windows/
# You can add the extracted location to $env:Path or update the path accordingly.
qemu-img convert -O raw cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.raw

rbd import cirros-0.5.1-x86_64-disk.raw
# Let's give it a hefty 100MB size.
rbd resize cirros-0.5.1-x86_64-disk.raw --size=100MB

rbd device map cirros-0.5.1-x86_64-disk.raw

# Let's have a look at the mappings.
rbd device list
Get-Disk

$mappingJson = rbd-wnbd show cirros-0.5.1-x86_64-disk.raw --format=json
$mappingJson = $mappingJson | ConvertFrom-Json

$diskNumber = $mappingJson.disk_number

New-VM -VMName BootFromRBD -MemoryStartupBytes 512MB
# The disk must be turned offline before it can be passed to Hyper-V VMs
Set-Disk -Number $diskNumber -IsOffline $true
Add-VMHardDiskDrive -VMName BootFromRBD -DiskNumber $diskNumber
Start-VM -VMName BootFromRBD

Windows 分区

以下示例创建一个空的 RBD 镜像,将其附加到主机并初始化分区

rbd create blank_image --size=1G
rbd device map blank_image -onon-persistent

$mappingJson = rbd-wnbd show blank_image --format=json
$mappingJson = $mappingJson | ConvertFrom-Json

$diskNumber = $mappingJson.disk_number

# The disk must be online before creating or accessing partitions.
Set-Disk -Number $diskNumber -IsOffline $false

# Initialize the disk, partition it and create a filesystem.
Get-Disk -Number $diskNumber | `
    Initialize-Disk -PassThru | `
    New-Partition -AssignDriveLetter -UseMaximumSize | `
    Format-Volume -Force -Confirm:$false

# Show the partition letter (for example, "D:" or "F:"):
(Get-Partition -DiskNumber $diskNumber).DriveLetter

SAN 策略

Windows SAN 策略决定了哪些磁盘将自动挂载。默认策略 (offlineShared) 指定

所有新发现的、不在共享总线(如 SCSI 和 iSCSI)上的磁盘都会联机并设置为读写。默认情况下,离线的磁盘将是只读的。”

请注意,最近的 WNBD 驱动程序版本将 rbd-wnbd 磁盘报告为 SAS,这也被视为共享总线。因此,默认情况下磁盘将离线且只读。

为了使磁盘联机(挂载磁盘分区)并清除只读标志,请使用以下命令

Set-Disk -Number $diskNumber -IsOffline $false
Set-Disk -Number $diskNumber -IsReadOnly $false

请查看限制部分,了解影响自动挂载磁盘的 Windows 限制。

Windows 文档

限制

CSV 支持

目前,Microsoft 故障转移群集无法将 WNBD 磁盘用作群集共享卷 (CSV) 的底层存储。主要原因是 WNBDrbd-wnbd 尚不支持 *SCSI Persistent Reservations* 功能。

Hyper-V 磁盘寻址

警告

Hyper-V 通过编号而不是 SCSI ID 来标识直通 VM 磁盘,尽管磁盘编号可能会在主机重新启动时发生变化。这意味着 VM 在主机重新启动后可能会使用不正确的磁盘,这是一个重要的安全问题。此问题也影响 iSCSI 和 Fibre Channel 磁盘。

有几种方法可以避免此 Hyper-V 限制

  • 使用 NTFS/ReFS 分区来存储 VHDX 镜像文件,而不是直接附加 RBD 镜像。这可能会对 IO 性能产生轻微影响。

  • 使用 Hyper-V AutomaticStartAction 设置来防止 VM 使用不正确的磁盘启动,并使用脚本在重新开机之前更新 VM 磁盘附件。 Msvm_StorageAllocationSettingData WMI 类的 ElementName 字段可用于标记 VM 磁盘附件。

  • 使用 Openstack Hyper-V 驱动程序,它会在重新开机之前自动刷新 VM 磁盘附件。

自动挂载的磁盘

标记为“联机”或“可写”的磁盘在重新连接后(例如由于主机重新启动、Ceph 服务重启等)将保持这种状态。

不幸的是,Windows 根据磁盘编号恢复磁盘状态,而忽略了磁盘唯一标识符。但是,磁盘编号在重新连接后可能会发生变化。此问题也影响 iSCSI 和 Fibre Channel 磁盘。

假设 SAN 策略设置为 offlineShared,附加了三个 RBD 镜像,并且磁盘 1 已联机。重新启动后,磁盘 1 将联机,但它现在可能对应于另一个 RBD 镜像。如果挂载在主机上的磁盘实际上是为 VM 准备的,这可能会成为一个问题。

故障排除

请查阅 Windows 故障排除页面。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入