注意
本文档适用于 Ceph 开发版本。
配置设置
请参阅块设备以获取更多详细信息。
通用 IO 设置
- rbd_compression_hint
向 OSD 发送的写入操作提示。如果设置为
compressible
并且 OSDbluestore_compression_mode
设置是passive
,则 OSD 将尝试压缩数据。如果设置为incompressible
并且 OSD 压缩设置是aggressive
,则 OSD 将不会尝试压缩数据。- type:
str
- default:
none
- valid choices:
none
compressible
incompressible
- rbd_read_from_replica_policy
确定哪个 OSD 将接收读取操作的策略。如果设置为
default
,则每个 PG 的主 OSD 将始终用于读取操作。如果设置为balance
,读取操作将被发送到副本集中随机选择的 OSD。如果设置为localize
,读取操作将被发送到由 CRUSH 映射确定的最近 OSD。与rbd_balance_snap_reads
和rbd_localize_snap_reads
或rbd_balance_parent_reads
和rbd_localize_parent_reads
不同,它影响所有读取操作,而不仅仅是快照或父级。注意:此功能需要集群配置为具有 Octopus 兼容性最低的 OSD 版本。- type:
str
- default:
default
- valid choices:
default
balance
localize
- rbd_default_order
此配置设置新镜像的默认对象大小。该值用作 2 的幂,意味着
default_object_size = 2 ^ rbd_default_order
。配置 12 到 25(包含)之间的值,转换为 4KiB 下方和 32MiB 上限。- type:
uint
- default:
22
缓存设置
Ceph 块设备的用户空间实现(即,librbd
)无法利用 Linux 页缓存,因此它包含自己的内存缓存,称为“RBD 缓存”。RBD 缓存的行为就像行为良好的硬盘缓存一样。当操作系统发送屏障或刷新请求时,所有脏数据都会写入 OSD。这意味着使用写回缓存与使用行为良好的物理硬盘一样安全,虚拟机正确发送刷新(即 Linux 内核 >= 2.6.32)。缓存使用最近最少使用(LRU)算法,并且在写回模式下它可以合并连续请求以提高吞吐量。
librbd 缓存默认启用,并支持三种不同的缓存策略:写绕过、写回和写通。在写绕过和写回策略下,写入操作立即返回,除非存储集群中有超过rbd_cache_max_dirty
未写入的字节。写绕过策略与写回策略的不同之处在于它不会尝试从缓存服务读取请求,与写回策略不同,因此对于高性能写入工作负载更快。在写通策略下,只有在所有副本上的数据都写入磁盘时,写入操作才会返回,但读取操作可能来自缓存。
在接收到刷新请求之前,缓存的行为像写通缓存,以确保旧操作系统(这些操作系统不会发送刷新以确保崩溃一致性)的安全操作。
如果禁用 librbd 缓存,写入和读取将直接发送到存储集群,并且只有在所有副本上的数据都写入磁盘时,写入操作才会返回。
Note
缓存位于客户端的内存中,每个 RBD 镜像都有自己的缓存。由于缓存是客户端本地的,如果有其他人访问镜像,则没有一致性。在 RBD 顶部运行 GFS 或 OCFS 将无法启用缓存。
应该在您的配置文件或中央配置存储的[client]
部分设置 RBD 选项。这些设置包括:
- rbd_cache
启用 RADOS 块设备(RBD)的缓存。
- type:
bool
- default:
true
- rbd_cache_policy
选择 librbd 的缓存策略。
- type:
str
- default:
writearound
- valid choices:
writethrough
writeback
writearound
- rbd_cache_writethrough_until_flush
开始时处于
writethrough
模式,在接收到第一个刷新请求后切换到writeback
模式。启用是一个保守但安全策略,以防在 RBD 卷上运行的虚拟机太旧而无法发送刷新,例如virtio
驱动程序在 Linux 内核 2.6.32 之前的版本中。- type:
bool
- default:
true
- rbd_cache_size
每个卷的 RBD 客户端缓存大小(以字节为单位)。
- type:
size
- default:
32Mi
- 策略:
写回和写通
- rbd_cache_max_dirty
The
dirty
脏数据触发写回的字节数限制。如果0
,则使用写通缓存。- type:
size
- default:
24Mi
- 限制:
必须小于
rbd_cache_size
.- 策略:
写回和写通
- rbd_cache_target_dirty
The
dirty target
在缓存开始将数据写入数据存储之前,脏数据在缓存中的秒数。不会阻塞写入缓存。- type:
size
- default:
16Mi
- 限制:
必须小于
rbd_cache_max_dirty
.- 策略:
写回
- rbd_cache_max_dirty_age
脏数据在缓存中停留的秒数,然后开始写回。
- type:
float
- default:
1.0
- 策略:
写回
预读设置
librbd 支持预读/预取以优化小型顺序读取。通常情况下,虚拟机中的主机操作系统应处理此操作,但启动加载程序可能不会发出高效的读取。如果禁用缓存或策略为写绕过,则自动禁用预读。
- rbd_readahead_trigger_requests
触发预读所需的顺序请求数量
- type:
uint
- default:
10
- rbd_readahead_max_bytes
预读请求的最大大小。如果为零,则禁用预读。
- type:
size
- default:
512Ki
- rbd_readahead_disable_after_bytes
从 RBD 镜像读取了这么多字节后,将禁用该镜像的预读,直到它关闭。这允许主机操作系统在启动后接管预读。如果为零,则预读保持启用。
- type:
size
- default:
50Mi
图像特性
RBD 支持高级功能,可以通过创建镜像时的命令行指定,或者通过rbd_default_features = <sum of feature numeric values>
或rbd_default_features = <comma-delimited list of CLI values>
.
Layering
- 描述:
默认功能配置。层叠启用克隆。
- 内部值:
1
- 命令行值:
layering
- 添加于:
v0.52 (Bobtail)
- KRBD 支持:
自 v3.10 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Striping v2
- 描述:
条带化将数据分布在多个对象上。条带化有助于顺序读写工作负载的并行性。
- 内部值:
2
- 命令行值:
striping
- 添加于:
v0.55 (Bobtail)
- KRBD 支持:
自 v3.10 起(仅默认条带化,“高级”条带化添加于 v4.17)
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Exclusive locking
- 描述:
当启用时,客户端在执行写入之前需要获取对象的锁。当且仅当在任何给定时间只有一个客户端访问镜像时,才应启用独占锁。
- 内部值:
4
- 命令行值:
exclusive-lock
- 添加于:
v0.92 (Hammer)
- KRBD 支持:
自 v4.9 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Object map
- 描述:
对象映射支持取决于独占锁支持。块设备是精简配置的,这意味着它们只存储实际写入的数据,即它们是稀疏。对象映射支持有助于跟踪实际存在的对象(在设备上存储了数据)。启用对象映射支持可以加快克隆、导入和导出稀疏配置镜像以及删除的 I/O 操作速度。
- 内部值:
8
- 命令行值:
object-map
- 添加于:
v0.93 (Hammer)
- KRBD 支持:
自 v5.3 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Fast-diff
- 描述:
快速差异支持取决于对象映射支持和独占锁支持。它为对象映射添加了另一个属性,这使得在镜像的快照之间生成差异的速度大大加快。它还大大加快了计算快照或卷的实际数据使用量的速度(
rbd du
).- 内部值:
16
- 命令行值:
快速差异
- 添加于:
v9.0.1 (Infernalis)
- KRBD 支持:
自 v5.3 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Deep-flatten
- 描述:
深度展平使
rbd flatten
能够在镜像的所有快照上工作,除了镜像本身。如果没有它,镜像的快照仍然依赖于父级,因此父级在删除快照之前不能被删除。深度展平使父级与其克隆独立,即使它们有快照,代价是使用额外的 OSD 设备空间。- 内部值:
32
- 命令行值:
deep-flatten
- 添加于:
v9.0.2 (Infernalis)
- KRBD 支持:
自 v5.1 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
是
Journaling
- 描述:
日志记录支持取决于独占锁支持。日志记录按发生顺序记录镜像的所有修改。RBD 镜像可以利用日志来将崩溃一致的镜像复制到远程集群。最好让
rbd-mirror
根据需要管理此功能,因为长期启用它可能会导致额外的 OSD 空间消耗。- 内部值:
64
- 命令行值:
journaling
- 添加于:
v10.0.1 (Jewel)
- KRBD 支持:
no
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
no
Data pool
- 描述:
在纠删码池中,镜像数据块对象需要存储在镜像元数据不同的池中。
- 内部值:
128
- 添加于:
v11.1.0 (Kraken)
- KRBD 支持:
自 v4.11 起
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
no
Operations
- 描述:
用于限制旧客户端对镜像执行某些维护操作(例如克隆、快照创建)。
- 内部值:
256
- 添加于:
v13.0.2 (Mimic)
- KRBD 支持:
自 v4.16 起
Migrating
- 描述:
用于限制旧客户端在镜像处于迁移状态时打开镜像。
- 内部值:
512
- 添加于:
v14.0.1 (Nautilus)
- KRBD 支持:
no
Non-primary
- 描述:
用于限制使用基于快照的镜像进行克隆的非主镜像更改。
- 内部值:
1024
- 添加于:
v15.2.0 (Octopus)
- KRBD 支持:
no
QoS 设置
librbd 支持以多种方式限制每镜像 IO。所有这些都适用于给定进程内的给定镜像 - 例如,在两个不同的虚拟机中使用的相同镜像将具有独立的限制。
IOPS:每秒 I/O 数(任何类型的 I/O)
读取 IOPS:每秒读取 I/O 数
写入 IOPS:每秒写入 I/O 数
bps:每秒字节数(任何类型的 I/O)
读取 bps:每秒读取字节数
写入 bps:每秒写入字节数
这些限制中的每一个都独立于其他限制。它们默认都是关闭的。每种类型的限制都使用令牌桶算法来限制 I/O,可以配置限制(平均速度随时间变化)并有可能在短时间内(burst_seconds)以更高的速率(突发)进行。当任何这些限制达到,并且没有突发容量剩余时,librbd 会将该类型的 I/O 速率降低到限制。
例如,如果配置了 100MB 的读取 bps 限制,但未限制写入,则写入可以尽可能快地进行,而读取则会被限制在平均 100MB/s。如果设置了 150MB 的读取 bps 突发,并且读取突发秒数设置为五秒,则读取可以在最多五秒内以 150MB/s 进行,然后回落到 100MB/s 的限制。
以下选项配置这些限制器:
- rbd_qos_iops_limit
所需的每秒 IO 操作限制
- type:
uint
- default:
0
- rbd_qos_iops_burst
所需的 IO 操作突发限制
- type:
uint
- default:
0
- rbd_qos_iops_burst_seconds
所需的 IO 操作突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_read_iops_limit
所需的每秒读取操作限制
- type:
uint
- default:
0
- rbd_qos_read_iops_burst
所需的读取操作突发限制
- type:
uint
- default:
0
- rbd_qos_read_iops_burst_seconds
所需的读取操作突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_write_iops_limit
所需的每秒写入操作限制
- type:
uint
- default:
0
- rbd_qos_write_iops_burst
所需的写入操作突发限制
- type:
uint
- default:
0
- rbd_qos_write_iops_burst_seconds
所需的写入操作突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_bps_limit
所需的每秒 IO 字节限制
- type:
uint
- default:
0
- rbd_qos_bps_burst
所需的 IO 字节突发限制
- type:
uint
- default:
0
- rbd_qos_bps_burst_seconds
所需的 IO 字节突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_read_bps_limit
所需的每秒读取字节数限制
- type:
uint
- default:
0
- rbd_qos_read_bps_burst
所需的读取字节突发限制
- type:
uint
- default:
0
- rbd_qos_read_bps_burst_seconds
所需的读取字节突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_write_bps_limit
所需的每秒写入字节数限制
- type:
uint
- default:
0
- rbd_qos_write_bps_burst
所需的写入字节突发限制
- type:
uint
- default:
0
- rbd_qos_write_bps_burst_seconds
所需的写入字节突发持续时间(秒)
- type:
uint
- default:
1
- min:
1
- rbd_qos_schedule_tick_min
这决定了 I/O 在达到限制器的限制时可以解除阻塞的最小时间(以毫秒为单位)。在令牌桶算法方面,这是向桶中添加令牌的最小间隔。
- type:
uint
- default:
50
- min:
1
- rbd_qos_exclude_ops
可选地从 QoS 排除操作。此设置接受一个整数掩码值或逗号分隔的操作名称字符串。此设置始终内部存储为整数掩码值。操作掩码值和操作名称之间的映射如下:+1 -> 读取,+2 -> 写入,+4 -> 弃用,+8 -> 写入相同,+16 -> 比较并写入
- type:
str
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.