Windows上直接使用Ceph以及性能測試!
在 Windows 上本地使用 Ceph
由于Cloudbase Solutions和Suse 的合作,當前Ceph 16 (Pacific)提供了 Windows 原生支持。
Ceph 可能是最常用的軟件定義存儲解決方案。根據(jù)調(diào)查(https://www.openstack.org/analytics),超過 70% 的 OpenStack 部署由 Ceph 提供支持??紤]到它可以在商用硬件上運行,而且能夠擴展到數(shù)百個存儲節(jié)點并提供不錯的性能,這也就不足為奇了。
在 Windows 上使用 Ceph 一直是一個痛點,以往需要iSCSI網(wǎng)關(guān)等代理或使用 Samba重新導(dǎo)出CephFS。這些方法提供了次優(yōu)的性能并使部署架構(gòu)過于復(fù)雜?,F(xiàn)在所有麻煩都沒有了,因為RBD和 CephFS 可以原生地在 Windows 上使用。
為獲得最佳性能和功能,建議使用Windows Server 2019。Windows Server 2016也受支持,但有一些已知限制。較舊的 Windows Server 版本以及客戶端版本(如 Windows 10)可能也能正常工作,但目前不受支持。
安裝:
這個 MSI 安裝程序(https://cloudbase.it/ceph-for-windows/)是在 Windows 上安裝 Ceph 的推薦方式。除了 Ceph 二進制文件,它還捆綁了WNBD驅(qū)動程序,用于映射 RBD 鏡像。
如果您更喜歡手動構(gòu)建和安裝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 密鑰環(huán)文件。目前,必須使用斜杠“/”而不是反斜杠“\”作為路徑分隔符。
- [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 塊設(shè)備 (RBD)一直是這項工作的主要重點。您可能已經(jīng)熟悉的相同 CLI 可用于創(chuàng)建 RBD 映像并將它們附加到主機和Hyper-V虛擬機。
以下 PowerShell 示例創(chuàng)建一個 RBD 映像,將其附加到主機并在頂部添加一個NTFS分區(qū)。
- 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 ”服務(wù)負責在主機重新啟動后重新附加 RBD 映像。這還允許調(diào)整 Windows 服務(wù)啟動順序,以便在啟動可能依賴它的服務(wù)之前映射 RBD 映像。
以下屏幕截圖顯示了附加到 Hyper-V 虛擬機的 RBD 鏡像以及基準測試結(jié)果。我們將在以后的文章中深入研究基準測試。
WNBD:
RBD 映像通過使用WNBD Storport Miniport 驅(qū)動程序(https://github.com/cloudbase/wnbd)公開為 SCSI 磁盤,作為此移植工作的一部分編寫。
WNBD 驅(qū)動程序提供的一項有趣功能是 NBD 客戶端功能,允許它用于附加任意 NBD 導(dǎo)出。在實施更有效的機制之前,這是附加 RBD 圖像的默認方式。由于它的實用性,這個特性被保留了下來,盡管它可能在某個時候被移到驅(qū)動程序之外,利用與rbd-wnbd相同的 API 。
要掛載獨立的 NBD 映像,請使用以下命令:
- wnbd-client map export_name $nbdAddress --port $nbdPort
CephFS:
Windows 上的CephFS支持是我們的第二個主要目標,目前處于試驗階段。我們正在使用類似于 FUSE 的Dokany以及看似廢棄的 ceph-dokan項目的改進版本。
以下簡單命令使用“X:”驅(qū)動器號掛載 CephFS:
- ceph-dokan.exe -l x
當前限制:
雖然移植的當前狀態(tài)已經(jīng)涵蓋了大多數(shù)的情況,但您應(yīng)該注意一些限制。這些缺失的功能可能會在后續(xù)版本中實現(xiàn)。
- RBD鏡像還不能用于備份群集共享卷(CSV)在Windows Server故障轉(zhuǎn)移群集(WSFC) ,這需要SCSI永久保留的支持
- WNBD 磁盤無法實時調(diào)整大小
- Python 綁定不可用
- Ceph CLI工具還不能以本機方式使用。但是,它可以通過Windows Subsystem for Linux與正在運行的服務(wù)聯(lián)系。
Windows 上的 Ceph – 性能
在此 Ceph Windows 移植之前,從 Windows 訪問 Ceph 存儲的唯一方法是使用Ceph iSCSI 網(wǎng)關(guān),這很容易成為性能瓶頸。我們的目標是超越 iSCSI 網(wǎng)關(guān)并盡可能接近本機 Linux RBD 吞吐量。
測試環(huán)境:
在展示一些實際結(jié)果之前,讓我們先談?wù)劀y試環(huán)境。我們使用了 4 個相同的裸機服務(wù)器,具有以下規(guī)格:
- 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
您可能已經(jīng)注意到我們沒有提到存儲磁盤,那是因為 Ceph OSD 被配置為使用內(nèi)存支持池。請記住,我們將重點放在 Ceph 客戶端性能上,而不是 Linux OSD 端的存儲 iops。
我們使用了一個運行在 Ubuntu 20.04 之上的一體化 Ceph 16 集群。在客戶端,我們涵蓋了Windows Server 2016、Windows Server 2019以及Ubuntu 20.04。
基準測試是使用fio工具執(zhí)行的。它是高度可配置的,常用于 Ceph 基準測試,最重要的是,它是跨平臺的。
下面是一個示例 FIO 命令行調(diào)用,供有興趣重復(fù)測試的任何人使用。我們正在使用直接 IO、2MB 塊、64 個并發(fā)異步 IO 操作,測試超過 8GB 塊的各種 IO 操作。測試塊設(shè)備時,我們使用原始磁盤設(shè)備,而不是使用 NTFS 或 ReFS 分區(qū)。請注意,這在 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 調(diào)優(yōu):
以下設(shè)置可以提高 IO 吞吐量:
Windows 電源計劃——很少有人認為這是服務(wù)器的問題,但默認情況下,“高性能”電源計劃默認不啟用,這會導(dǎo)致 CPU 節(jié)流
將 Ceph 和 FIO 二進制文件添加到 Windows Defender 白名單
使用巨型幀 - 我們注意到性能提高了 15%
在 Windows Server 2016 上啟用 CUBIC TCP 擁塞算法
檢測結(jié)果:
裸機 RBD 和 CephFS IO
讓我們直接看 RBD 和 CephFS 基準測試結(jié)果。請注意,我們使用 MB/s 來測量速度(越高越好)。
值得一提的是,RBD 緩存已被禁用。正如我們所見,Windows Server 2019 設(shè)法提供了令人印象深刻的 IO 吞吐量。Windows Server 2016 沒有那么快,但它仍然設(shè)法勝過 Linux RBD 客戶端,包括 krbd。我們在 CephFS 方面看到了相同的模式。
我們已經(jīng)使用多合一的 Ceph 集群測試了 iSCSI 網(wǎng)關(guān)??紤]到 iSCSI 網(wǎng)關(guān)不能很好地擴展,性能瓶頸可能會隨著更大的 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 2019和KVM的測試結(jié)果,它們都運行從 RBD 映像啟動的Ubuntu 20.04和Windows 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 設(shè)法獲得了幾乎原生的 IO 速度。有趣的是,即使在 KVM 上,它的表現(xiàn)也比 Ubuntu 客戶機要好,這可能值得研究。
WINBD
如上文所述,我們最初的方法是使用 NBD 協(xié)議附加 RBD 鏡像。這并沒有提供我們希望的性能,主要是由于Winsock Kernel (WSK)框架,這就是我們從頭開始實施更高效的 IO 通道的原因。為方便起見,您仍然可以將 WNBD 作為獨立的 NBD 客戶端用于其他目的,在這種情況下,您可能有興趣了解它的性能如何。在此測試環(huán)境中,它設(shè)法在 WS 2019 上提供 933MB/s 的速度,在 WS 2016 上提供 280MB/s 的速度。
目前,rbd-wnbd使用DeviceIoControl來檢索 IO 請求并將 IO 回復(fù)發(fā)送回 WNBD 驅(qū)動程序,這也稱為反向調(diào)用。與 RBD NBD 服務(wù)器不同,libwnbd允許調(diào)整 IO 調(diào)度工作者的數(shù)量。下表顯示了工人數(shù)量如何影響性能。請記住,在這種特定情況下,我們正在對驅(qū)動程序連接進行基準測試,因此沒有數(shù)據(jù)從/傳輸?shù)?Ceph 集群。這讓我們大致了解了 WNBD 可以提供的最大理論帶寬,使可用 CPU 完全飽和:
- +---------+------------------+
- | Workers | Bandwidth (MB/s) |
- +---------+------------------+
- | 1 | 1518 |
- | 2 | 2917 |
- | 3 | 4240 |
- | 4 | 5496 |
- | 8 | 11059 |
- | 16 | 13209 |
- | 32 | 12390 |
- +---------+------------------+
RBD 命令
除了 IO 性能,我們還對確??梢酝瑫r管理大量磁盤感興趣。為此,我們編寫了一個簡單的 Python 腳本(https://raw.githubusercontent.com/petrutlucian94/ceph_test/master/scale_test.py),該腳本(https://raw.githubusercontent.com/petrutlucian94/ceph_test/master/scale_test.py)創(chuàng)建一個臨時映像,將其附加到主機,執(zhí)行各種 IO 操作,然后對其進行清理。這是 1000 次迭代的測試結(jié)果,每次 50 次。該測試對于提高 RBD 性能和穩(wěn)定性至關(guān)重要。
- +---------------------------------------------------------------------------------+
- | 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 |
- +--------------------------+----------+----------+-----------+----------+---------+
總結(jié):
在隨著Ceph的快速發(fā)展,跨平臺的兼容性會越來越好。
參考:
https://cloudbase.it/ceph-on-windows-performance/
https://cloudbase.it/ceph-on-windows-part-1/