当前位置: 首页 > 科技观察

CephPG自动伸缩优化升级Quincy版本note

时间:2023-03-18 12:20:35 科技观察

介绍pg_autoscaler模块最早在Nautilus(14.2.x)版本中引入,是Ceph集群自动管理归置组的绝佳方式。根据预期的池使用情况,pg_autoscaler可以根据对池使用情况和用户设置的调整提出建议并调整集群中归置组的数量。自动缩放器带有一系列调整选项,包括--bulk标志、target_size_ratio、noautoscale、bias、pg_num、pg_num_max和pg_num_min。在准备最新的Quincy版本时,我们通过发布基准测试和派生的调整建议和故障排除提示来测试这些调整,用户在升级到Quincy时可以参考这些调整。在这篇博文中,我们总结了自动缩放器带来的最初挑战,概述了发布基准测试产生的最佳调优实践,并以一些自动缩放器故障排除技巧作为结尾。--bulk标志的最初挑战和动机在Quincy之前,一些通过自动化工具安装Ceph的用户从一开始就遇到了性能问题。默认情况下,自动缩放器以最小数量的PG启动每个池,并且仅在使用量增加后增加该数量。这种行为主要导致大型池需要比自动缩放器提供的最小数量更多的PG时性能不佳。这种“默认安装”行为导致Quincy引入了--bulk标志。用户现在可以使用--bulk来标记批量存储池。通过在池上设置--bulk标志,自动缩放器将从一开始就分配更多的PG。这样,用户在分配适当数量的PG之前不再需要等待自动缩放器检测到更多使用情况。调整建议--bulk标志应该与大型池一起使用以获得最佳性能。--bulk标志现在可用于指示存储池将很大并且应该以大量PG开始。用户可以在创建新池和现有池时设置--bulk标志。任何没有使用--bulk标志创建的池都将保持以最小数量的PG开始的默认行为。要在池创建期间设置--bulk标志,请使用cephosdpoolcreate--bulk。要在现有池上设置或取消设置--bulk标志,请使用cephosdpoolsetbulk。要获取现有池的--bulk标志状态,请使用cephosdpoolgetbulk。如果您希望一个池相对于其他池消耗更多集群容量,请使用target_size_ratio设置。可以使用target_size_ratio设置指定池的目标比率。如果您知道某个池相对于其他池应具有特定比率,则此设置特别有用。除非另有说明,否则每个池的目标比率应默认为0。你给池子的targetratio越高,你对池子的PG期望就越高。要检查池的目标比率,请使用osdpoolautoscale-status并查看TARGETRATIO列。target_size_ratio可以使用cephosdpoolsettarget_size_ratio进行调整。要在池创建期间设置target_size_ratio,请使用cephosdpoolcreate--target-size-ratio。使用noautoscale标志全局切换所有池的自动缩放器。现在可以使用noautoscale标志为所有池全局打开和关闭自动缩放器。默认情况下,此标志设置为false并且每个池的默认pg_autoscale模式(即on)保持相同。如果你想为每个池打开自动缩放器,使用cephosdpoolunsetnoautoscale。如果要为每个池关闭自动缩放器,请使用cephosdpoolsetnoautoscale。要获取noautoscale标志的当前值,请使用cephosdpoolgetnoautoscale。使用bias帮助autoscaler准确调整PG的数量。偏差是一个乘数,用于根据有关池的预期PG数量的信息手动调整池的PG。默认情况下,偏差值应为1.0,除非另有说明。你给池子的偏见越多,你对池子的PG期望就越高。要检查池中的偏差值,请使用osdpoolautoscale-status并查看BIAS列。要在现有池上设置偏差,请使用cephosdpoolsetpg_autoscale_bias。如果您提前知道池的使用情况,请在创建池之前使用pg_num选项。首次创建集群或池时,只会消耗集群容量的一小部分。因此,您的系统可能会低估集群或池所需的PG数量。如果您提前知道集群或池的使用情况,请在创建池之前使用pg_num选项。这将帮助您的集群提前计入适当数量的PG。要检查池的pg_num值,请使用cephosdpoolautoscale-status并查看PG_NUM列。要指定在创建池时设置pg_num,请使用cephosdpoolcreate。要设置池中允许的最小pg数,请使用cephosdpoolsetpg_num_min。要设置池中允许的最大pg数,请使用cephosdpoolsetpg_num_max。使用pg_num_max值设置池中PG的最大数量。可以指定池中PG的最大数量。这在创建较小的池(例如.mgr、元池或不带--bulk标志的池)时很有用。要在创建池时指定最大PG计数,请在命令中使用可选的--pg-num-max参数。cephosdpoolcreate创建池后,使用cephosdpoolsetpg_num_max进行设置。使用pg_num_min值设置池中PG的最小数量。同样,我们可以指定池中PG的最小数量。当我们希望客户端在执行IO时看到的并行度数量有一个下限时,这是有利的,即使池大部分是空的。这在创建更大的池时很有用,例如那些设置了--bulk标志的池。要在创建池时指定最小PG计数,请使用命令的可选--pg-num-min参数。cephosdpoolcreate创建池后,使用cephosdpoolsetpg_num_min进行设置。升级到Quincy之前需要知道的事情当从没有自动缩放器的Ceph版本升级到带有自动缩放器的Ceph版本时,升级后每个池都可以使用自动缩放器,默认情况下所有池都将关闭。但是,如果您从带有自动缩放器的Ceph版本升级到也包含自动缩放器的较新版本,所有池将保留升级前的原始自动缩放器设置,无论是关闭、打开还是警告。要在池上使用--bulk标志,用户需要升级到Ceph>=16.2.8。最后,重要的是启用日志记录来诊断pg_autoscaler模块的任何问题。与所有管理器模块一样,pg_autoscaler有一个log_level选项来指定其Python日志记录级别。我们建议您使用警告来捕获有关升级过程的信息。要获取pg_autoscaler模块的当前日志级别,请使用cephconfiggetmgrmgr/pg_autoscaler/log_level。要将pg_autoscaler日志级别设置为警告,请使用cephconfigsetmgrmgr/pg-autoscaler/log_levelwarning。其他选项包括信息、调试、关键和错误。故障排除提示如果自动缩放器未按预期方向缩放怎么办?要检查每个池的批量值配置是否正确,请使用cephosdpoolautoscale-status。如果BULK为“false”,自动缩放器从最小数量的PG开始。如果BULK设置为“true”,自动缩放器会从大量PG开始。如果您在状态输出中看到的任何批量值与预期不符,您可以使用cephosdpoolsetbulk更改它们。为什么自动缩放器无法缩放或使用不正确的值进行缩放?检查受影响的池的自动缩放器是否打开/关闭。如果自动缩放器无法在池上缩放,请检查on是否适用于该池。您可以使用cephosdpoolautoscale-status检查它。在AUTOSCALE列中,检查模式是否打开。如果找到的状态为off,您可以为受影响的池打开autoscalerosdpoolsetpg_autoscale_modeon。如果autoscaleron适用于池,但你想关闭它,你可以使用osdpoolsetpg_autoscale_modeoff关闭它。检查重叠的根。如果每个池的自动缩放器模式都是正确的,则自动缩放器可能由于集群中的重叠根而无法缩放。检查此警告日志的管理器日志:池包含重叠的根...跳过缩放。我们建议让池只属于一个根,以消除警告并确保成功扩展过程。检查阈值是否影响缩放过程。检查阈值是否设置为适当的值(默认为3.0)。该值是缩放过程是否执行的决定因素。如果阈值太大(>5.0),池将需要更多的利用率来触发自动缩放过程。另一方面,如果阈值太低(<2.0),池可能对缩放过于敏感。要调整池的阈值,请使用cephosdpoolsetthreshold。检查mon_target_pg_per_osd是否设置为适当的值。下一个要检查的调整是mon_target_pg_per_osd,它是每个OSD的目标PG数量。默认情况下,该选项应设置为100。如果您发现每个OSD的PG数量不符合预期,可以使用命令cephconfigsetglobalmon_target_pg_per_osd调整该值。检查速率设置是否正确。另一个要检查的调整是速率值,它是池的复制大小(复制池)或纠删码值(纠删码池)。此值确定池消耗了多少原始存储容量。使用命令osdpoolautoscale-status验证它是否根据池的副本大小或纠删码配置文件正确设置。在输出的RATE列中,您可以看到每个池的费率是如何设置的。您可以使用cephosdpoolsetsize调整单个池的速率。检查偏差设置是否正确。调优建议(https://img.ydisp.cn/news/20221019/ld3b4j3gohq)中解释,你给pool的bias越大,你期望pool拥有的PG就越大。因此,你应该检查是否存在bias为受影响的池设置一个适当的值。检查target_size_ratio是否设置正确。同样,target_size_ratio是另一个调整,你在池中提供的越多,你期望池中的PG越大,所以,你应确保该值适用于受影响的池。我如何知道自动缩放器在做什么?从高级视图中,您可以使用命令查看自动缩放器的活动ceph进度。此命令的输出显示了正在运行的池目前正在扩展他们的PG以及扩展了多少。此外,您可以通过执行cephosdpoolautoscale-status并查看每个池的NEWPG_NUM列来了解与PG目标的差异。有关自动缩放器的最详细视图,请访问管理器日志并查找以下INFO级别的日志输出:Poolroot_idusingofspace,biaspgtargetquantizedto(current)effective_target_ratio应该使用什么级别的日志记录来检查自动缩放器活动?需要Python日志记录中的错误日志级别来检查自动缩放器活动。有关检查和设置自动缩放器日志记录级别的信息。结论正确调整pg_autoscaler模块是让Ceph集群自动管理其归置组的好方法。我们希望这些自动调节器调优建议和故障排除技巧能够改善所有用户升级到最新版本Quincy时的开箱即用体验。有关详细信息,请参阅归置组(https://docs.ceph.com/en/latest/rados/operations/placement-groups/)文档,其中包含有关自动缩放器行为的更多详细信息。*原文:https://ceph.io/en/news/blog/2022/autoscaler_tuning/