针对虚拟化工作负载优化 ODF 性能

虚拟私有云 4.20 后来 仅限裸机工作节点

您可以通过选择合适的性能配置文件、调整 OSD Pod 的资源限制以及配置批量数据操作,来提升 OpenShift Data Foundation (ODF) 在虚拟化工作负载下的存储性能。 这些选项适用于采用手动部署的 OpenShift 虚拟化及 Red Hat OpenShift 虚拟化服务集群的 Red Hat OpenShift on IBM Cloud 集群。

准备工作

  • 您必须拥有对该集群的 cluster-admin 访问权限。
  • 安装 或更新 IBM Cloud 命令行工具和 oc 命令行工具。
  • 在调整资源限制或配置存储池之前,必须已安装 ODF 且其处于正常运行状态。 要验证 ODF 的运行状态,请参阅 “检查 Ceph 集群的运行状态”

选择 ODF 性能配置文件

ODF 提供了两个性能配置文件,用于控制存储组件的 CPU 和内存分配。 选择最适合您工作负载的配置文件。

性能
分配的 CPU 和内存资源比 “平衡”配置更多。 请将此配置文件用于需要高吞吐量和低延迟的 VM 工作负载,例如数据库或高流量应用程序。
均衡
占用适度的CPU和内存资源。 请将此配置用于通用工作负载、混合环境或成本优化型部署。

部署 ODF 时,请在 “后端存储”下的 “资源配置文件”字段中选择 “性能”。 在虚拟化服务集群中,默认选择 “性能” 模式。

您可以通过控制台或命令行界面(CLI)设置配置文件。

  • 控制台 - 标准 Red Hat OpenShift on IBM Cloud 集群:安装ODF插件时,请在 “后端存储”部分中选择 “性能”
  • 控制台 - 虚拟化服务集群:默认选中 “性能”。 要进行更改,请在创建集群时,在 “虚拟化集成”部分中,选择 “OpenShift 数据基础”卡片上的“编辑”。

此选项仅适用于标准的 Red Hat OpenShift on IBM Cloud 集群。 对于虚拟化服务集群,您需要在创建集群时设置配置文件。

在命令行界面(CLI)中,启用该插件时请包含 --param "resourceProfile=performance"

ibmcloud oc cluster addon enable openshift-data-foundation \
  -c <cluster-name> \
  --version <addon-version> \
  --param "odfDeploy=true" \
  --param "osdStorageClassName=localblock" \
  --param "autoDiscoverDevices=true" \
  --param "resourceProfile=performance" \
  --param "setDefaultStorageClassForVirtualization=true"

有关所有 ODF 附加参数的信息,请参阅 OpenShift 中的 Data Foundation 参数参考

配置 OSD Pod 资源限制

Object Storage Daemon(OSD)Pod 用于存储数据,并参与数据放置和复制。 对于I/O需求较高的虚拟化工作负载,您可以提高OSD Pod的CPU和内存限制,以帮助缓解瓶颈。

检查当前的 OSD 资源限制

在修改资源限制之前,请检查 OSD Pod 的当前 CPU 和内存设置。 请记录当前的请求和限制,以便稍后将其与实际使用情况及更新后的数值进行对比。

oc get pods -n openshift-storage -l app=rook-ceph-osd \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'

查看输出结果,以确定每个 OSD 容器的当前 CPU 和内存请求及限制。 请在下一条命令中将这些数值与实际使用情况进行比较。 如果 CPU 或内存使用率持续接近配置的限制值,提高这些限制值可能会有助于缓解瓶颈。

要检查实际资源消耗情况,请运行以下命令,并将 CPU 和内存使用情况与您记录的限制值进行对比:

oc adm top pods -n openshift-storage -l app=rook-ceph-osd

提高 OSD 资源限制

如果当前的限制对您的 VM 工作负载而言不足,请通过编辑 ocs-storagecluster 资源来更新这些限制。

您还可以在 ocs-storagecluster 配置中修改其他 Rook-Ceph Pod的限制,例如 monmgrrgw。 有关详细信息,请参阅 Red Hat 解决方案 6959127

  1. 打开存储集群资源以进行编辑。

    oc edit storagecluster ocs-storagecluster -n openshift-storage
    
  2. 在相应的 storageDeviceSets 条目中,添加或更新 resources 字段。 以下部分示例将限制设置为 4 个 CPU 和 24 Gi 内存,并将请求设置为 2 个 CPU 和 24 Gi 内存:

    storageDeviceSets:
      - name: ocs-deviceset
        resources:
          limits:
            cpu: "4"
            memory: "24Gi"
          requests:
            cpu: "2"
            memory: "24Gi"
    

    CPU 和内存请求必须小于或等于限制值。

  3. 保存并退出编辑器。

    保存更改后,OSD Pod 会自动重启。 请等待滚动重启完成后,再执行其他存储操作。

验证更新后的资源限制

滚动重启完成后,请确认更新后的限制已应用于所有 OSD Pod。

  1. 监控滚动重启过程,以确认所有 OSD Pod 均恢复到“Running”状态。 当所有 OSD Pod 均显示为“Running”,且没有一个显示为“Pending”或“Terminating”时,重启即告完成。

    oc get pods -n openshift-storage | grep osd | grep -v prepare | grep -v rotation
    
  2. 确认新资源值已生效。

    oc get pods -n openshift-storage -l app=rook-ceph-osd \
      -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'
    

    请确认 CPU 和内存的数值与您配置的数值一致。

配置用于大规模数据操作的批量标志

对于大规模数据操作(例如 VM 迁移、批量导入或数据归档),在Ceph块池上启用批量标志可以优化数据在OSD之间的初始分布,并减少重新平衡的开销。

“批量”标志通常用于:

  • VM 涉及数 TB 数据的磁盘迁移和导入操作。
  • 备份和还原操作。
  • 新应用程序的初始数据加载。
  • 数据归档池。

要配置一个启用了批量标志的 CephBlockPool 资源,请按照以下步骤操作。

  1. 创建或更新 CephBlockPool 资源定义,确保 parameters 部分包含 bulk: "true"

    apiVersion: ceph.rook.io/v1
    kind: CephBlockPool
    metadata:
      name: <pool-name>
      namespace: openshift-storage
    spec:
      replicated:
        size: 3
      parameters:
        bulk: "true"
    
  2. 应用配置文件。

    oc apply -f <pool-config-file>.yaml
    

    应用配置后,Ceph 就能从一开始就将新数据更均匀地分布到存储池中。 随着资金池逐渐填满,这种做法可以减少再平衡操作。

检查 Ceph 集群的健康状况

请定期监控您的 Ceph 集群,以发现性能问题并确保数据完整性。 在进行配置更改之前和之后,请运行健康检查。

执行基本健康检查

运行以下命令以获取 Ceph 的整体健康状况摘要。 一个健康的集群会返回 HEALTH_OK

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph status

要查看当前存在的警告或错误,请运行以下命令:

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph health detail

了解集群状态

ceph status 的输出包含表示数据健康状况的放置组(PG)状态。

有效/干净
理想状态。 所有放置组均处于活动状态,所有数据均已复制,且没有数据在传输中。 无需执行任何操作。
已激活+已重新映射、已激活+正在补填、已激活+正在恢复
数据正在重新分配。 在 OSD 资源变更、节点替换或扩展操作之后,出现这些状态是正常的。 在进行其他更改之前,请等待集群恢复到 active/clean 状态。

正确的输出示例:

HEALTH_OK

再平衡过程中的输出示例:

HEALTH_WARN
  Degraded data redundancy: 123/456 objects degraded (26.974%)
  Recovery 50/456 objects degraded (10.965%)

检查放置组和OSD状态

如需更详细地了解数据分布和 OSD 状态,请完成以下检查。

  1. 检查分组状态,以识别那些未处于“active+clean”状态的分组。

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph pg stat
    
  2. 检查各个 OSD 的状态,以确认这些 OSD 是否为 upin

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph osd status
    

后续步骤