Windows 上直接使用Ceph以及效能測試!
新鈦雲服已為您服務
1296
天
在 Windows 上本地使用 Ceph
由於
Cloudbase Solutions
和
Suse 的
合作,當前
Ceph 16 (Pacific)
提供了 Windows 原生支援。
Ceph 可能是最常用的軟體定義儲存解決方案。根據調查(
https://www。openstack。org/analytics
),超過 70% 的 OpenStack 部署由 Ceph 提供支援。考慮到它可以在商用硬體上執行,而且能夠擴充套件到數百個儲存節點並提供不錯的效能,這也就不足為奇了。
在 Windows 上使用 Ceph 一直是一個痛點,以往需要
iSCSI
閘道器等代理或使用 Samba重新匯出
CephFS
。這些方法提供了次優的效能並使部署架構過於複雜。現在所有麻煩都沒有了,因為
RBD
和 CephFS 可以原生地在 Windows 上使用。
為獲得最佳效能和功能,建議使用
Windows Server 2019
。
Windows Server 2016
也受支援,但有一些已知限制。較舊的 Windows Server 版本以及客戶端版本(如 Windows 10)可能也能正常工作,但目前不受支援。
安裝:
這個 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 =
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 映象以及基準測試結果。我們將在以後的文章中深入研究基準測試。
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 吞吐量。
測試環境:
在展示一些實際結果之前,讓我們先談談測試環境。我們使用了 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 2016
、
Windows 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 2019
和
KVM
的測試結果,它們都執行從 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 設法獲得了幾乎原生的 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的快速發展,跨平臺的相容性會越來越好。
參考:
https://cloudbase。it/ceph-on-windows-performance/
https://cloudbase。it/ceph-on-windows-part-1/
瞭解新鈦雲服
新鈦雲服榮膺第四屆FMCG零售消費品行業CIO年會「年度數字化服務最值得信賴品牌獎」
新鈦雲服三週歲,公司月營收超600萬元,定下百年新鈦的發展目標
當IPFS遇見雲服務|新鈦雲服與冰河分散式實驗室達成戰略協議
新鈦雲服正式獲批工信部ISP/IDC(含網際網路資源協作)牌照
深耕專業,矗立鰲頭,新鈦雲服獲千萬Pre-A輪融資
新鈦雲服,打造最專業的Cloud MSP+,做企業業務和雲之間的橋樑
新鈦雲服一週年,完成兩輪融資,服務五十多家客戶
上海某倉儲物流電子商務公司混合雲解決方案