注意

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

Windows上的RBD

The rbd命令可用于创建、删除、导入、导出、映射或取消映射镜像,就像在Linux上一样。确保检查RBD基本命令指南进行操作。

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

请查看安装指南以开始。

Windows服务

在Windows上,rbd-wnbd守护进程由一个中央服务管理。这使得守护进程与其原始的Windows会话解耦。同时,服务负责重新创建持久映射,通常在主机启动时。

注意,每个主机上只能运行一个这样的服务。

默认情况下,所有镜像映射都是持久的。可以使用-onon-persistent rbd标志指示 cephadm 移除主机以及 CRUSH 桶。

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

为了能够重新连接镜像,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-rbdWindows服务。

查看当前由 cephadm 使用的文件模板。

集成

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

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

映射镜像

工作流程和CLI与Linux版本类似,但有几个显著差异:

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

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

  • 参数service命令被添加,允许rbd-wnbd作为Windows服务运行。

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

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

映射的镜像可以直接被主机使用,或者暴露给Hyper-V虚拟机。

Hyper-V虚拟机磁盘

以下示例导入RBD镜像并使用它启动Hyper-V虚拟机:

# 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 Failover Cluster不能使用WNBD磁盘作为集群共享卷(CSV)的基础存储。主要原因是因为WNBDrbd-wnbd还不支持SCSI持久保留功能。

Hyper-V磁盘寻址

警告

Hyper-V通过编号而不是SCSI ID来标识直通虚拟机磁盘,尽管磁盘编号可以在主机重新启动后更改。这意味着虚拟机在主机重新启动后可能会使用错误的磁盘,这是一个重要的安全问题。这个问题也影响iSCSI和Fibre Channel磁盘。

有几种可能的方法可以避免这个Hyper-V限制:

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

  • 使用Hyper-VAutomaticStartAction设置来阻止虚拟机使用错误的磁盘启动,并有一个脚本在重新启动它们之前更新虚拟机磁盘的连接。可以使用ElementNameMsvm_StorageAllocationSettingDataWMI 类的字段来标记虚拟机磁盘的连接。

  • 使用Openstack Hyper-V驱动程序,它会在重新启动它们之前自动刷新虚拟机磁盘的连接。

自动挂载的磁盘

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

不幸的是,Windows根据磁盘编号恢复磁盘状态,忽略磁盘唯一标识符。然而,磁盘编号在重新连接后可能会更改。这个问题也影响iSCSI和Fibre Channel磁盘。

假设SAN策略被设置为offlineShared,三个RBD镜像被附加,磁盘1被设置为在线。重新启动后,磁盘1将变为在线,但它现在可能对应于不同的RBD镜像。如果主机上挂载的磁盘实际上是为虚拟机准备的,这可能是一个问题。

故障排除

请参考Windows 故障排除页面。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.