Windows 上直接使用Ceph以及性能测试!


40ddf3ae5c157f155a74e60e00685d70.gif

新钛云服已为您服务1296

4b9438425713141527c4d8654824763d.gif

在 Windows 上本地使用 Ceph

由于Cloudbase SolutionsSuse 的合作,当前Ceph 16 (Pacific)提供了 Windows 原生支持。

Ceph 可能是最常用的软件定义存储解决方案。根据调查(https://www.openstack.org/analytics),超过 70% 的 OpenStack 部署由 Ceph 提供支持。考虑到它可以在商用硬件上运行,而且能够扩展到数百个存储节点并提供不错的性能,这也就不足为奇了。

在 Windows 上使用 Ceph 一直是一个痛点,以往需要iSCSI网关等代理或使用 Samba重新导出CephFS。这些方法提供了次优的性能并使部署架构过于复杂。现在所有麻烦都没有了,因为RBD和 CephFS 可以原生地在 Windows 上使用。

为获得最佳性能和功能,建议使用Windows Server 2019Windows Server 2016也受支持,但有一些已知限制。较旧的 Windows Server 版本以及客户端版本(如 Windows 10)可能也能正常工作,但目前不受支持。

112ab4ddbd11e32883c969bf4f024cc5.png

安装:

这个 MSI 安装程序(https://cloudbase.it/ceph-for-windows/)是在 Windows 上安装 Ceph 的推荐方式。除了 Ceph 二进制文件,它还捆绑了WNBD驱动程序,用于映射 RBD 镜像。

如果您更喜欢手动构建和安装Ceph(https://github.com/ceph/ceph/blob/master/README.windows.rst)和WNBD(https://github.com/cloudbase/wnbd),请参考这些指南。

配置:

在 Windows 上使用 Ceph 需要最少的配置。默认配置文件位置是`C:\ProgramData\ceph\ceph.conf*。

这是一个配置示例。不要忘记填写正确的 Ceph Monitor 地址并在指定位置提供 Ceph 密钥环文件。目前,必须使用斜杠“/”而不是反斜杠“\”作为路径分隔符。

[global]
    log to stderr = true
    ; Uncomment the following to use Windows Event Log
    ; log to syslog = true

    run dir = C:/ProgramData/ceph/out
    crash dir = C:/ProgramData/ceph/out

    ; Use the following to change the cephfs client log level
    ; debug client = 2
[client]
    keyring = C:/ProgramData/ceph/keyring
    ; log file = C:/ProgramData/ceph/out/$name.$pid.log
    admin socket = C:/ProgramData/ceph/out/$name.$pid.asok

    ; client_permissions = true
    ; client_mount_uid = 1000
    ; client_mount_gid = 1000
[global]
    mon host = <ceph_monitor_addresses>

RBD:

Rados 块设备 (RBD)一直是这项工作的主要重点。您可能已经熟悉的相同 CLI 可用于创建 RBD 映像并将它们附加到主机和Hyper-V虚拟机。

以下 PowerShell 示例创建一个 RBD 映像,将其附加到主机并在顶部添加一个NTFS分区。

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

$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 fileystem.
Get-Disk -Number $diskNumber | `
    Initialize-Disk -PassThru | `
    New-Partition -AssignDriveLetter -UseMaximumSize | `
    Format-Volume -Force -Confirm:$false

默认情况下,所有 RBD 映射都是持久的。可以使用上述 MSI 安装程序部署的“ ceph-rbd ”服务负责在主机重新启动后重新附加 RBD 映像。这还允许调整 Windows 服务启动顺序,以便在启动可能依赖它的服务之前映射 RBD 映像。

以下屏幕截图显示了附加到 Hyper-V 虚拟机的 RBD 镜像以及基准测试结果。我们将在以后的文章中深入研究基准测试。

483d00049e7b21ca8b9badb5035c4aca.png

WNBD:

RBD 映像通过使用WNBD Storport Miniport 驱动程序(https://github.com/cloudbase/wnbd)公开为 SCSI 磁盘,作为此移植工作的一部分编写。

WNBD 驱动程序提供的一项有趣功能是 NBD 客户端功能,允许它用于附加任意 NBD 导出。在实施更有效的机制之前,这是附加 RBD 图像的默认方式。由于它的实用性,这个特性被保留了下来,尽管它可能在某个时候被移到驱动程序之外,利用与rbd-wnbd相同的 API 。

要挂载独立的 NBD 映像,请使用以下命令:

wnbd-client map export_name $nbdAddress --port $nbdPort

CephFS:

Windows 上的CephFS支持是我们的第二个主要目标,目前处于试验阶段。我们正在使用类似于 FUSE 的Dokany以及看似废弃的 ceph-dokan项目的改进版本。

以下简单命令使用“X:”驱动器号挂载 CephFS:

ceph-dokan.exe -l x

当前限制:

虽然移植的当前状态已经涵盖了大多数的情况,但您应该注意一些限制。这些缺失的功能可能会在后续版本中实现。

  • RBD镜像还不能用于备份群集共享卷(CSV)Windows Server故障转移群集(WSFC) ,这需要SCSI永久保留的支持

  • WNBD 磁盘无法实时调整大小

  • Python 绑定不可用

  • Ceph CLI工具还不能以本机方式使用。但是,它可以通过Windows Subsystem for Linux与正在运行的服务联系。



Windows 上的 Ceph – 性能

在此 Ceph Windows 移植之前,从 Windows 访问 Ceph 存储的唯一方法是使用Ceph iSCSI 网关,这很容易成为性能瓶颈。我们的目标是超越 iSCSI 网关并尽可能接近本机 Linux RBD 吞吐量。

10e35a14232412261aff05451142b1ca.png



测试环境:

在展示一些实际结果之前,让我们先谈谈测试环境。我们使用了 4 个相同的裸机服务器,具有以下规格:

  • CPU

    • Intel(R) Xeon(R) E5-2650 @ 2.00GHz

    • 2 sockets

    • 8 cores per socket

    • 32 vcpus

  • memory

    • 128GB

    • 1333Mhz

  • network adapters

    • Chelsio T420-C

    • 2 x 10Gb/s

    • LACP bond

    • 9000 MTU

您可能已经注意到我们没有提到存储磁盘,那是因为 Ceph OSD 被配置为使用内存支持池。请记住,我们将重点放在 Ceph 客户端性能上,而不是 Linux OSD 端的存储 iops。

我们使用了一个运行在 Ubuntu 20.04 之上的一体化 Ceph 16 集群。在客户端,我们涵盖了Windows Server 2016Windows Server 2019以及Ubuntu 20.04

基准测试是使用fio工具执行的。它是高度可配置的,常用于 Ceph 基准测试,最重要的是,它是跨平台的。

下面是一个示例 FIO 命令行调用,供有兴趣重复测试的任何人使用。我们正在使用直接 IO、2MB 块、64 个并发异步 IO 操作,测试超过 8GB 块的各种 IO 操作。测试块设备时,我们使用原始磁盘设备,而不是使用 NTFS 或 ReFS 分区。请注意,这在 Windows 上可能需要 fio>=3.20。

fio --randrepeat=1 --direct=1 --gtod_reduce=1 --name=test --bs=2M --iodepth=64 --size=8G --readwrite=randwrite --numjobs=1 --filename=\\.\PhysicalDrive2

Windows 调优:

以下设置可以提高 IO 吞吐量:

  • Windows 电源计划——很少有人认为这是服务器的问题,但默认情况下,“高性能”电源计划默认启用,这会导致 CPU 节流

  • 将 Ceph 和 FIO 二进制文件添加到 Windows Defender 白名单

  • 使用巨型帧 - 我们注意到性能提高了 15%

  • 在 Windows Server 2016 上启用 CUBIC TCP 拥塞算法

检测结果:

裸机 RBD 和 CephFS IO

让我们直接看 RBD 和 CephFS 基准测试结果。请注意,我们使用 MB/s 来测量速度(越高越好)。

值得一提的是,RBD 缓存已被禁用。正如我们所见,Windows Server 2019 设法提供了令人印象深刻的 IO 吞吐量。Windows Server 2016 没有那么快,但它仍然设法胜过 Linux RBD 客户端,包括 krbd。我们在 CephFS 方面看到了相同的模式。

我们已经使用多合一的 Ceph 集群测试了 iSCSI 网关。考虑到 iSCSI 网关不能很好地扩展,性能瓶颈可能会随着更大的 Ceph 集群变得更加严重。

+-----------+------------+--------+-------+--------+-------+
|    OS     |    tool    | rand_r | seq_r | rand_w | seq_w |
+-----------+------------+--------+-------+--------+-------+
| WS2016    | rbd-wnbd   |    854 |   925 |    807 |   802 |
| WS2019    | rbd-wnbd   |   1317 |  1320 |   1512 |  1549 |
| WS2019    | iscsi-gw   |    324 |   319 |    624 |   635 |
| Ubuntu 20 | krbd       |    696 |   669 |    659 |   668 |
| Ubuntu 20 | rbd-nbd    |    559 |   567 |    372 |   407 |
|           |            |        |       |        |       |
| WS2016    | ceph-dokan |    642 |   605 |    690 |   676 |
| WS2019    | ceph-dokan |    988 |   948 |    938 |   935 |
| Ubuntu 20 | ceph-fuse  |    162 |   181 |    121 |   138 |
| Ubuntu 20 | kern ceph  |    687 |   663 |    677 |   674 |
+-----------+------------+--------+-------+--------+-------+

虚拟机

提供虚拟机块存储也是 Ceph 的主要用例之一。以下是Ubuntu 20.04 上Hyper-V Server 2019KVM的测试结果,它们都运行从 RBD 映像启动的Ubuntu 20.04Windows Server 2019 VM

+-----------------------+--------------+--------------+
| Hypervisor \ Guest OS |   WS 2019    | Ubuntu 20.04 |
+-----------------------+------+-------+------+-------+
|                       | read | write | read | write |
+-----------------------+------+-------+------+-------+
| Hyper-V               | 1242 | 1697  | 382  | 291   |
| KVM                   | 947  | 558   | 539  | 321   |
+-----------------------+------+-------+------+-------+

WS 2019 Hyper-V VM 设法获得了几乎原生的 IO 速度。有趣的是,即使在 KVM 上,它的表现也比 Ubuntu 客户机要好,这可能值得研究。

WINBD

如上文所述,我们最初的方法是使用 NBD 协议附加 RBD 镜像。这并没有提供我们希望的性能,主要是由于Winsock Kernel (WSK)框架,这就是我们从头开始实施更高效的 IO 通道的原因。为方便起见,您仍然可以将 WNBD 作为独立的 NBD 客户端用于其他目的,在这种情况下,您可能有兴趣了解它的性能如何。在此测试环境中,它设法在 WS 2019 上提供 933MB/s 的速度,在 WS 2016 上提供 280MB/s 的速度。

目前,rbd-wnbd使用DeviceIoControl来检索 IO 请求并将 IO 回复发送回 WNBD 驱动程序,这也称为反向调用。与 RBD NBD 服务器不同,libwnbd允许调整 IO 调度工作者的数量。下表显示了工人数量如何影响性能。请记住,在这种特定情况下,我们正在对驱动程序连接进行基准测试,因此没有数据从/传输到 Ceph 集群。这让我们大致了解了 WNBD 可以提供的最大理论带宽,使可用 CPU 完全饱和:

+---------+------------------+
| Workers | Bandwidth (MB/s) |
+---------+------------------+
|       1 |             1518 |
|       2 |             2917 |
|       3 |             4240 |
|       4 |             5496 |
|       8 |            11059 |
|      16 |            13209 |
|      32 |            12390 |
+---------+------------------+
RBD 命令

除了 IO 性能,我们还对确保可以同时管理大量磁盘感兴趣。为此,我们编写了一个简单的 Python 脚本(https://raw.githubusercontent.com/petrutlucian94/ceph_test/master/scale_test.py),该脚本(https://raw.githubusercontent.com/petrutlucian94/ceph_test/master/scale_test.py)创建一个临时映像,将其附加到主机,执行各种 IO 操作,然后对其进行清理。这是 1000 次迭代的测试结果,每次 50 次。该测试对于提高 RBD 性能和稳定性至关重要。

+---------------------------------------------------------------------------------+
|                                   Duration (s)                                  |
+--------------------------+----------+----------+-----------+----------+---------+
|         function         |   min    |   max    |   total   |   mean   | std_dev |
+--------------------------+----------+----------+-----------+----------+---------+
|      TestRunner.run      | 283.5339 | 283.5339 |  283.5339 | 283.5339 |  0.0000 |
|    RbdTest.initialize    |  0.3906  | 10.4063  | 3483.5180 |  3.4835  |  1.5909 |
|     RbdImage.create      |  0.0938  |  5.5157  |  662.8653 |  0.6629  |  0.6021 |
|       RbdImage.map       |  0.2656  |  9.3126  | 2820.6527 |  2.8207  |  1.5056 |
| RbdImage.get_disk_number |  0.0625  |  8.3751  | 1888.0343 |  1.8880  |  1.5171 |
| RbdImage._wait_for_disk  |  0.0000  |  2.0156  |  39.1411  |  0.0391  |  0.1209 |
|      RbdFioTest.run      |  2.3125  | 13.4532  | 8450.7165 |  8.4507  |  2.2068 |
|      RbdImage.unmap      |  0.0781  |  6.6719  | 1031.3077 |  1.0313  |  0.7988 |
|     RbdImage.remove      |  0.1406  |  8.6563  |  977.1185 |  0.9771  |  0.8341 |
+--------------------------+----------+----------+-----------+----------+---------+



总结:

在随着Ceph的快速发展,跨平台的兼容性会越来越好。

参考:

  1. https://cloudbase.it/ceph-on-windows-performance/

  2. https://cloudbase.it/ceph-on-windows-part-1/

了解新钛云服

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

de7643f44b0b5886bf451e76dfc96e67.gif

点👇分享

7904b50c2fdf9e7787c645b479322364.gif

戳👇在看

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值