Object Storage サービスを起動する前に、アカウント、コンテナー、オブジェクトの初期リングを作成する必要があります。リングビルダーが、各ノードがストレージアーキテクチャーを判断して配備するために使用する、設定ファイルを作成します。このセクションでは、簡単のため、1 リージョン、 1 ゾーンで、ゾーンの最大パーティション数 2^10 (1024)、各オブジェクトの複製数 3、パーティション移動後の再移動の最小間隔として 1 時間を使用します。

ここでの作業は、コントローラーノードで実施します。

アカウントリングの作成

アカウントサーバーは、コンテナーの一覧を管理するために、アカウントリングを使用します。

/etc/swift ディレクトリーに移動します。

[root@controller ~]# cd /etc/swift/
[root@controller swift]# 

[root@controller swift]# ls
container-reconciler.conf  proxy-server       proxy-server.conf.org
object-expirer.conf        proxy-server.conf  swift.conf
[root@controller swift]# 

ベースの account.builder ファイルを作成します。

[root@controller swift]# swift-ring-builder account.builder create 10 3 1
[root@controller swift]# 

各ストレージノードをリングに追加します。

■ object1 の vdb に対するリング
[root@controller swift]# swift-ring-builder account.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6202 --device vdb --weight 100
Device d0r1z1-192.168.24.120:6202R192.168.24.120:6202/vdb_"" with 100.0 weight got id 0
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder account.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6202 --device vdc --weight 100
Device d1r1z1-192.168.24.120:6202R192.168.24.120:6202/vdc_"" with 100.0 weight got id 1
[root@controller swift]# 

■ object2 の vdb に対するリング
[root@controller swift]# swift-ring-builder account.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6202 --device vdb --weight 100
Device d2r1z2-192.168.24.121:6202R192.168.24.121:6202/vdb_"" with 100.0 weight got id 2
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder account.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6202 --device vdc --weight 100
Device d3r1z2-192.168.24.121:6202R192.168.24.121:6202/vdc_"" with 100.0 weight got id 3
[root@controller swift]# 

リングの内容を検証します。

[root@controller swift]# swift-ring-builder account.builder
account.builder, build version 4, id a027fee319124813b489ec09f4342804
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file account.ring.gz not found, probably it hasn't been written yet
Devices:   id region zone     ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 192.168.24.120:6202 192.168.24.120:6202   vdb 100.00          0 -100.00       
            1      1    1 192.168.24.120:6202 192.168.24.120:6202   vdc 100.00          0 -100.00       
            2      1    2 192.168.24.121:6202 192.168.24.121:6202   vdb 100.00          0 -100.00       
            3      1    2 192.168.24.121:6202 192.168.24.121:6202   vdc 100.00          0 -100.00       
[root@controller swift]# 

リングをリバランスします。

[root@controller swift]# swift-ring-builder account.builder rebalance
Reassigned 3072 (300.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
[root@controller swift]# 

コンテナーリングの作成

コンテナーサーバーは、オブジェクトの一覧を管理するために、コンテナーリングを使用します。

/etc/swift ディレクトリーに移動します。

[root@controller swift]# cd /etc/swift/
[root@controller swift]# 

[root@controller swift]# ls
account.builder  container-reconciler.conf  proxy-server.conf
account.ring.gz  object-expirer.conf        proxy-server.conf.org
backups          proxy-server               swift.conf
[root@controller swift]# 

ベースの container.builder ファイルを作成します。

[root@controller swift]# swift-ring-builder container.builder create 10 3 1
[root@controller swift]# 

各ストレージノードをリングに追加します。

■ object1 の vdb に対するリング
[root@controller swift]# swift-ring-builder container.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6201 --device vdb --weight 100
Device d0r1z1-192.168.24.120:6201R192.168.24.120:6201/vdb_"" with 100.0 weight got id 0
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder container.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6201 --device vdc --weight 100
Device d1r1z1-192.168.24.120:6201R192.168.24.120:6201/vdc_"" with 100.0 weight got id 1
[root@controller swift]# 

■ object2 の vdb に対するリング
[root@controller swift]# swift-ring-builder container.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6201 --device vdb --weight 100
Device d2r1z2-192.168.24.121:6201R192.168.24.121:6201/vdb_"" with 100.0 weight got id 2
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder container.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6201 --device vdc --weight 100
Device d3r1z2-192.168.24.121:6201R192.168.24.121:6201/vdc_"" with 100.0 weight got id 3
[root@controller swift]# 

リングの内容を検証します。

[root@controller swift]# swift-ring-builder container.builder
container.builder, build version 4, id 8518eee72c2740558ddd81a0747d3f0c
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file container.ring.gz not found, probably it hasn't been written yet
Devices:   id region zone     ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 192.168.24.120:6201 192.168.24.120:6201   vdb 100.00          0 -100.00       
            1      1    1 192.168.24.120:6201 192.168.24.120:6201   vdc 100.00          0 -100.00       
            2      1    2 192.168.24.121:6201 192.168.24.121:6201   vdb 100.00          0 -100.00       
            3      1    2 192.168.24.121:6201 192.168.24.121:6201   vdc 100.00          0 -100.00       
[root@controller swift]# 

リングをリバランスします。

[root@controller swift]# swift-ring-builder container.builder rebalance
Reassigned 3072 (300.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
[root@controller swift]# 

オブジェクトリングの作成

オブジェクトサーバーは、ローカルデバイスのおけるオブジェクトの位置の一覧を維持するために、オブジェクトリングを使用します。

/etc/swift ディレクトリーに移動します。

[root@controller swift]# cd /etc/swift/
[root@controller swift]# 

[root@controller swift]# ls
account.builder  container-reconciler.conf  object-expirer.conf  proxy-server.conf.org
account.ring.gz  container.builder          proxy-server         swift.conf
backups          container.ring.gz          proxy-server.conf
[root@controller swift]# 

ベースの object.builder ファイルを作成します。

[root@controller swift]# swift-ring-builder object.builder create 10 3 1
[root@controller swift]# 

各ストレージノードをリングに追加します。

■ object1 の vdb に対するリング
[root@controller swift]# swift-ring-builder object.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6200 --device vdb --weight 100
Device d0r1z1-192.168.24.120:6200R192.168.24.120:6200/vdb_"" with 100.0 weight got id 0
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder object.builder add \
>   --region 1 --zone 1 --ip 192.168.24.120 --port 6200 --device vdc --weight 100
Device d1r1z1-192.168.24.120:6200R192.168.24.120:6200/vdc_"" with 100.0 weight got id 1
[root@controller swift]# 

■ object2 の vdb に対するリング
[root@controller swift]# swift-ring-builder object.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6200 --device vdb --weight 100
Device d2r1z2-192.168.24.121:6200R192.168.24.121:6200/vdb_"" with 100.0 weight got id 2
[root@controller swift]# 

■ object1 の vdc に対するリング
[root@controller swift]# swift-ring-builder object.builder add \
>   --region 1 --zone 2 --ip 192.168.24.121 --port 6200 --device vdc --weight 100
Device d3r1z2-192.168.24.121:6200R192.168.24.121:6200/vdc_"" with 100.0 weight got id 3
[root@controller swift]# 

リングの内容を検証します。

[root@controller swift]# swift-ring-builder object.builder
object.builder, build version 4, id caee83889d3c46ec96f9b6a2f8c1bdc4
1024 partitions, 3.000000 replicas, 1 regions, 2 zones, 4 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file object.ring.gz not found, probably it hasn't been written yet
Devices:   id region zone     ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 192.168.24.120:6200 192.168.24.120:6200   vdb 100.00          0 -100.00       
            1      1    1 192.168.24.120:6200 192.168.24.120:6200   vdc 100.00          0 -100.00       
            2      1    2 192.168.24.121:6200 192.168.24.121:6200   vdb 100.00          0 -100.00       
            3      1    2 192.168.24.121:6200 192.168.24.121:6200   vdc 100.00          0 -100.00       
[root@controller swift]# 

リングをリバランスします。

[root@controller swift]# swift-ring-builder object.builder rebalance
Reassigned 3072 (300.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
[root@controller swift]# 

リング設定ファイルの配布

各ストレージノード、プロキシーサービスを実行している追加ノードの /etc/swift ディレクトリーに、 account.ring.gz ファイル、container.ring.gz ファイル、object.ring.gz ファイルをコピーします。

オブジェクトストレージノード1 の /etc/swift ディレクトリを確認します。この時点では、account.ring.gz ファイル、container.ring.gz ファイル、object.ring.gz ファイルは存在していません。

[root@object1 ~]# cd /etc/swift/
[root@object1 swift]# 
[root@object1 swift]# ls
account-server           container-server.conf      object-server.conf
account-server.conf      container-server.conf.org  object-server.conf.org
account-server.conf.org  internal-client.conf       swift.conf
container-server         object-server
[root@object1 swift]# 

オブジェクトストレージノード1 で コントローラーノードから各ファイルをコピーします。

■ account.ring.gz ファイルのコピー
[root@object1 swift]# scp -p root@controller:/etc/swift/account.ring.gz /etc/swift/
The authenticity of host 'controller (192.168.24.111)' can't be established.
ECDSA key fingerprint is SHA256:IpozYdBYe07c8tJU3SAvejQC0FEmTRG4hCsYGeFZmoA.
ECDSA key fingerprint is MD5:3c:1d:cd:d2:73:51:8e:5a:88:44:4c:fe:d0:a4:bd:67.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'controller,192.168.24.111' (ECDSA) to the list of known hosts.
root@controller's password: 
account.ring.gz                               100% 1498     1.9MB/s   00:00    
[root@object1 swift]# 

■ container.ring.gz ファイルのコピー
[root@object1 swift]# scp -p root@controller:/etc/swift/container.ring.gz /etc/swift/
root@controller's password: 
container.ring.gz                             100% 1493     1.4MB/s   00:00    
[root@object1 swift]# 

■ object.ring.gz ファイルのコピー
[root@object1 swift]# scp -p root@controller:/etc/swift/object.ring.gz /etc/swift/
root@controller's password: 
object.ring.gz                                100% 1482     2.2MB/s   00:00    
[root@object1 swift]#

オブジェクトストレージノード1 の /etc/swift ディレクトリに account.ring.gz ファイル、container.ring.gz ファイル、object.ring.gz ファイルがコピーされていることを確認します。

[root@object1 swift]# ls
account-server           container-server.conf      object-server.conf
account-server.conf      container-server.conf.org  object-server.conf.org
account-server.conf.org  container.ring.gz          object.ring.gz
account.ring.gz          internal-client.conf       swift.conf
container-server         object-server
[root@object1 swift]# 

オブジェクトストレージノード2 でも上記同様の手順を実施し、オブジェクストレージノード2 にリング設定ファイルをコピーします。