Ceph BLUESTORE 配置参考

参考:https://docs.ceph.com/en/latest/rados/configuration/bluestore-config-ref/

设备

BlueStore 管理一个、两个或(在某些情况下)三个存储设备。

在最简单的情况下,BlueStore 使用单个(主)存储设备。存储设备通常是作为一个整体使用的,占用了BlueStore直接管理的整个设备。此主设备通常由block数据目录中的符号链接标识。

数据目录是一个tmpfs挂载(在启动时或ceph-volume激活时),其中包含所有常见的 OSD 文件,这些文件包含有关 OSD 的信息,例如:它的标识符、它所属的集群以及它的私钥环。

也可以在一个或两个附加设备上部署 BlueStore:

  • 预写日志 (WAL) 设备(block.wal在数据目录中标识)可用于 BlueStore 的内部日志或预写日志。仅当设备比主设备快时(例如,当它在 SSD 上且主设备是 HDD 时),使用 WAL 设备才有用。

  • 数据库设备(在数据目录中标识)block.db可用于存储 BlueStore 的内部元数据。BlueStore(或者更确切地说,嵌入式 RocksDB)会将尽可能多的元数据放在数据库设备上以提高性能。如果数据库设备已满,元数据将溢出回主设备(否则会出现在主设备上)。同样,只有当数据库设备比主设备快时,它才会有帮助。

如果只有少量可用的快速存储空间(例如,小于 1 GB),我们建议将其用作 WAL 设备。如果有更多,配置数据库设备更有意义。BlueStore 日志将始终放置在可用的最快设备上,因此使用 DB 设备将提供与 WAL 设备相同的好处,同时还允许在其中存储额外的元数据(如果合适的话)。这意味着,如果指定了 DB 设备但未指定显式 WAL 设备,则 WAL 将隐式与更快设备上的 DB 共存。

block和block.db

如果您混合使用快速和慢速设备(SSD / NVMe 和旋转),建议放置block.db在较快的设备上,而block (数据)放在较慢的(旋转驱动器)上。

您必须手动创建这些卷组和逻辑卷,因为该ceph-volume工具目前无法自动执行此操作。

对于下面的示例,让我们假设四个旋转驱动器( sda、sdb、sdc和sdd)和一个(快速)固态驱动器(sdx)。首先创建卷组:

$ vgcreate ceph-block-0 /dev/sda
$ vgcreate ceph-block-1 /dev/sdb
$ vgcreate ceph-block-2 /dev/sdc
$ vgcreate ceph-block-3 /dev/sdd

现在创建block逻辑卷:

$ lvcreate -l 100%FREE -n block-0 ceph-block-0
$ lvcreate -l 100%FREE -n block-1 ceph-block-1
$ lvcreate -l 100%FREE -n block-2 ceph-block-2
$ lvcreate -l 100%FREE -n block-3 ceph-block-3

我们正在为四个慢速旋转设备创建 4 个 OSD,因此假设 /dev/sdx 有 200GB SSD,我们将创建 4 个逻辑卷,每个 50GB:

$ vgcreate ceph-db-0 /dev/sdx
$ lvcreate -L 50GB -n db-0 ceph-db-0
$ lvcreate -L 50GB -n db-1 ceph-db-0
$ lvcreate -L 50GB -n db-2 ceph-db-0
$ lvcreate -L 50GB -n db-3 ceph-db-0

最后,使用 ceph-volume 创建 4 个 OSD :

$ ceph-volume lvm create --bluestore --data ceph-block-0/block-0 --block.db ceph-db-0/db-0
$ ceph-volume lvm create --bluestore --data ceph-block-1/block-1 --block.db ceph-db-0/db-1
$ ceph-volume lvm create --bluestore --data ceph-block-2/block-2 --block.db ceph-db-0/db-2
$ ceph-volume lvm create --bluestore --data ceph-block-3/block-3 --block.db ceph-db-0/db-3

这些操作最终会创建四个 OSD,block在速度较慢的旋转驱动器上,每个 OSD 在固态驱动器上都有一个 50 GB 的逻辑卷 (DB)。

空间大小

当使用混合旋转和固态驱动器设置时,为 BlueStore 创建足够大的 block.db 逻辑卷非常重要。一般来说,block.db应该有尽可能大的逻辑卷。

一般建议是block.db大小在block大小的 1% 到 4% 之间。

  • 对于 RGW 工作负载,建议block.db 大小不小于 4% block,因为 RGW 大量使用它来存储元数据(omap 键)。例如,如果block大小为 1TB,则block.db不应小于 40GB。
  • 对于 RBD 工作负载,block.db大小为1% 到 2% 的block大小通常就足够了。

示例参考:

block(数据)大小       block.db(元数据)大小[block.wal(预写日志)大小]
----------------------------------------------------------------------
1TB  	               10GB-40GB+
2TB                    20GB-80GB+
4TB                    40GB-160GB+
8TB                    80GB-320GB+
... ...

在旧版本中,内部级别大小意味着数据库只能充分利用与 L0、L0+L1、L1+L2 等大小之和相对应的特定分区/LV 大小,默认设置意味着大约 3 GB、30 GB , 300 GB 等等。大多数部署不会从适应 L3 和更高级别的大小中受益,尽管通过将这些数字加倍到 6GB、60GB 和 600GB 可以促进 DB 压缩。

从 Nautilus 14.2.12 和 Octopus 15.2.6 开始的版本的改进可以更好地利用任意 DB 设备大小,而 Pacific 版本带来了实验性动态级别支持。因此,旧版本的用户可能希望通过今天提供更大的数据库设备来提前计划,以便在未来的升级中实现他们的好处。

当不混合使用快速和慢速设备时,不需要为block.db(或block.wal)创建单独的逻辑卷。BlueStore 会自动将这些放在block。大小为 OSD 大小的 10% (DB) 和 1% (WAL)。

说明:DB 存储 BlueStore 的内部元数据,WAL 是 BlueStore 的内部日志或 write-ahead 日志。建议使用快速 SSD 或 NVRAM 以获得更好的性能。

posted @   Varden  阅读(1326)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示