Ceph集羣性能優化介紹

1.集羣硬件配置

典型硬件資源配置建議:

組件 CPU 內存 網絡 存儲空間
Monitor 1vCore 2GB 1x 1GbE+ NICs 單個Mon 10GB+
OSD 1vCore BlueStore後端,單個OSD 至少3 GB。裸容量每增加1 TB,則內存相應增加1 GB 1x 1GbE+ NICs (建議10GbE+) 一個OSD 對應一塊獨立的硬盤
  • public network和cluster network 分開。
  • 操作系統、OSD data、OSD 日誌分別使用獨立的硬盤,使整體吞吐量最大化。
  • 一般,建議單OSD 分配4GB以上的內存,多小對象或有大對象場景下對性能有提升。不建議低於2GB。
  • 對於OSD 除顯式分配的內存外,還會多約20%的額外內存開銷,需要考慮到。

對於採用的BlueStore的Ceph,將SSD 用在合適的地方一般可以顯著提升性能:

  • OSD 日誌建議使用SSD。如果採用bluestore,則建議裸容量配比—— block : block.db : block.wal = 100:1:1,後兩者建議採用SSD或NVMe SSD。
  • 採用cache-tiering,其中cache pool 採用SSD。
  • CephFS 的metadata pool 採用SSD。
  • RGW index pool 採用SSD。

2.常見性能影響因素

集羣性能評估

根據採用的硬件和集羣規模,應當對集羣有個大致的性能估算。集羣性能影響因素主要有:硬盤(單個硬盤的性能和硬盤總數)、網絡性能、內存和CPU。其中前兩個是估算集羣整體性能的主要因素,而根據場景,性能主要是IOPS和帶寬。
一般:

  • 集羣讀取性能:
集羣讀取性能:W*n*μ,無論在FileStore還是BlueStore下
其中,
W: 單塊裸盤讀帶寬
n: OSD數量
μ: 損耗係數 一般爲0.7~0.8
  • 集羣寫入性能:
集羣寫入性能:[(W*n)/WAF]*μ
W: 單塊裸盤寫入帶寬
n: OSD數量
WAF: 寫放大係數
μ: 損耗係數
X: 寫入數據塊大小(KiB)
N: 多副本Size大小
K: 糾刪碼K值
M: 糾刪碼M值
FileStore 5: 5KiB, FileStore中transaction元數據的數據量大小(推測值)
BlueStore 5: 5KiB, BlueStore中RocksDB的WAL數據大小(推測值)
BlueStore 20: 20KiB, BlueStore小文件寫入時產生的Zero-filled數據塊大小

經過對集羣的性能評估,結合主要的影響因素,試着找出性能瓶頸的大方向。

常見性能優化點

排除硬件瓶頸的可能,則可以從常見的幾項對照排查修改。

  • 存儲池的PG 數是否合理:一般,集羣PGs總數 = (OSD總數 * 100 / 最大副本數),具體可參考pgcal
  • 網絡帶寬、單盤性能是整體性能的基礎,需要評估影響整體性能的瓶頸。
  • monitor 採用3或5個即可。由於需要再monitor之間做數據同步,過多的monitor 會影響性能。
  • 建議Ceph 集羣和其他系統獨立部署,以免資源搶佔影響性能,且混合部署影響troubleshooting。

3.使用Cache-tiering

使用緩存分層,可以根據需求在熱層和冷層之間自動遷移數據,從而提高羣集的性能。
採用的cache-tiering的前提是要搞清業務場景,因爲cache-tiering 是工作負載相關的,不合適的場景匹配不合適的緩存模式(cache mode)反而會讓整體性能下降。

  • write-back:Ceph 客戶端寫數據至cache tier,隨後會將數據遷移至storage tier。客戶端讀取數據也是直接讀取cache tier,若cache tier 沒有會從storage tier 中獲取並遷移至cache tier。客戶端的讀寫始終不直接跟storage tier 關聯。 這種模式適用於可變數據的存儲訪問。
  • readproxy:使用已存在與cache tier 內的對象, 如果cache tier 內無該對象則會將請求代理至storage tier。
  • readonly:cache tier 僅接受讀操作,寫操作都會指向storage tier,預讀取的對象會被遷移至cache tier,一定條件下會被遷移出cache tier。這種模式不保證一致性,讀取的數據可能是過期的,適用於不變數據的存儲訪問。
  • none:完全disable cache tiering。

cache-tiering 配置流程

首先,除storage pool 外,需要創建一個全SSD 的cache pool(通過修改 crushmap)。
根據實際場景:

  • 數據對象是更偏向不變對象還是可變對象,決定採用什麼緩存模式(cache-mode);
  • 根據客戶端負載情況,設置和調整緩存池的參數(大小、數量等);
  • 其他諸如cache age、target size 等參數。

必要操作步驟:
1)關聯cache pool 和後端存儲池:ceph osd tier add

2)設置cache-mode:ceph osd tier cache-mode writeback

3)將原storage pool的流量指向cache pool:ceph osd tier set-overlay

4)必要的緩存閾值設置,所有的請求在達到target_max_bytes 或target_max_objects 設定值時會被阻塞

ceph osd pool set target_max_bytes {#bytes}
ceph osd pool set target_max_objects {#objects}

4.Damons 相關配置優化

常見配置優化項及建議值,根據實際場景可再做調整。
默認應將RGW Cache 和RBD cache打開。

OSD

osd_scrub_begin_hour = 1 #根據業務實際設置在非業務時間scrub
osd_scrub_end_hour = 5
osd_recovery_op_priority = 3
osd_client_op_priority = 63
osd_recovery_max_active = 10
osd_recovery_sleep = 0
osd_max_backfills = 10

RGW(對象存儲)

rgw_cache_enabled = true # 開啓RGW cache
rgw_thread_pool_size = 2000
rgw_cache_lru_size = 20000
rgw_num_rados_handles = 128

RBD(塊存儲)

rbd_cache_enabled = true # 開啓RBD cache
rbd_cache_size = 268435456
rbd_cache_max_dirty = 134217728
rbd_cache_max_dirty_age = 5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章