検索

5.3. 新規 Object Storage ノードの追加

download PDF

クラスターに新規 Object Storage (swift) ノードを追加するには、ノード数を増やし、リングを更新し、変更を同期させる必要があります。以下に示す手順の例では、3 つのノードを 4 つに増やしています。

手順

  1. アンダークラウドノードに stack ユーザーとしてログインし、source コマンドで stackrc 認証情報ファイルを読み込みます。

    $ source ~/stackrc
  2. ObjectStorageCount パラメーターを使用して、Object Storage のカズを 1 増やします。このパラメーターは、通常ノード数を指定する環境ファイルの node-info.yaml ファイルに含まれています。

    parameter_defaults:
      ObjectStorageCount: 4
  3. 新規ノードの IP アドレスを node-info.yaml ファイルの ObjectStorageIPs パラメーターに追加します。

    ObjectStorageIPs: <ip_address>
  4. 環境ファイル (例: hostname-map.yaml) を作成し、新規ストレージノードのホスト名 (例: overcloud-objectstorage-4) を HostnameMap パラメーターに追加します。

    parameter_defaults:
      HostnameMap:
        overcloud-objectstorage-4: overcloud-objectstorage-4
  5. 新しいノードのハードウェアと電源管理の詳細を、ノード定義テンプレートに追加します。ノード定義テンプレートは、オーバークラウドの初期設定時にオーバークラウドノードを登録するために手動で作成されたファイルです。たとえば、テンプレートは /home/stack/nodes.json のようになります。以下の例では JSON 形式が使われていますが、ご自分のテンプレートが YAML ファイルであれば、YAML 形式および属性にしたがって情報を追加します。ノード定義テンプレートについての詳しい情報は、Director Installation and UsageRegistering nodes for the overcloud を参照してください。

    "ports":[
    "bb:bb:bb:bb:bb:bb"
    ],
    "name":"node01",
    "cpu":"4",
    "memory":"6144",
    "disk":"40",
    "arch":"x86_64",
    "pm_type":"pxe_ipmitool",
    "pm_user":"admin",
    "pm_password":"p@55w0rd!",
    "pm_addr":"192.168.24.205"
  6. 新しいノードの機能の詳細を、ノード定義テンプレートに追加します。

    "capabilities": "profile:swift-storage,boot_option:local,boot_mode:uefi,node:objectstorage-4",
  7. ノードをオーバークラウドにインポートして、ノードでイントロスペクションを実施します。

    $ openstack overcloud node import ~/nodes.yaml
    $ openstack overcloud node introspect objectstorage-4 --provide
  8. 新しいノードにルートディスクのシリアル番号を追加します。

    $ openstack baremetal introspection data save objectstorage-4 | jq ".inventory.disks"
    $ openstack baremetal node set --property root_device='{"serial": "<disk_serial_num>"}' <node_UUID>

    新規ノードに応じて <disk_serial_num> および <node_UUID> を置き換えます。

  9. ご自分の環境に該当するその他の環境ファイルと共に、作成した新しいノード設定が含まれる環境ファイルをデプロイメントコマンドに追加します。

    $ openstack overcloud deploy \
    --templates \
    …
    -e <existing_overcloud_environment_files> \
    -e node-info.yaml \
    -e hostname-map.yaml \

5.3.1. オブジェクトストレージリングの更新およびリバランス

新しいストレージノードをデプロイして既存のコントローラーおよびオブジェクトストレージを置き換えるために、Object Storage service (swift) はリングファイルのコピーをアンダークラウドに保管します。このコピーを使用してオーバークラウドのリングファイルを変更して、それらをノード全体に配布します。

手順

  1. アンダークラウドに stack ユーザーとしてログインし、stackrc 認証情報ファイルを読み込みます。

    $ source ~/stackrc
  2. 以下のディレクトリーを作成します。

    $ mkdir temp && cd temp/
  3. オーバークラウドのリングビルダーファイルを新しいディレクトリーにダウンロードします。

    $ openstack object save overcloud-swift-rings swift-rings.tar.gz
  4. リングを抽出します。

    $ tar xzvf swift-rings.tar.gz
  5. 元のバージョンのリングをバックアップするためのディレクトリーを作成します。

    $ mkdir backup && cp swift-rings.tar.gz backup/

    Object Storage リングファイルは、etc/swift フォルダーにあります。

  6. デバイス情報にしたがって、以下の変数の値を収集します。

    • <device_name>:

      $ openstack baremetal introspection data save <node_name> | jq ".inventory.disks"
    • <node_ip>:

       openstack server show <node_name>
    • <port> デフォルトポートは 600x です。デフォルトを変更している場合は、該当するポートを使用します。
    • <builder_file> 手順 3 のビルダーファイル名。
    • <weight> および <zone> 変数はユーザーが定義します。
  7. swift-ring-builder を使用して、新しいノードを既存のリングに追加して更新します。デバイス情報に応じて、変数を置き換えます。

    $ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>
  8. 変更したリングファイルを、アンダークラウドの Object Storage サービスにアップロードします。

    $ tar cvzf swift-rings.tar.gz etc/
    $ openstack object create overcloud-swift-rings swift-rings.tar.gz

5.3.2. ノード変更の同期およびデータの移行

変更したリングファイルを正しいフォルダーにコピーしたら、新しいリングファイルを Object Storage (swift) コンテナーに配布する必要があります。

重要
すべてのデータを同時に移行しないでください。10% ずつデータを移行してください。たとえば、移行元デバイスの重みを 90.0 に、移行先デバイスを 10.0 に設定します。次に、移行元デバイスの重みを 80.0 に、移行先デバイスを 20.0 に設定します。プロセスが完了するまで、段階的にデータの移行を続けます。移行時にすべてのデータを同時に移動すると、古いデータは移行元デバイスにありますが、すべてのレプリカについてリングは新しい移行先デバイスをポイントします。レプリケーターがすべてのデータを移行先デバイスに移動するまで、データにアクセスすることができません。
重要

移行時に、オブジェクトストレージリングはデータの場所を再割当てし、続いてレプリケーターがデータを新しい場所に移動します。クラスターのアクティビティーが増えると、負荷が増加するため、レプリケーションの処理が遅くなります。クラスターが大きいほど、レプリケーションのパスが完了するのにかかる時間が長くなります。これは想定された動作ですが、クライアントが現在移動しているデータにアクセスする場合に、ログファイルに 404 エラーが記録される可能性があります。プロキシーが新しい場所からデータの取得を試みる際に、データがまだ新しい場所にない場合、swift-proxy レポートはログファイルに 404 エラーを記録します。

移行が段階的な場合には、プロキシーは移動していないレプリカにアクセスし、エラーは発生しません。なお、プロキシーが代替レプリカからデータの取得を試みると、ログファイルの 404 エラーは解決されます。レプリケーションプロセスが実行中であることを確認するには、レプリケーションログを参照してください。Object Storage サービスは、レプリケーションログを 5 分ごとに発行します。

手順

  1. 以下の例のようなスクリプトを使用して、アンダークラウドノードから指定したコントローラーノードにリングファイルを配布し、それらのノードで Object Storage サービスコンテナーを再起動します。

    cd etc/swift/
    for j in 8 11 23; do
      ssh heat-admin@192.168.24."$j" "rm *.ring.gz"
      for i in account.ring.gz container.ring.gz object.ring.gz; do
        scp $i heat-admin@192.168.24."$j":~/
        ssh heat-admin@192.168.24."$j" "sudo cp -f "$i" /var/lib/config-data/puppet-generated/swift/etc/swift/"
        ssh heat-admin@192.168.24."$j" "sudo chown root:root /var/lib/config-data/puppet-generated/swift/etc/swift/"$i""
        ssh heat-admin@192.168.24."$j" "sudo restorecon /var/lib/config-data/puppet-generated/swift/etc/swift/"$i""
      done
      ssh heat-admin@192.168.24."$j" "rm *.builder"
      for i in account.builder container.builder object.builder; do
        scp $i heat-admin@192.168.24."$j":~/
        ssh heat-admin@192.168.24."$j" "cat "$i" | sudo tee  /var/lib/config-data/puppet-generated/swift/etc/swift/"$i" >/dev/null"
      done
      ssh heat-admin@192.168.24."$j" 'for k in `sudo podman ps --format "{{.Names}}" | grep swift`; do sudo podman restart $k; done'
    done
    cd ../../
  2. データが新しいディスクに移動されていることを確認するには、新規ストレージノードで以下のコマンドを実行してください。

    $  sudo grep -i replication  /var/log/container/swift/swift.log
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.