2025年2月16日星期日

ceph osd pool get cache-pool all 缓存池相关配置

 

核心参数

参数作用适用场景建议值
size副本数量,决定数据在 OSD 之间的冗余度2-3 副本保证数据安全生产环境建议 3,测试环境 2
min_size最小副本数,低于该值时数据不可写一般设置为 size 的一半size / 2 向上取整,例如 2 副本时建议 23 副本时建议 2
pg_num / pgp_num置换组数量,决定数据在 OSD 之间的分布情况高吞吐量时需合理设置使用 ceph pg autoscaler 自动调整或手动计算合适的值

缓存相关参数

参数作用适用场景建议值
hit_set_type用于追踪最近访问过的对象,通常用于 writebackreadproxy 缓存模式仅在 writeback 缓存需要统计访问频率时使用bloom(适用于热点缓存),none 表示未启用
hit_set_periodhit_set 统计的时间窗口(秒)影响数据推广(promote)策略一般 120s
hit_set_count维护的 hit_set 历史记录数量用于访问统计适用于 readproxy 缓存,建议 8
cache_target_dirty_ratiowriteback 模式下,缓存池中允许的“脏”数据比例(未回写到主存储池)0 表示未启用缓存写回0.2 ~ 0.4(即 20%-40%)
cache_target_dirty_high_ratiowriteback 模式下,达到此比例后强制回写控制写缓存溢出0.6 ~ 0.8
cache_target_full_ratio缓存池达到该比例时,触发对象驱逐(eviction)防止缓存池填满0.8 ~ 0.9
cache_min_flush_age最小的回写等待时间(秒)writeback 模式下生效,延迟数据写入,提高缓存命中率60 ~ 300s
cache_min_evict_age最小的驱逐时间(秒),低于该时间的数据不会从缓存池清除控制缓存淘汰策略300 ~ 600s

数据提升与迁移相关参数

参数作用适用场景建议值
min_read_recency_for_promote读操作提升数据到缓存的最小访问次数适用于 readproxy,减少缓存污染3 ~ 5(减少临时访问数据进入缓存)
min_write_recency_for_promote写操作提升数据到缓存的最小访问次数适用于 writeback,避免冷数据进入缓存3 ~ 5

I/O 相关参数

参数作用适用场景建议值
fast_read是否开启快速读取(跳过缓存直接读后端池)readproxyreadonly 模式时可用1(开启)
hit_set_grade_decay_ratehit_set 统计数据的衰减速度影响数据淘汰率0.9 ~ 0.95
hit_set_search_last_n在最近 Nhit_set 周期内搜索热点数据用于热点统计8

你的存储池的当前状态分析

你的 cache-pool 目前:

  • cache_mode 没有显示:说明缓存池可能未正确启用,建议检查 ceph osd pool get cache-pool cache_mode
  • 所有缓存参数都为 0:表示当前没有配置缓存策略,缓存机制可能未生效。
  • hit_set_typenone:说明没有开启热点追踪,建议启用 bloom 过滤器以提高缓存效率。

改进建议

  1. 检查缓存模式

    bash
    ceph osd pool get cache-pool cache_mode
    • 若输出为空或 none,需要设置缓存模式,例如:
      bash
      ceph osd tier cache-mode cache-pool writeback
  2. 设置基本缓存参数

    bash
    ceph osd pool set cache-pool cache_target_dirty_ratio 0.3 ceph osd pool set cache-pool cache_target_dirty_high_ratio 0.7 ceph osd pool set cache-pool cache_target_full_ratio 0.9 ceph osd pool set cache-pool cache_min_flush_age 120 ceph osd pool set cache-pool cache_min_evict_age 600 ceph osd pool set cache-pool min_read_recency_for_promote 3 ceph osd pool set cache-pool min_write_recency_for_promote 3
  3. 启用 hit_set 以追踪热点

    bash
    ceph osd pool set cache-pool hit_set_type bloom ceph osd pool set cache-pool hit_set_period 120 ceph osd pool set cache-pool hit_set_count 8 ceph osd pool set cache-pool hit_set_grade_decay_rate 0.9 ceph osd pool set cache-pool hit_set_search_last_n 8
  4. 确认是否正确绑定

    bash
    ceph osd tier set-overlay cephfs_data cache-pool

总结

你的 cache-pool 目前的缓存机制似乎未生效(所有缓存参数都为 0),可能只是创建了缓存池但未启用。如果你希望真正利用缓存池提高 CephFS 读写性能,建议:

  • 启用 writeback 模式,允许缓存数据写入并在后台同步到主存储池。
  • 调整缓存参数,优化数据回写、驱逐、访问提升策略。
  • 检查缓存绑定关系,确保 cephfs_data 正确使用 cache-pool 作为缓存层。

这样可以充分发挥 CephFS 的缓存能力,提高 I/O 性能!

2025年2月3日星期一

创建pve 可以识别的内存盘

 


Proxmox VE (PVE) 中,你需要一个能被识别为**独立硬盘(block device)**的 RAM 盘,才能用于 Ceph OSD(对象存储守护进程)。通常,PVE 只会把标准的 块设备(block device) 当作物理磁盘,而不会识别 tmpfszram 之类的文件系统盘。

最佳方案

使用 brd(Block RAM Disk)或 loopback 设备来创建块存储,这样 PVE 可以识别它为硬盘,并让 Ceph OSD 使用它。


方案 1:使用 brd(推荐,PVE 直接识别为硬盘)

brd(block ramdisk)是 Linux 内核的 RAM 盘模块,它可以创建 /dev/ramX 设备,并被 PVE 识别为块设备。

1. 启用 brd 模块

bash
sudo modprobe brd rd_nr=1 rd_size=1048576
  • rd_nr=1:创建 1 个 RAM 盘
  • rd_size=1048576:设置大小为 1GB(可修改)

2. 确保 /dev/ram0 设备存在

bash
ls -lh /dev/ram*

3. 在 PVE 识别为硬盘

在 PVE Web 界面:

  • 进入 "Datacenter" → "Nodes" → "Disks",你应该能看到 /dev/ram0 作为未使用的磁盘。
  • 你可以用它创建 LVM、ZFS,或者直接用于 Ceph OSD

4. 在 PVE 中手动添加 OSD

如果 PVE 没有自动识别,手动运行:

bash
pveceph osd create /dev/ram0

这会将 /dev/ram0 添加到 Ceph OSD 集群。

优点:

  • PVE 识别为物理硬盘
  • 适用于 Ceph OSD
  • 无额外配置

缺点:

  • 内存大小固定,无法动态扩展

方案 2:使用 loopback 设备(适用于 QEMU/KVM)

如果你想要模拟真实 SSD 并支持 PVE 直接使用,你可以:

  1. 创建 tmpfs 内存盘
  2. 在其中创建虚拟磁盘文件
  3. 将其映射为块设备

1. 创建 tmpfs 目录

bash
sudo mkdir -p /mnt/ramdisk sudo mount -t tmpfs -o size=10G tmpfs /mnt/ramdisk

(这里 10G 可以调整大小)

2. 创建虚拟磁盘文件

bash
dd if=/dev/zero of=/mnt/ramdisk/ssd.img bs=1M count=10240

(创建一个 10GB 的虚拟硬盘)

3. 绑定到 loop 设备

bash
sudo losetup /dev/loop0 /mnt/ramdisk/ssd.img

4. 在 PVE 识别为硬盘

进入 PVE Web UI:

  • "Datacenter" → "Nodes" → "Disks"
  • 你应该能看到 /dev/loop0 作为新磁盘
  • 你可以用它创建 Ceph OSD、LVM 或 ZFS

优点:

  • 动态调整大小
  • 可用于虚拟机(QEMU/KVM)
  • PVE 识别为 SSD

缺点:

  • 性能比 brd 稍低
  • 需要 losetup 额外操作

方案 3:使用 NVMe-oF(让 PVE 识别为 NVMe 盘)

如果你想让 PVE 识别 RAM 盘为 NVMe SSD,可以使用 nvmet 创建 NVMe over Fabrics 设备。

1. 启用 nvmet

bash
sudo modprobe nvmet

2. 绑定 RAM 盘到 NVMe

bash
sudo mkdir -p /sys/kernel/config/nvmet/subsystems/ram_ssd/namespaces/1 echo -n /dev/ram0 | sudo tee /sys/kernel/config/nvmet/subsystems/ram_ssd/namespaces/1/device_path echo 1 | sudo tee /sys/kernel/config/nvmet/subsystems/ram_ssd/namespaces/1/enable

3. 在 PVE 识别为 NVMe

进入 PVE Web UI:

  • 进入 "Datacenter" → "Nodes" → "Disks"
  • 你应该看到新的 NVMe 设备

优点:

  • 模拟 NVMe 设备
  • 适用于高性能存储
  • PVE 识别为 SSD

缺点:

  • 配置复杂
  • 非所有系统都支持

最终选择

方案PVE 识别为硬盘适合 Ceph OSD适合 VM速度复杂度
brd(/dev/ramX)✅ 是✅ 是❌ 否🚀 快⭐ 简单
loopback(/dev/loopX)✅ 是✅ 是✅ 是⚡ 快⭐⭐ 适中
NVMe-oF✅ 是(NVMe)✅ 是✅ 是🚀 超快⭐⭐⭐ 复杂

如果你要在 PVE 作为 Ceph OSD 使用

推荐 brd(方案 1),直接识别为块设备

bash
sudo modprobe brd rd_nr=1 rd_size=1048576

然后在 PVE Web UI 里创建 Ceph OSD。

如果你要用于 QEMU/KVM 虚拟机

推荐 loopback(方案 2)

bash
sudo losetup /dev/loop0 /mnt/ramdisk/ssd.img

然后 PVE 会识别 /dev/loop0 为硬盘。

如果你想模拟 NVMe SSD

推荐 NVMe-oF(方案 3)

bash
sudo modprobe nvmet

然后在 PVE 里识别为 NVMe SSD。


最终建议

  • Ceph OSD:使用 brd
  • 虚拟机存储:使用 loopback
  • 模拟 NVMe 盘:使用 NVMe-oF

















2025年2月2日星期日

erasure-code-profile 纠删码(Erasure Code)存储池介绍

 


在 Ceph 中,erasure-code-profile 是用于定义纠删码(Erasure Code)存储池的配置文件。纠删码是一种数据保护技术,通过将数据分割成多个片段并生成冗余片段,可以在节省存储空间的同时提供数据冗余和高可用性。

以下是对 erasure-code-profile 的详细介绍,包括其配置参数、使用方法以及示例。


1. 纠删码简介

纠删码通过将数据分割成 k 个数据片段,并生成 m 个冗余片段,总共存储 k + m 个片段。当部分片段丢失时,可以通过剩余的片段恢复原始数据。

  • 优点

    • 节省存储空间(相比副本机制)。

    • 提供数据冗余和高可用性。

  • 缺点

    • 计算开销较大,可能影响性能。

    • 需要至少 k 个片段才能恢复数据。


2. erasure-code-profile 配置参数

erasure-code-profile 的主要配置参数包括:

参数名描述
k数据片段的数量。
m冗余片段的数量。
plugin使用的纠删码插件,如 jerasureisalrc 等。
crush-failure-domain故障域(如 hostrack),用于控制数据片段的分布。
crush-device-class设备类型(如 hddssd),用于指定存储设备的类型。
technique纠删码算法(仅适用于 jerasure 插件),如 reed_sol_vancauchy
directory插件库的路径(可选)。
ruleset-failure-domain故障域(旧版本参数,建议使用 crush-failure-domain)。

3. 创建 erasure-code-profile

使用以下命令创建纠删码配置文件:

bash
复制
ceph osd erasure-code-profile set <profile-name> \
    [<parameter>=<value> ...]

示例 1:基本配置

创建一个名为 myprofile 的纠删码配置文件,k=4m=2,使用 jerasure 插件:

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    crush-failure-domain=host

示例 2:指定算法

创建一个使用 cauchy 算法的纠删码配置文件:

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host

4. 查看 erasure-code-profile

可以使用以下命令查看已创建的纠删码配置文件:

bash
复制
ceph osd erasure-code-profile ls

查看特定配置文件的详细信息:

bash
复制
ceph osd erasure-code-profile get <profile-name>

5. 使用 erasure-code-profile 创建存储池

创建纠删码存储池时,需要指定纠删码配置文件。

语法

bash
复制
ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure <profile-name>

示例

创建一个名为 mypool 的纠删码存储池,使用 myprofile 配置文件:

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile

6. 修改 erasure-code-profile

如果需要修改纠删码配置文件,可以先删除旧配置文件,然后重新创建。

删除配置文件

bash
复制
ceph osd erasure-code-profile rm <profile-name>

重新创建配置文件

按照上述步骤重新创建。


7. 纠删码插件

Ceph 支持多种纠删码插件,常见的有:

Jerasure

  • 特点:性能较好,支持多种算法。

  • 算法reed_sol_vancauchy 等。

ISA

  • 特点:基于 Intel ISA-L 库,性能优化。

  • 适用场景:适用于 Intel 硬件。

LRC(Locally Repairable Code)

  • 特点:支持本地修复,减少修复时的数据读取量。

  • 适用场景:大规模集群。


8. 示例:完整流程

步骤 1:创建纠删码配置文件

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host

步骤 2:创建纠删码存储池

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile

步骤 3:验证存储池

bash
复制
ceph osd pool ls detail

9. 注意事项

  • 性能影响:纠删码的计算开销较大,可能影响性能,建议在性能要求不高的场景中使用。

  • 数据恢复:确保 k 和 m 的值合理,以平衡存储空间和数据冗余。

  • 故障域:合理设置故障域,确保数据片段分布在不同的故障域中。


总结

erasure-code-profile 是 Ceph 中用于定义纠删码存储池的核心配置。通过合理配置 km、故障域和插件参数,可以在节省存储空间的同时提供数据冗余和高可用性。熟练掌握纠删码的配置和使用,是优化 Ceph 集群存储效率的关键。




















在 Ceph 中,crush rule 和 erasure-code-profile 是两个独立但相关的概念。crush rule 用于定义数据在集群中的分布方式,而 erasure-code-profile 用于定义纠删码的编码参数。要将两者结合起来使用,需要在创建纠删码存储池时指定 erasure-code-profile,并自动生成或关联一个 crush rule

以下是详细说明如何在 Ceph 中调用纠删码配置文件并关联 crush rule


1. 创建纠删码配置文件

首先,创建一个纠删码配置文件(erasure-code-profile)。这个配置文件定义了纠删码的参数,如 k(数据块数量)、m(校验块数量)、插件类型(如 jerasure)等。

示例:创建纠删码配置文件

bash
复制
ceph osd erasure-code-profile set myprofile \
    k=4 m=2 \
    plugin=jerasure \
    technique=cauchy \
    crush-failure-domain=host
  • k=4:数据块数量为 4。

  • m=2:校验块数量为 2。

  • plugin=jerasure:使用 jerasure 插件。

  • technique=cauchy:使用 cauchy 算法。

  • crush-failure-domain=host:数据块分布在不同的主机上。


2. 创建纠删码存储池

在创建纠删码存储池时,Ceph 会自动生成一个与纠删码配置文件关联的 crush rule

语法

bash
复制
ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure <profile-name>

示例:创建纠删码存储池

bash
复制
ceph osd pool create mypool 128 128 erasure myprofile
  • mypool:存储池名称。

  • 128:PG(Placement Group)数量。

  • 128:PGP(Placement Group for Placement)数量。

  • erasure:指定存储池类型为纠删码。

  • myprofile:使用的纠删码配置文件。


3. 查看自动生成的 CRUSH Rule

创建纠删码存储池后,Ceph 会自动生成一个与纠删码配置文件关联的 crush rule。可以使用以下命令查看生成的规则:

查看所有 CRUSH Rule

bash
复制
ceph osd crush rule ls

查看特定 Rule 的详细信息

bash
复制
ceph osd crush rule dump <rule-name>

示例输出

json
复制
{
    "rule_id": 1,
    "rule_name": "mypool",
    "type": 3,
    "steps": [
        {
            "op": "take",
            "item": -1,
            "item_name": "default"
        },
        {
            "op": "chooseleaf",
            "num": 0,
            "type": "host"
        },
        {
            "op": "emit"
        }
    ]
}
  • rule_name:规则的名称,通常与存储池名称相同。

  • type:规则类型,3 表示纠删码规则。

  • steps:定义了数据的分布方式,如 chooseleaf 表示数据块分布在不同的故障域(如 host)中。


4. 手动创建纠删码 CRUSH Rule

如果需要手动创建纠删码 CRUSH Rule,可以使用以下命令:

语法

bash
复制
ceph osd crush rule create-erasure <rule-name> <profile-name> <root>

参数说明

  • <rule-name>:规则的名称。

  • <profile-name>:纠删码配置文件的名称。

  • <root>:CRUSH 层次结构的根节点(通常是 default)。

示例:手动创建纠删码 CRUSH Rule

bash
复制
ceph osd crush rule create-erasure myrule myprofile default

5. 修改纠删码 CRUSH Rule

如果需要修改纠删码 CRUSH Rule,通常需要先删除旧规则,然后重新创建。

删除规则

bash
复制
ceph osd crush rule rm <rule-name>

重新创建规则

按照上述步骤重新创建。


6. 使用纠删码 CRUSH Rule

创建纠删码存储池时,Ceph 会自动使用与纠删码配置文件关联的 CRUSH Rule。如果需要将现有存储池切换到纠删码规则,可以使用以下命令:

语法

bash
复制
ceph osd pool set <pool-name> crush_rule <rule-name>

示例:切换存储池的 CRUSH Rule

bash
复制
ceph osd pool set mypool crush_rule myrule

7. 总结

在 Ceph 中,纠删码存储池的创建会自动生成一个与纠删码配置文件关联的 CRUSH Rule。通过以下步骤可以实现两者的结合:

  1. 创建纠删码配置文件(erasure-code-profile)。

  2. 创建纠删码存储池,Ceph 会自动生成 CRUSH Rule。

  3. 如果需要,可以手动创建或修改 CRUSH Rule。

  4. 使用 ceph osd pool set 命令将存储池与 CRUSH Rule 关联。

通过合理配置纠删码和 CRUSH Rule,可以在 Ceph 集群中实现高效的数据分布和存储。





youtube的dns屏蔽方法

  216.239.38.120 是 Google 提供的一个特殊 DNS 服务器,用于强制开启 YouTube 受限模式(Restricted Mode) 。 如果你想在家里强制 YouTube 进入受限模式,可以在 路由器的 DNS 设置 中配置以下 DNS 服务器: D...