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