2.2. 带有单一副本的存储类


您可以使用单个副本创建存储类,供您的应用程序使用。这可避免冗余数据副本,并允许在应用程序级别上进行弹性管理。

警告

启用这个功能会创建一个没有数据复制的副本池,如果应用程序本身没有复制,这会增加数据丢失、数据崩溃和潜在的系统不稳定的风险。如果有任何 OSD 丢失,此功能需要非常破坏性的步骤来恢复。所有应用可能会丢失其数据,在故障 OSD 时必须重新创建。

流程

  1. 使用以下命令启用单个副本功能:

    $ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephNonResilientPools/enable", "value": true }]'
    Copy to Clipboard Toggle word wrap
  2. 验证 storagecluster 是否处于 Ready 状态:

    $ oc get storagecluster
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                 AGE   PHASE   EXTERNAL   CREATED AT             VERSION
    ocs-storagecluster   10m   Ready              2024-02-05T13:56:15Z   4.17.0
    Copy to Clipboard Toggle word wrap
  3. 为每个故障域创建新的 cephblockpools。验证 cephblockpools 是否处于 Ready 状态:

    $ oc get cephblockpools
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                          PHASE
    ocs-storagecluster-cephblockpool              Ready
    ocs-storagecluster-cephblockpool-us-east-1a   Ready
    ocs-storagecluster-cephblockpool-us-east-1b   Ready
    ocs-storagecluster-cephblockpool-us-east-1c   Ready
    Copy to Clipboard Toggle word wrap
  4. 验证新存储类是否已创建:

    $ oc get storageclass
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                        PROVISIONER                             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2 (default)                               kubernetes.io/aws-ebs                   Delete          WaitForFirstConsumer   true                   104m
    gp2-csi                                     ebs.csi.aws.com                         Delete          WaitForFirstConsumer   true                   104m
    gp3-csi                                     ebs.csi.aws.com                         Delete          WaitForFirstConsumer   true                   104m
    ocs-storagecluster-ceph-non-resilient-rbd   openshift-storage.rbd.csi.ceph.com      Delete          WaitForFirstConsumer   true                   46m
    ocs-storagecluster-ceph-rbd                 openshift-storage.rbd.csi.ceph.com      Delete          Immediate              true                   52m
    ocs-storagecluster-cephfs                   openshift-storage.cephfs.csi.ceph.com   Delete          Immediate              true                   52m
    openshift-storage.noobaa.io                 openshift-storage.noobaa.io/obc         Delete          Immediate              false                  50m
    Copy to Clipboard Toggle word wrap
  5. 创建新 OSD pod;3 osd-prepare pod 和 3 个额外的 pod。验证新 OSD pod 是否处于 Running 状态:

    $ oc get pods | grep osd
    Copy to Clipboard Toggle word wrap

    输出示例:

    rook-ceph-osd-0-6dc76777bc-snhnm                                  2/2     Running     0               9m50s
    rook-ceph-osd-1-768bdfdc4-h5n7k                                   2/2     Running     0               9m48s
    rook-ceph-osd-2-69878645c4-bkdlq                                  2/2     Running     0               9m37s
    rook-ceph-osd-3-64c44d7d76-zfxq9                                  2/2     Running     0               5m23s
    rook-ceph-osd-4-654445b78f-nsgjb                                  2/2     Running     0               5m23s
    rook-ceph-osd-5-5775949f57-vz6jp                                  2/2     Running     0               5m22s
    rook-ceph-osd-prepare-ocs-deviceset-gp2-0-data-0x6t87-59swf       0/1     Completed   0               10m
    rook-ceph-osd-prepare-ocs-deviceset-gp2-1-data-0klwr7-bk45t       0/1     Completed   0               10m
    rook-ceph-osd-prepare-ocs-deviceset-gp2-2-data-0mk2cz-jx7zv       0/1     Completed   0               10m
    Copy to Clipboard Toggle word wrap

2.2.1. 在 OSD 丢失了单个副本后恢复

使用副本 1 时,当 OSD 丢失时,会保证数据丢失的存储类。丢失的 OSD 会进入故障状态。使用以下步骤在 OSD 丢失后恢复。

流程

按照以下步骤,在数据丢失副本 1 后让应用程序再次运行。您首先需要识别故障 OSD 所在的域。

  1. 如果您知道失败的 OSD 所在的故障域,请运行以下命令获取后续步骤所需的 replica1-pool-name。如果您不知道失败的 OSD 所处的位置,请跳至第 2 步。

    $ oc get cephblockpools
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                          PHASE
    ocs-storagecluster-cephblockpool              Ready
    ocs-storagecluster-cephblockpool-us-south-1   Ready
    ocs-storagecluster-cephblockpool-us-south-2   Ready
    ocs-storagecluster-cephblockpool-us-south-3   Ready
    Copy to Clipboard Toggle word wrap

    复制对应的故障域名称,以便在后续步骤中使用,然后跳至第 4 步。

  2. 查找处于 Error 状态或 CrashLoopBackoff 状态的 OSD pod 以查找失败的 OSD:

    $ oc get pods -n openshift-storage -l app=rook-ceph-osd  | grep 'CrashLoopBackOff\|Error'
    Copy to Clipboard Toggle word wrap
  3. 识别具有故障 OSD 的 replica-1 池。

    1. 识别运行故障 OSD 的节点:

      failed_osd_id=0 #replace with the ID of the failed OSD
      Copy to Clipboard Toggle word wrap
    2. 识别运行故障 OSD 的 failureDomainLabel:

      failure_domain_label=$(oc get storageclass ocs-storagecluster-ceph-non-resilient-rbd -o yaml | grep domainLabel |head -1 |awk -F':' '{print $2}')
      Copy to Clipboard Toggle word wrap
      failure_domain_value=$”(oc get pods $failed_osd_id -oyaml |grep topology-location-zone |awk ‘{print $2}’)”
      Copy to Clipboard Toggle word wrap

      输出显示了其 OSD 失败的 replica-1 池名称,例如:

      replica1-pool-name= "ocs-storagecluster-cephblockpool-$failure_domain_value”
      Copy to Clipboard Toggle word wrap

      其中 $failure_domain_value 是 failureDomainName。

  4. 删除 replica-1 池。

    1. 连接到 toolbox pod:

      toolbox=$(oc get pod -l app=rook-ceph-tools -n openshift-storage -o jsonpath='{.items[*].metadata.name}')
      
      oc rsh $toolbox -n openshift-storage
      Copy to Clipboard Toggle word wrap
    2. 删除 replica-1 池。请注意,您必须在命令中输入 replica-1 池名称两次,例如:

      ceph osd pool rm <replica1-pool-name> <replica1-pool-name> --yes-i-really-really-mean-it
      Copy to Clipboard Toggle word wrap

      使用之前标识的故障域名称替换 replica1-pool-name

  5. 按照您的平台 替换 设备指南中的"替换操作或失败存储设备"一节中的步骤清除失败的 OSD。
  6. 重启 rook-ceph operator:

    $ oc delete pod -l rook-ceph-operator -n openshift-storage
    Copy to Clipboard Toggle word wrap
  7. 在 avaialbity 区域中重新创建任何受影响的应用程序,以使用名称的新池开始。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat