ceph bluestore的db分區應該預留多大的空間


前言

關於bluestore的db應該預留多少空間,網上有很多資料
如果采用默認的

write_buffer_size=268435456

大小的話
那么幾個rocksdb的數據等級是

L0: in memory
L1: 256MB
L2: 2.56 GB
L3: 25.6 GB
L4: 256 GB

設置L4那么大的ssd可以給一個osd使用有點不划算,那么空間一般計算就是L1+L2+L3將近30GB
這個可以參考下面的文章

https://blog.csdn.net/NewTyun/article/details/103379694

關於block.db大小調整,只需為所有Bluestore OSD保留30 GB

那么這個大小對不對,如果你直接參考30GB這個,並且按照常規的去分區來說,就會帶來問題了,我們看下具體什么問題

實際測試驗證

parted -s /dev/sdb mkpart primaru 1 31G

上面的命令已經放大了1GB了,但是實際上還是不行

[root@lab102 ~]# ceph daemon osd.0 perf dump|grep bluefs -A 10
    "bluefs": {
        "gift_bytes": 0,
        "reclaim_bytes": 0,
        "db_total_bytes": 30999044096,
        "db_used_bytes": 3258966016,
        "wal_total_bytes": 1999630336,
        "wal_used_bytes": 501215232,
        "slow_total_bytes": 160000114688,
        "slow_used_bytes": 7837319168,
        "num_files": 194,
        "log_bytes": 10485760,

上面是我測試環境記錄的值,db只使用了3.2G實際上已經開始使用slow 了,所以這個大小實際上不滿足的我的預設的,這個跟parted命令分區的GB轉換也存在的一定的關系

看下parted的問題

[root@lab102 ~]# parted -s  /dev/sdf mkpart primary 1 1GB
[root@lab102 ~]# parted -s  /dev/sdf print
Model: Intel RMS25CB080 (scsi)
Disk /dev/sdf: 4000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name     Flags
 1      1049kB  1000MB  999MB               primary

可以看到上面創建1GB的時候實際上只創建了999MB,加上我指定的從1MB開始,實際上這個地方設置是按1000進制處理容量的,而對容量的需求的是真正的1024的去算的,這個地方就存在誤差了

那么我們簡單點處理,就是直接放大到35GB即可

parted -s  /dev/sdf mkpart primary 1 35GB

按這個容量設置的,能夠保證上面的L3沒有先滿的時候不會提前溢出了

紅帽的官方的建議是留1T 40GB左右,而suse是建議db大小為64GB

https://documentation.suse.com/zh-tw/ses/6/single-html/ses-deployment/index.html#:~:text=如需BlueStore 的詳細,使用單獨的分割區。
https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html/administration_guide/osd-bluestore

如果沒有調整write_buffer_size的情況下,建議是35GB,40GB或者64GB,這個都存在一些放大設置,如果磁盤空間足夠的情況下,多分一點也沒什么關系的,盡量避免轉換不正確帶來的未知的降速

WAL大小,suse建議是4GB的

測試模型構建

准備一個4TB的sata盤,准備一個db分區,准備一個wal分區(測試環境為2GB)
db分區設置為你需要的大小,上面的環境當中,我測試了db 30GB和35GB兩組大小的情況

設置35GB寫入600萬文件的時候osd的db情況如下:

ceph daemon osd.0 perf dump|grep bluefs -A 10
    "bluefs": {
        "gift_bytes": 0,
        "reclaim_bytes": 0,
        "db_total_bytes": 34999361536,
        "db_used_bytes": 10392428544,
        "wal_total_bytes": 1999630336,
        "wal_used_bytes": 492826624,
        "slow_total_bytes": 160000114688,
        "slow_used_bytes": 0,
        "num_files": 177,
        "log_bytes": 3944448,

創建osd的命令

ceph-deploy osd create --data /dev/sdc1 --block-db /dev/sdb1  --block-wal /dev/sdb2 lab102

創建一個rgw網關
然后用cosbench往網關打數據
200個worker,64KB的文件,寫入600萬文件

測試一輪的時間大概為2小時就可以復現上面的情況,測試過程還帶出了另外的一個問題

rgw_dynamic_resharding = true

這個動態分片過程中會有一定的概率阻塞住請求的,通過cosbench里面的壓測圖形也可以看到分片后的性能比沒分片是好很多的,所以如果搶時間的話

最好是關閉動態分片,設置好需要的分片數目

測試完需要改db的時候,直接刪存儲池,然后重新創建即可,推掉的操作也很快的

總結

網上的文章都是用來參考的,實際是一定需要去復測驗證的,一般分享的文章也不會細化到一個parted的命令也記錄,只會從原理上面出發去分析,並且環境調整了什么參數,都是不同的結果的,比如上面的
write_buffer_size如果調整到512MB,那么預留的空間差不多需要翻一倍的

所以參數的調整,一定要實測


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM