注意
本文档适用于 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) 的底层存储。主要原因是 WNBD 和 rbd-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 故障排除页面。