検索

9.6. Object Storage ノードの置き換え

download PDF
Object Storage クラスターのノードを置き換えるには、以下を行う必要があります。
  • 新規 Object Storage ノードでオーバークラウドを更新して、director によりリングファイルが作成されないようにします。
  • swift-ring-builder を使用して手動でクラスターにノードを追加するか、クラスターからノードを削除します。
以下の手順では、クラスターの整合性を保ちながらノードを置き換える方法を説明します。この例では、ノードが 2 つある Object Storage クラスターを使用します。目的は、別のノードを追加して、問題のあるノードを置き換えることです。
まず、以下の内容が含まれる ~/templates/swift-ring-prevent.yaml という名前の環境ファイルを作成します。
parameter_defaults:
  SwiftRingBuild: false
  RingBuild: false
  ObjectStorageCount: 3
SwiftRingBuild および RingBuild パラメーターにより、オーバークラウドが自動的に Object Storage とコントローラーノードそれぞれのリングファイルを構築するかどうかが定義されます。ObjectStorageCount は、環境内で Object Storage ノードをいくつ指定するかを定義します。今回の例では、ノードを 2 つから 3 つにスケーリングします。
openstack overcloud deploy の一部として、オーバークラウドの残りの環境ファイルと合わせて、swift-ring-prevent.yaml ファイルも追加します。
$ openstack overcloud deploy --templates [ENVIRONMENT_FILES] -e swift-ring-prevent.yaml

注記

このファイルのパラメーターが以前の環境ファイルのパラメーターよりも優先されるように、このファイルを環境ファイルの一覧の最後に追加します。
再デプロイメントが完了したら、オーバークラウドには追加の Object Storage が含まれるようになりますが、ノードのストレージディレクトリーは作成されておらず、ノードのオブジェクトストアのリングファイルもまだ構築されていません。そのため、手動でストレージのディレクトリーを作成して、リングファイルを構築する必要があります。

注記

以下の手順を使用して、コントローラーノードでのリングファイル構築も行なってください。
新規ノードにログインしてストレージのディレクトリーを作成します。
$ sudo mkdir -p /srv/node/d1
$ sudo chown -R swift:swift /srv/node/d1

注記

このディレクトリーで、外部のストレージデバイスをマウントすることもできます。
ノードに既存のリングファイルをコピーします。heat-admin ユーザーとして、コントローラーノードにログインしてから、スーパーユーザーに切り替えます。たとえば、IP アドレスが 192.168.201.24 のコントローラーノードの場合は以下のようになります。
$ ssh heat-admin@192.168.201.24
$ sudo -i
コントローラーノードからの /etc/swift/*.builder ファイルを新しい Object Storage ノードの /etc/swift/ ディレクトリーにコピーします。必要に応じて、ファイルを director ホストに移動します。
[root@overcloud-controller-0 ~]# scp /etc/swift/*.builder stack@192.1.2.1:~/.
次に、新規ノードにファイルを転送します。
[stack@director ~]$ scp ~/*.builder heat-admin@192.1.2.24:~/.
新しい Object Storage ノードに heat-admin ユーザーとしてログインして、スーパーユーザーに切り替えます。たとえば、IP アドレスが 192.168.201.29 の Object Storage ノードの場合は以下のようになります。
$ ssh heat-admin@192.168.201.29
$ sudo -i
これらのファイルを /etc/swift ディレクトリーにコピーします。
# cp /home/heat-admin/*.builder /etc/swift/.
新規の Object Storage ノードをアカウント、コンテナー、オブジェクトリングに追加します。新規ノードに以下のコマンドを実行します。
# swift-ring-builder /etc/swift/account.builder add zX-IP:6002/d1 weight
# swift-ring-builder /etc/swift/container.builder add zX-IP:6001/d1 weight
# swift-ring-builder /etc/swift/object.builder add zX-IP:6000/d1 weight
これらのコマンドでは、以下の値を置き換えてください。
zX
X は、指定のゾーンに適した整数に置き換えます (例: ゾーン 1 には z1)。
IP
アカウント、コンテナー、オブジェクトサービスがリッスンするのに使用する IP。これは、特に、/etc/swift/object-server.conf/etc/swift/account-server.conf/etc/swift/container-server.confDEFAULT セクションの bind_ip など、各ストレージノードの IP アドレスと同じでなければなりません。
重み
他のデバイスと比較したデバイスの相対的な重み付けを入力します。通常、これは 100 となっています。

注記

リングファイル上で swift-ring-builder を使用して、リングファイルにある現在のノードの既存値を確認します。
# swift-ring-builder /etc/swift/account.builder
アカウント、コンテナー、オブジェクトリングから置き換えるノードを削除します。各ノードに対して、以下のコマンドを実行します。
# swift-ring-builder /etc/swift/account.builder remove IP
# swift-ring-builder /etc/swift/container.builder remove IP
# swift-ring-builder /etc/swift/object.builder remove IP
IP はノードの IP アドレスに置き換えます。
全ノードにパーティションを再分散します。
# swift-ring-builder /etc/swift/account.builder rebalance
# swift-ring-builder /etc/swift/container.builder rebalance
# swift-ring-builder /etc/swift/object.builder rebalance
/etc/swift/ の内容すべての所有者を root ユーザーと swift グループに変更します。
# chown -R root:swift /etc/swift
openstack-swift-proxy サービスを再起動します。
# systemctl restart openstack-swift-proxy.service
この時点で、リングファイル (*.ring.gz および *.builder) は、新しいノード上で更新されているはずです。
/etc/swift/account.builder
/etc/swift/account.ring.gz
/etc/swift/container.builder
/etc/swift/container.ring.gz
/etc/swift/object.builder
/etc/swift/object.ring.gz
これらのファイルは、コントローラーノードと既存の Object Storage ノード上の /etc/swift/ にコピーします (削除するノードは除く)。必要に応じて、ファイルを director ホストに移動します。
[root@overcloud-objectstorage-2 swift]# scp *.builder stack@192.1.2.1:~/
[root@overcloud-objectstorage-2 swift]# scp *.ring.gz stack@192.1.2.1:~/
次に各ノードで /etc/swift/ にこのファイルをコピーします。
各ノードで、/etc/swift/ の内容すべての所有者を root ユーザーと swift グループに変更します。
# chown -R root:swift /etc/swift
新規ノードが追加され、リングファイルの一部になります。リングから以前のノードを削除する前に、他のノードから新規ノードの初期のデータを複製する必要があります。
リングから以前のノードを削除するには、ObjectStorageCount の数を減らして以前のリングを省略します。今回は 3 から 2 に減らします。
parameter_defaults:
  SwiftRingBuild: false
  RingBuild: false
  ObjectStorageCount: 2
新規環境ファイル (remove-object-node.yaml) を作成して、以前の Object Storage ノードを特定し、削除します。今回の場合は overcloud-objectstorage-1 を削除します。
parameter_defaults:
  ObjectStorageRemovalPolicies:
    [{'resource_list': ['1']}]
デプロイメントのコマンドで両環境ファイルを指定します。
$ openstack overcloud deploy --templates -e swift-ring-prevent.yaml -e remove-object-node.yaml ...
director は、オーバークラウドから Object Storage ノードを削除して、オーバークラウド上の残りのノードを更新し、ノードの削除に対応します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.