注意
本文档适用于 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-rbd
Windows服务。
查看当前由 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)的基础存储。主要原因是因为WNBD
和rbd-wnbd
还不支持SCSI持久保留功能。
Hyper-V磁盘寻址
警告
Hyper-V通过编号而不是SCSI ID来标识直通虚拟机磁盘,尽管磁盘编号可以在主机重新启动后更改。这意味着虚拟机在主机重新启动后可能会使用错误的磁盘,这是一个重要的安全问题。这个问题也影响iSCSI和Fibre Channel磁盘。
有几种可能的方法可以避免这个Hyper-V限制:
自动挂载的磁盘
标记为“在线”或“可写”的磁盘在重新连接后(例如由于主机重新启动、Ceph服务重新启动等)将保持这种状态。
不幸的是,Windows根据磁盘编号恢复磁盘状态,忽略磁盘唯一标识符。然而,磁盘编号在重新连接后可能会更改。这个问题也影响iSCSI和Fibre Channel磁盘。
假设SAN策略被设置为offlineShared
,三个RBD镜像被附加,磁盘1被设置为在线。重新启动后,磁盘1将变为在线,但它现在可能对应于不同的RBD镜像。如果主机上挂载的磁盘实际上是为虚拟机准备的,这可能是一个问题。
故障排除
请参考Windows 故障排除页面。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.