Mindmajix

Making rings

The rings determine where data should reside in the cluster. There is a separate ring for account databases, container databases, and individual object storage policies but each ring works in the same way. These rings are externally managed, in this the server processes themselves, but do not modify the rings, they are instead provided with new rings modified by other tools.

The final step is to create the Object ring, Account ring, and Container ring in which, each of our virtual nodes exists.

Getting started..

Ensure that you are logged in to your swift virtual machine. To accomplish this, run:

vagrant ssh swift

How to do it…

The OpenStack Object Storage ring keeps track of where our data exists in our cluster. There are three rings that OpenStack Storage understands, and they are the Account, Container, and Object rings. To facilitate quick rebuilding of the rings in our cluster, we will create a script that performs the necessary steps.

1. The most convenient way to create the rings for our OpenStack Storage environment is to create a script. Create /usr/loca/bin/remakerings :

#!/bin/bash

cd /etc/swift

rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz

# Object Ringswift-ring-builder object.builder create 18 3 1

swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 1

swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 1

swift-ring-builder object.builder add z3-127.0.0.1:6030/sdb3 1

swift-ring-builder object.builder add z4-127.0.0.1:6040/sdb4 1

swift-ring-builder object.builder rebalance

# Container Ring

swift-ring-builder container.builder create 18 3 1

swift-ring-builder container.builder add z1-127.0.0.1:6011/sdb1 1

swift-ring-builder container.builder add z2-127.0.0.1:6021/sdb2 1

swift-ring-builder container.builder add z3-127.0.0.1:6031/sdb3 1

swift-ring-builder container.builder add z4-127.0.0.1:6041/sdb4 1

swift-ring-builder container.builder rebalance

# Account Ring

swift-ring-builder account.builder create 18 3 1

swift-ring-builder account.builder add z1-127.0.0.1:6012/sdb1 1

swift-ring-builder account.builder add z2-127.0.0.1:6022/sdb2 1

swift-ring-builder account.builder add z3-127.0.0.1:6032/sdb3 1

swift-ring-builder account.builder add z4-127.0.0.1:6042/sdb4 1

swift-ring-builder account.builder rebalance

2. Now we can run the script as follows:

sudo chmod +x /usr/local/bin/remakerings

sudo /usr/local/bin/remakerings

3. You will see output similar to the following:

Device z1-127.0.0.1:6010/sdb1_”” with 1.0 weight got id 0

Device z2-127.0.0.1:6020/sdb2_”” with 1.0 weight got id 1

Device z3-127.0.0.1:6030/sdb3_”” with 1.0 weight got id 2

Device z4-127.0.0.1:6040/sdb4_”” with 1.0 weight got id 3

Reassigned 262144 (100.00%) partitions. Balance is now 0.00.

Device z1-127.0.0.1:6011/sdb1_”” with 1.0 weight got id 0

Device z2-127.0.0.1:6021/sdb2_”” with 1.0 weight got id 1

Device z3-127.0.0.1:6031/sdb3_”” with 1.0 weight got id 2

Device z4-127.0.0.1:6041/sdb4_”” with 1.0 weight got id 3

Reassigned 262144 (100.00%) partitions. Balance is now 0.00.

Device z1-127.0.0.1:6012/sdb1_”” with 1.0 weight got id 0

Device z2-127.0.0.1:6022/sdb2_”” with 1.0 weight got id 1

Device z3-127.0.0.1:6032/sdb3_”” with 1.0 weight got id 2

Device z4-127.0.0.1:6042/sdb4_”” with 1.0 weight got id 3

Reassigned 262144 (100.00%) partitions. Balance is now 0.00.

How it works

In Swift, a ring functions just like a cereal box decoder ring. That is, it keeps track of where various bits of data resides in a given swift cluster. In our example, we have provided details for creating the rings as well as executed a rebuild of said rings. Creation of the rings is done using the swift-ring-builder command and involves the
following steps, repeated for each ring type (Object, Container, and Account):

1. Creating the ring (of type Object, Container, or Account): To create the ring, we use the following syntax:

swift-ring-builder builder_file create part_power replicas
min_part_hours

Creation of the ring specifies a builder file to create three parameters:

part_power, replicas, and min_part_hours. This means 2^part_power (18 is used in this instance) is the number of partitions to create, replicas are the number of replicas (3 is used in this case) of the data within the ring, and min_part_hours (1 is specified in this case) is the time in hours before a specific partition can be moved in succession.

2. Assigning a device to the ring: To assign a device to a ring, we use the following syntax:

swift-ring-builder builder_file add zzone-ip:port/device_name
weight

Adding a node to the ring specifies the same builder_file created in the first step. We then specify a zone (for example, 1, prefixed with z) that the device will be in, ip (127.0.0.1) is the IP address of the server that the device is in, port (for example, 6010) is the port number that the server is running on, and device_name is the name of the device on the server (for example, sdb1). The weight is a float weight that determines how many partitions are put on the device,
relative to the rest of the devices in the cluster.

3. Rebalancing the ring: A balanced Swift ring is one where the number of data exchange between nodes is minimized while still providing the configured number of replicas. To rebalance the ring, we use the following syntax within the /etc/swift directory:

swift-ring-builder builder_file rebalance

This command will distribute the partitions across the drives in the ring. The previous process is run for each of the rings: object, container, and account.


0 Responses on Making rings"

Leave a Message

Your email address will not be published. Required fields are marked *

Copy Rights Reserved © Mindmajix.com All rights reserved. Disclaimer.
Course Adviser

Fill your details, course adviser will reach you.