9.7. Scaling Object Storage service capacity on external data plane nodes


Expand your Object Storage service (swift) cluster capacity to accommodate data growth by adding storage devices to existing external data plane nodes or by adding new nodes to the cluster.

Prerequisites

  • You have the oc command line tool installed on your workstation.
  • You are logged on to a workstation that has access to the RHOSO control plane as a user with cluster-admin privileges.
  • Your data plane nodes have additional storage devices available.
  • You have verified that no recent ring rebalance is in progress. For more information, see Rebalancing Object Storage rings.

Procedure

  1. Add new storage devices to your OpenStackDataPlaneNodeSet CR:

    • To add disks to all nodes in the node set, update the nodeTemplate.ansible.ansibleVars.edpm_swift_disks list:

      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneNodeSet
      metadata:
        name: openstack-edpm-swift
        namespace: openstack
      spec:
        ...
        nodeTemplate:
          ansible:
            ansibleVars:
              edpm_swift_disks:
              - device: /dev/vdb
                path: /srv/node/vdb
                region: 0
                weight: 4000
                zone: 0
              - device: /dev/vdc
                path: /srv/node/vdc
                region: 0
                weight: 4000
                zone: 0
              - device: /dev/vdd
                path: /srv/node/vdd
                region: 0
                weight: 4000
                zone: 0
        ...
    • To add storage devices to a specific node only, update the nodes.<node_name>.ansible.ansibleVars.edpm_swift_disks list:

      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneNodeSet
      metadata:
        name: openstack-edpm-swift
        namespace: openstack
      spec:
        ...
        nodes:
          edpm-swift-0:
            ansible:
              ansibleVars:
                edpm_swift_disks:
                - device: /dev/vdd
                  path: /srv/node/vdd
                  region: 0
                  weight: 1000
                  zone: 0
            ...
        ...

      where:

      device
      Specifies the block device path for the storage disk.
      path
      Specifies the mount point path where the Object Storage service accesses the disk.
      region
      Specifies the region identifier for the disk. Use 0 for the default region.
      weight
      Specifies the relative weight of the disk based on its capacity in GiB. The weight determines how many partitions are assigned to the disk in the Object Storage rings.
      zone
      Specifies the zone identifier for the disk. Use 0 for the default zone.
  2. Apply the updated OpenStackDataPlaneNodeSet CR:

    $ oc apply -f <nodeset_file>.yaml -n openstack
  3. Deploy the changes to the data plane nodes by creating an OpenStackDataPlaneDeployment CR that runs the swift service:

    $ oc apply -n openstack -f - << EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: swift-storage-expansion
    spec:
      servicesOverride:
        - swift
      nodeSets:
        - <nodeset_name>
    EOF
    • Replace <nodeset_name> with the name of your OpenStackDataPlaneNodeSet CR.
  4. Wait for the deployment to complete:

    $ oc wait openstackdataplanedeployment swift-storage-expansion --for condition=Ready --timeout=600s -n openstack
  5. Trigger a ring rebalance to distribute data across the new storage devices:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-tool rebalance'
    注意

    Ring rebalances respect the minPartHours interval (default: 24 hours). If multiple ring changes occur within this 24-hour window, manual rebalancing is required after verifying 100% replica coverage to ensure data durability. For more information, see Rebalancing Object Storage rings.

  6. Push the updated rings to the data plane nodes:

    $ oc delete --ignore-not-found --wait openstackdataplanedeployment swift-ring-update -n openstack
    $ oc apply -n openstack -f - << EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: swift-ring-update
    spec:
      ansibleTags: swiftrings
      servicesOverride:
        - swift
      nodeSets:
        - <nodeset_name>
    EOF
  7. Wait for the ring update deployment to complete:

    $ oc wait openstackdataplanedeployment swift-ring-update --for condition=Ready --timeout=300s -n openstack

Verification

  1. Verify that the Object Storage cluster recognizes the updated capacity:

    $ oc rsh -c proxy-server $(oc get pods -n openstack -l service=swift,component=swift-proxy -o name | head -n 1) swift-recon --diskusage

    Example output

    [2026-04-16 10:30:15] Checking disk usage on 8 hosts...
    -> edpm-swift-0:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> edpm-swift-0:6201: 0.00% used (100.00 GiB / 100.00 GiB)
    -> edpm-swift-0:6202: 0.00% used (100.00 GiB / 100.00 GiB)
    ...

    The output shows all nodes and disks with the updated total capacity.

  2. Verify that all object replicas have been placed correctly after the rebalance:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'

    Example output

    Queried 1024 objects for dispersion reporting, 3s, 0 retries
    100.00% of object copies found (3072 of 3072)
    Queried 1024 containers for dispersion reporting, 2s, 0 retries
    100.00% of container copies found (3072 of 3072)

    All values must show 100.00% before you perform another scaling operation or ring rebalance.

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部