8.2. Reducing Storage Capacity

Heketi also supports the reduction of storage capacity. You can reduce storage by deleting devices, nodes, and clusters. These requests can only be performed by using the Heketi CLI or the API. For information on using command line API, see Heketi API https://github.com/heketi/heketi/wiki/API.

Note

  • The IDs can be retrieved by executing the heketi-cli topology info command.
    # heketi-cli topology info
  • The heketidbstorage volume cannot be deleted as it contains the heketi database.

8.2.1. Deleting Volumes

You can delete the volume using the following Heketi CLI command:
# heketi-cli volume delete <volume_id>
For example:
heketi-cli volume delete 12b2590191f571be9e896c7a483953c3
Volume 12b2590191f571be9e896c7a483953c3 deleted

8.2.2. Deleting Devices

Deleting the device deletes devices from heketi's topology. Devices that have bricks cannot be deleted. You must ensure they are free of bricks by disabling and removing devices.
You can delete the device using the following Heketi CLI command:
# heketi-cli device delete <device_id>
For example:
heketi-cli device delete 56912a57287d07fad0651ba0003cf9aa
Device 56912a57287d07fad0651ba0003cf9aa deleted
The only way to reuse a deleted device is by adding the device to heketi's topology again.

8.2.2.1. Disabling Devices

Disabling devices stops further allocation of bricks onto the device. You can disable devices using the following Heketi CLI command:
 # heketi-cli device disable <device_id>
For example:
# heketi-cli device disable f53b13b9de1b5125691ee77db8bb47f4
Device f53b13b9de1b5125691ee77db8bb47f4 is now offline
After disabling the device, you must enable it. Enabling the device allows allocation of bricks onto the device using the following command:
# heketi-cli device enable <device_id>
For example:
# heketi-cli device enable f53b13b9de1b5125691ee77db8bb47f4
Device f53b13b9de1b5125691ee77db8bb47f4 is now online

8.2.2.2. Removing Devices

Removing devices moves existing bricks from the device to other devices. This helps in ensuring the device is free of bricks.

Warning

Remove device operation triggers a self-heal operation in the background. The time taken to complete the self-heal operation is proportional to the data on the removed device. Before you perform the remove device operation, you must ensure that the self-heal operations are complete on all the volumes.
Run the following command to access shell on gluster pod:
# oc rsh <gluster_pod_name>
Run the following command to obtain the volume names:
# gluster volume list
Run the following command on each volume to check the self-heal status:
# gluster volume heal <volname> info
You can remove devices using the following Heketi CLI command:
 # heketi-cli device remove <device_id>
For example:
heketi-cli device remove e9ef1d9043ed3898227143add599e1f9
Device e9ef1d9043ed3898227143add599e1f9 is now removed

8.2.2.3. Replacing Devices

Heketi does not allow one-to-one replacement of a device with another. However, in case of a failed device, follow the example below for the sequence of operations that are required to replace a failed device.
  1. Locate the device that has failed using the following command:
    # heketi-cli topology info
    …
    …
    ...
        Nodes:
    Node Id: 8faade64a9c8669de204b66bc083b10d
    ...
    ...
    …
                    Id:a811261864ee190941b17c72809a5001   Name:/dev/vdc            State:online    Size (GiB):499     Used (GiB):281     Free (GiB):218     
                            Bricks:
                                    Id:34c14120bef5621f287951bcdfa774fc   Size (GiB):280     Path: /var/lib/heketi/mounts/vg_a811261864ee190941b17c72809a5001/brick_34c14120bef5621f287951bcdfa774fc/brick
    …
    …
    ...
    The example below illustrates the sequence of operations that are required to replace a failed device. The example uses device ID a811261864ee190941b17c72809a5001 which belongs to node with id 8faade64a9c8669de204b66bc083b10das.
  2. Add a new device preferably to the same node as the device being replaced.
    # heketi-cli device add --name /dev/vdd --node 8faade64a9c8669de204b66bc083b10d
    Device added successfully
  3. Disable the failed device.
    # heketi-cli device disable a811261864ee190941b17c72809a5001
    Device a811261864ee190941b17c72809a5001 is now offline
  4. Remove the failed device.
    # heketi-cli device remove a811261864ee190941b17c72809a5001
     Device a811261864ee190941b17c72809a5001 is now removed
    At this stage, the bricks are migrated from the failed device. Heketi chooses a suitable device based on the brick allocation algorithm. As a result, there is a possibility that all the bricks might not be migrated to the new added device.
  5. Delete the failed device.
    # heketi-cli device delete a811261864ee190941b17c72809a5001
    Device a811261864ee190941b17c72809a5001 deleted
  6. Before repeating the above sequence of steps on another device, you must wait for the self-heal operation to complete. You can verify that the self-heal operation completed when the Number of entries value returns a 0 value.
    # oc rsh <any_gluster_pod_name>
    for each in $(gluster volume list) ; do gluster vol heal $each info | grep "Number of entries:" ; done
    Number of entries: 0
    Number of entries: 0
    Number of entries: 0

8.2.3. Deleting Nodes

You can delete the node using the following Heketi CLI command:
 # heketi-cli node delete <node_id>
For example:
heketi-cli node delete 5f0af88b968ed1f01bf959fe4fe804dc
Node 5f0af88b968ed1f01bf959fe4fe804dc deleted

8.2.4. Deleting Clusters

You can delete the cluster using the following Heketi CLI command:
# heketi-cli cluster delete <cluster_id>
For example:
heketi-cli cluster delete 0e949d91c608d13fd3fc4e96f798a5b1
Cluster 0e949d91c608d13fd3fc4e96f798a5b1 deleted