ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ceph Pool、PG 与 CRUSH 配置参考:从集中配置数据库到实战调优

Ceph Pool、PG 与 CRUSH 配置参考:从集中配置数据库到实战调优 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载Ceph 使用集中式的 Monitor 集群配置数据库管理每个存储池Pool的副本数、最小副本数、放置组PG数量等关键参数CRUSH 算法依据这些变量把 PG 分配到 OSD 上。本篇以仓库文档 doc/rados/configuration/pool-pg-config-ref.rst 为主线结合 src/common/options 下的真实参数定义源码系统讲解如何查看与修改这些变量、如何手动调优 Pool 的 size/min_size/pg_num以及 PG 自动缩放PG Autoscaler的工作方式读完即可在自己的 Ceph 集群中安全地调整放置组数量与冗余策略。一、PG 数量由谁决定Monitor 集中配置数据库在 Ceph 中CRUSH 算法分配给每个 Pool 的放置组Placement GroupPG数量由Monitor 集群中的集中式配置数据库里的变量值决定。这意味着无论是使用cephadm或 Rook 进行的容器化部署还是传统的非容器化部署最终都依赖同一套集中配置数据库来为 Pool 分配 PG。配置数据库的完整参数定义位于仓库的 src/common/options/global.yaml.in、src/common/options/mon.yaml.in、src/common/options/mgr.yaml.in、src/common/options/osd.yaml.in 中本文后面列出的所有默认值、类型与作用域均出自这些文件是仓库当前版本的真实配置事实。配置选项可以设置为三类作用域全局生效影响所有守护进程按类型生效影响某一类守护进程或服务如所有osd或所有mon按实例生效仅影响某个特定守护进程、进程或客户端。Pool/PG/CRUSH 相关选项大多属于第二类或第三类其中osd_pool_default_*系列作用于mon服务由 Monitor 在创建 Pool 时使用mon_*系列作用于mon或mgr服务负责健康检查与状态统计osd_*系列作用于 OSD 守护进程。二、查看与设置 PG 数量变量的标准命令查看某个变量的当前值要查看决定某个 Pool 放置组数量的变量值运行如下命令ceph config get osd osd_pool_default_pg_num其中第一个参数osd是服务类型第二个参数osd_pool_default_pg_num是变量名。你也可以把服务类型换成mon、mgr、global或某个具体守护进程实例名来查看不同作用域下的取值。设置某个变量的值要修改决定某个 Pool 放置组数量的变量值运行如下命令ceph config set osd osd_pool_default_pg_num例如将新建 Pool 的默认 PG 数量改为 256ceph config set osd osd_pool_default_pg_num 256ceph config set写入的是 Monitor 集中配置数据库因此修改对所有遵守该配置的守护进程立即生效无需像传统ceph.conf那样逐台分发文件。在容器化部署cephadm/Rook场景下这一优势尤为明显因为配置变更不再依赖重启容器或重建 Pod。通过 ceph.conf 静态配置集中配置数据库之外传统的ceph.conf静态配置方式依然可用。仓库文档中随附的示例配置 doc/rados/configuration/pool-pg.conf 给出了一个典型的[global]段[global] # By default, Ceph makes three replicas of RADOS objects. If you want # to maintain four copies of an object the default value--a primary # copy and three replica copies--reset the default values as shown in # osd_pool_default_size. If you want to allow Ceph to accept an I/O # operation to a degraded PG, set osd_pool_default_min_size to a # number less than the osd_pool_default_size value. osd_pool_default_size 3 # Write an object three times. osd_pool_default_min_size 2 # Accept an I/O operation to a PG that has two copies of an object. # Note: by default, PG autoscaling is enabled and this value is used only # in specific circumstances. It is however still recommended to set it. # Ensure you have a realistic number of placement groups. We recommend # approximately 100 per OSD. E.g., total number of OSDs multiplied by 100 # divided by the number of replicas (i.e., osd_pool_default_size). So for # 10 OSDs and osd_pool_default_size 4, wed recommend approximately # (100 * 10) / 4 250. # Always use the nearest power of two. osd_pool_default_pg_num 256这段示例同时给出了三个最重要的经验法则osd_pool_default_size默认写 3 份1 份主副本 2 份副本。想维护 4 份则改为 4osd_pool_default_min_size允许对处于降级degraded状态的 PG 继续接受 I/O 的最低副本数通常应小于size。示例中size3、min_size2表示即使 PG 只剩 2 份拷贝仍可接受写操作osd_pool_default_pg_numPG 数量的经验公式约为“每 OSD 100 个 PG”即(OSD 总数 × 100) / 副本数并向上取到最近的 2 的幂。例如 10 个 OSD、size4时推荐约为(100 × 10) / 4 250取最接近的 2 的幂即 256。三、手动调优覆盖默认值在某些场景下覆盖部分默认值是明智的做法。例如你可能希望为一个 Pool 单独设置副本数replica size并覆盖该 Pool 默认的 PG 数量。这类调整通过ceph osd pool set系列命令完成具体见 Pool 操作指南。设置副本数与最小副本数# 将 pool 的副本数设为 3 ceph osd pool set {pool-name} size 3 # 将 pool 的最小可用副本数设为 2 ceph osd pool set {pool-name} min_size 2关于这两个字段的语义依据 doc/rados/operations/pools.rstsizePool 中对象的副本数仅对replicated副本池可直接设置纠删码EC池会报告一个等于KM的size但不能直接修改min_sizePG 保持 active 状态从而允许 I/O 继续所需的最小活跃副本/分片数。对 EC 池应设置为大于K的值——如果只在 K 个分片可用时就允许 I/O将没有任何冗余一旦再有 OSD 永久故障就会丢数据。设置 PG 数量与 pgp_num# 设置 pool 的 PG 总数 ceph osd pool set {pool-name} pg_num {pg-num} # 设置参与数据放置计算的 PG 数量 ceph osd pool set {pool-name} pgp_num {pgp-num}字段语义依据 doc/rados/operations/pools.rstpg_numPool 的 PG 总数。有效范围是0到mon_max_pool_pg_num若设为0则使用osd_pool_default_pg_num的值。注意如果该 Pool 开启了 PG 自动缩放autoscaler自动缩放器可能覆盖手动设置的值pgp_num计算数据放置时实际生效的 PG 数量。自 Nautilus 版本起管理员通常不再需要手动设置Ceph 会自动增量地把pgp_num向pg_num靠拢。设置 CRUSH 规则ceph osd pool set {pool-name} crush_rule {crush-rule-name}该命令设置 Ceph 用于把 Pool 的 RADOS 对象映射到 OSD 的 CRUSH 规则对于新建的副本池默认规则由osd_pool_default_crush_rule决定见下文参数表。预期对象数避免运行时 PG 分裂的代价创建 Pool 时可以指定expected-num-objectsceph osd pool create {pool-name} [pg-num] [pgp-num] [crush-rule-name] [expected-num-objects]通过预估 Pool 中预期的 RADOS 对象数可以让 PG 分裂split在创建时发生从而避免运行时分裂带来的延迟影响。默认值为 0表示创建时不分裂参见 doc/rados/operations/pools.rst。四、PG 自动缩放默认开启的行为现代 Ceph 集群中osd_pool_default_pg_autoscale_mode的默认值是on这意味着新建 Pool 时不会直接使用osd_pool_default_pg_num而是先创建 1 个 PG再由自动缩放器根据实际用量自动调整 PG 数量。这也解释了 pool-pg.conf 注释中的提醒该变量只在特定场景下使用但依然建议显式设置。该行为在 src/common/options/global.yaml.in 中有明确说明- name: osd_pool_default_pg_autoscale_mode type: str level: advanced desc: Default PG autoscaling behavior for new pools long_desc: When on, the autoscaler assigns 1 PG to new pools unless the user specifies a value. default: on enum_values: - off - warn - on三种自动缩放模式创建 Pool 时可通过--autoscale-mode指定模式参见 doc/rados/operations/pools.rst模式行为on集群根据实际用量自动调整 Pool 的 PG 数量warn集群根据实际用量给出调整建议但不自动执行off关闭自动缩放完全由管理员决定 PG 数量全局默认行为由osd_pool_default_pg_autoscale_mode决定。也可以在创建后修改ceph osd pool set {pool-name} pg_autoscale_mode on|off|warn全局开关 noautoscale自动缩放器可以通过noautoscale标志对所有 Pool 全局启用/禁用详见 placement-groups.rst# 对所有 Pool 关闭自动缩放 ceph osd pool set noautoscale # 重新开启自动缩放 ceph osd pool unset noautoscale # 查看当前标志值 ceph osd pool get noautoscale查看自动缩放建议ceph osd pool autoscale-status输出示例取自 placement-groups.rstPOOL SIZE TARGET SIZE RATE RAW CAPACITY RATIO FINAL RATIO TARGET RATIO EFFECTIVE RATIO BIAS PG_NUM NEW PG_NUM AUTOSCALE BULK a 12900M 3.0 82431M 0.4695 0.2560 8 128 warn True c 0 3.0 82431M 0.0000 0.1280 0.2000 0.9884 1.0 1 64 warn True该命令展示每个 Pool 的相对利用率以及 PG 数量调整建议NEW PG_NUM列。如果输出为空说明所有 Pool 的 PG 数量都已达到或接近自动缩放器的目标值。若需更系统地计算 PG 数量可参考仓库中的 PG Calculator 工具 及 PG 概念文档。五、完整配置项参考默认值来自当前仓库源码以下是本参考文档pool-pg-config-ref.rst所覆盖的全部配置项。表中默认值、类型、级别均取自当前仓库的 src/common/options 参数定义文件可作为配置的权威依据。Monitor / Manager 侧PG 上限与健康告警配置项类型级别默认值含义源码出处mon_max_pool_pg_numuintadvanced65536每个 Pool 的最大 PG 数量mon.yaml.inmon_pg_stuck_thresholdintadvanced60 秒PG 被视为 stuck如 inactive、unclean、undersized、stale的秒数mgr.yaml.inmon_pg_warn_min_per_osduintadvanced0每个in状态的 OSD 平均 PG 数低于此值则触发HEALTH_WARN非正数表示禁用mgr.yaml.inmon_pg_warn_min_objectsintadvanced10000集群 RADOS 对象总数低于此值时不发出警告mgr.yaml.inmon_pg_warn_min_pool_objectsintadvanced1000对象数低于此值的 Pool 不参与告警判断mgr.yaml.inmon_pg_check_down_all_thresholdfloatadvanced0.5down 的 OSD 比例超过该阈值后检查所有 PG 是否 stalemgr.yaml.inmon_pg_warn_max_object_skewfloatadvanced10某 Pool 每 PG 平均对象数超过全局平均值该倍数时触发HEALTH_WARN非正数禁用mgr.yaml.inmon_delta_reset_intervalfloatadvanced10 秒无活动时重置某 Pool 空间使用 delta 统计的窗口时长用于ceph status中的速率计算mgr.yaml.inOSD 侧默认 Pool 属性配置项类型级别默认值含义源码出处osd_crush_chooseleaf_typeintdev1CRUSH 规则中chooseleaf使用的 bucket 类型按序号而非名称1 表示 hostglobal.yaml.inosd_crush_initial_weightfloatadvanced-1新加入 OSD 的初始 CRUSH 权重负值默认表示按设备容量TiB计算非负值则使用显式权重osd.yaml.inosd_pool_default_crush_ruleintadvanced-1创建副本池时使用的默认 CRUSH 规则-1表示“选取数值 ID 最小的规则”以保证没有规则 0 时也能创建 Poolglobal.yaml.inosd_pool_default_sizeuintadvanced3新建副本池对象的副本数等价于ceph osd pool set {pool} size {n}范围 0–10global.yaml.inosd_pool_default_min_sizeuintadvanced0降级模式下最低写入副本数0 表示不设下限此时取size - (size / 2)范围 0–255global.yaml.inosd_pool_default_pg_numuintadvanced32新建 RADOS Pool 的默认 PG 数量因自动缩放默认开启仅当 autoscaler 关闭或创建时显式指定pg_num时才生效global.yaml.inosd_pool_default_pgp_numuintadvanced0Pool 用于放置目的的默认 PG 数0 表示跟随pg_num。除非关闭自动缩放否则不应显式设置global.yaml.inosd_pool_default_pg_autoscale_modestradvancedon新建 Pool 的默认 PG 自动缩放行为取值off/warn/onglobal.yaml.inosd_pool_default_flagsintdev0新建 Pool 设置的整数标志位global.yaml.inosd_pool_default_flag_ec_optimizationsbooladvancedfalse新建 EC 池是否默认开启allow_ec_optimizations标志global.yaml.inosd_pool_erasure_code_stripe_unitsizeadvanced0EC 池对象条带中每个数据块默认大小字节0 表示自动选择——开启allow_ec_optimizations时为 16KB否则为 4KB可被 EC profile 中的stripe_unit覆盖mon.yaml.inOSD 侧PG 操作与日志配置项类型级别默认值含义源码出处osd_max_pglsuintadvanced1000列出 Pool 对象时返回的最大 PG 数量上限大请求可能拖住 OSD 守护进程因此设上限osd.yaml.inosd_min_pg_log_entriesuintdev250裁剪 PG 日志时保留的最小条目数global.yaml.inosd_max_pg_log_entriesuintdev10000裁剪 PG 日志时保留的最大条目数global.yaml.inosd_default_data_pool_replay_windowintadvanced45 秒OSD 等待客户端重放请求的时间global.yaml.inosd_max_pg_per_osd_hard_ratiofloatadvanced3OSD 拒绝创建新 PG 的硬上限倍数超过osd_max_pg_per_osd_hard_ratio × mon_max_pg_per_osd后停止新建 PG最小值 1global.yaml.in六、健康告警与监控联动Monitor/Mgr 侧的多个mon_pg_warn_*变量共同构成 PG 健康告警体系定义见 mgr.yaml.in当每个inOSD 的平均 PG 数低于mon_pg_warn_min_per_osd时触发HEALTH_WARN默认 0即不告警当某 Pool 每 PG 的平均对象数超过全部 Pool 平均值的mon_pg_warn_max_object_skew倍时触发HEALTH_WARN默认 10 倍mon_pg_warn_min_objects10000与mon_pg_warn_min_pool_objects1000分别用于在集群或单 Pool 对象数过少时抑制这类告警避免小集群上产生噪音mon_pg_stuck_threshold60 秒定义 PG 进入 stuck 状态inactive/unclean/undersized/stale的判定时间与 监控 OSD 与 PG 文档 中的 peering 监控直接相关mon_pg_check_down_all_threshold0.5控制 down 的 OSD 比例超过 50% 时对所有 PG 做 stale 检查。如果集群出现与 PG 数量相关的告警建议先运行ceph osd pool autoscale-status查看自动缩放建议再结合ceph config get核对相关变量的当前值避免盲目修改。七、CRUSH 权重相关补充CRUSH 层的两个关键变量同样归入本参考osd_crush_chooseleaf_typeCRUSH 规则中chooseleaf使用的 bucket 类型序号默认 1 即 host 级别决定副本默认分散到不同主机osd_crush_initial_weight新 OSD 的初始 CRUSH 权重默认-1表示按设备容量TiB自动计算。若需显式控制可设为非负值具体算法参见 CRUSH Map 操作指南 中的 Weighting Bucket Items 一节。八、常用操作速查# 查看默认 PG 数量 ceph config get osd osd_pool_default_pg_num # 修改默认 PG 数量 ceph config set osd osd_pool_default_pg_num 256 # 修改默认副本数 / 最小副本数等价于 pool set ceph config set osd osd_pool_default_size 3 ceph config set osd osd_pool_default_min_size 2 # 对单个 Pool 手动调优 ceph osd pool set {pool-name} size 3 ceph osd pool set {pool-name} min_size 2 ceph osd pool set {pool-name} pg_num 256 ceph osd pool set {pool-name} pgp_num 256 ceph osd pool set {pool-name} crush_rule {rule-name} # PG 自动缩放管理 ceph osd pool autoscale-status ceph osd pool set {pool-name} pg_autoscale_mode on|off|warn ceph osd pool set noautoscale ceph osd pool unset noautoscale九、进一步阅读Pool、PG 与 CRUSH 配置参考本文档源示例配置 pool-pg.confPool 操作指南创建、设置属性、配额PG 自动缩放与放置组操作监控 OSD 与 PGpeering 与 stuck 判定CRUSH Map 操作指南bucket 权重PG 概念与计算配置项定义源码global.yaml.in / mon.yaml.in / mgr.yaml.in / osd.yaml.in赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph 配置完全指南配置文件、集中式配置数据库与运行时调优Ceph 配置完全指南配置文件、集中式配置数据库与运行时调优 Ceph 是一个分布式对象、块和文件存储平台其行为由大量可配置的守护进程选项控制。本文以 do存储分布式文件系统对象存储后端高可用Rook Ceph 集群配置实战从 PG/PGP 规划到 ceph.conf 高级覆盖Rook Ceph 集群配置实战从 PG/PGP 规划到 ceph.conf 高级覆盖 导读 本文基于 Rook 官方文档 Documentation/Sto云原生存储容器编排运维Ceph 纠删码存储池Erasure-Coded Pool实战指南从 CRUSH 规则、profile 配置到底层编码原理Ceph 纠删码存储池Erasure Coded Pool实战指南从 CRUSH 规则、profile 配置到底层编码原理 Ceph 的纠删码erasu存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表