4.4. Object Storage サービスの設定

4.4.1. Object Storage サービス用のアイデンティティーレコードの作成

Object Storage サービスで必要な Identity サービスのレコードを作成して設定します。これらのエントリーは、Object Storage サービスに対する認証を提供し、Object Storage サービスによって提供される機能を検索してアクセスを試みる他の OpenStack サービスを補助します。
以下の手順では、管理ユーザーと services テナントが作成済みであることを前提としています。詳しい説明は、以下のリンクを参照してください。
以下の手順は、Identityサービスサーバーまたは keystonerc_admin ファイルをコピーして keystone コマンドラインユーティリティーをインストールした任意のマシンで実行してください。

手順4.3 Object Storage サービス用のアイデンティティーレコードの作成

  1. Keystone に管理ユーザーとしてアクセスするためのシェルを設定します。
    # source ~/keystonerc_admin
  2. swift ユーザーを作成します。
    [(keystone_admin)]# openstack user create --password PASSWORD swift
    +----------+----------------------------------+
    | Field    | Value                            |
    +----------+----------------------------------+
    | email    | None                             |
    | enabled  | True                             |
    | id       | 00916f794cec438ea7f14ee0769e6964 |
    | name     | swift                            |
    | username | swift                            |
    +----------+----------------------------------+
    PASSWORD は、Object Storageサービスが Identityサービスとの認証を行う際に使用するセキュアなパスワードに置き換えます。
  3. services テナントのコンテキスト内で、swift ユーザーと admin ロールを関連付けます。
    [(keystone_admin)]# openstack role add --project services --user swift admin
  4. swift Object Storage サービスのエントリーを作成します。
    [(keystone_admin)]# openstack service create --name swift \
        --description "Swift Storage Service" \
        object-store
  5. swift エンドポイントエントリーを作成します。
    [(keystone_admin)]# openstack endpoint create \
        --publicurl 'http://IP:8080/v1/AUTH_%(tenant_id)s' \
        --adminurl 'http://IP:8080/v1' \
        --internalurl 'http://IP:8080/v1/AUTH_%(tenant_id)s' \
        --region RegionOne \
        swift
    IP は Object Storage のプロキシサービスをホストするサーバーの IP アドレスまたは完全修飾ドメイン名に置き換えます。

4.4.2. Object Storage サービスのストレージノードの設定

Object Storage サービスは、ファイルシステムにオブジェクトを保管します。これは通常、接続されている複数の物理ストレージデバイス上のファイルシステムです。オブジェクトの保管に使用するデバイスはすべて ext4 または XFS の形式でフォーマットし、/srv/node/ ディレクトリーの下にマウントする必要があります。また、指定されたノードで実行されるサービスはすべて有効化して、それらに使用するポートを開く必要があります。
プロキシサービスは、他のサービスとともに実行することが可能ですが、以下の手順ではプロキシサービスは対象外となっています。

手順4.4 Object Storage サービスのストレージノードの設定

  1. ext4 または XFS のファイルシステムでデバイスをフォーマットします。xattr を必ず有効化してください。
  2. /etc/fstab ファイルにデバイスを追加して、ブート時には /srv/node/ の下にマウントされるようにします。blkid コマンドを使用して、デバイスの一意 ID を検索して、この一意の ID を使用してデバイスをマウントします。

    注記

    ext4 を使用する場合には、user_xattr オプションを指定してファイルシステムをマウントすることにより、拡張属性を有効化するようにしてください (XFS の場合は、拡張属性はデフォルトで有効化されます)。
  3. 各ノードで実行中の各サービスが使用する TCP ポートを開くようにファイアウォールを設定します。サービスデフォルトでは、アカウントサービスはポート 6202、コンテナーサービスはポート 6201、オブジェクトサービスはポート 6200 を使用します。
    1. テキストエディターで /etc/sysconfig/iptables ファイルを開きます。
    2. アカウント、コンテナー、オブジェクトのサービスが使用するポートで TCP トラフィックを許可する INPUT ルールを追加します。この新規ルールは、reject-with icmp-host-prohibited よりも前に記載する必要があります。
      -A INPUT -p tcp -m multiport --dports 6200,6201,6202,873 -j ACCEPT
    3. /etc/sysconfig/iptables ファイルへの変更を保存します。
    4. iptables サービスを再起動して、ファイアウォールの変更を有効にします。
      # systemctl restart iptables.service
  4. /srv/node/ のコンテンツの所有者を swift:swift に変更します。
    # chown -R swift:swift /srv/node/
  5. /srv/node/ 配下の全ディレクトリーの SELinux コンテキストを正しく設定します。
    # restorecon -R /srv
  6. /etc/swift/swift.conf ファイルにハッシュプレフィックスを追加します。
    # openstack-config --set /etc/swift/swift.conf swift-hash swift_hash_path_prefix \
       $(openssl rand -hex 10)
  7. /etc/swift/swift.conf ファイルにハッシュサフィックスを追加します。
    # openstack-config --set /etc/swift/swift.conf swift-hash swift_hash_path_suffix \
       $(openssl rand -hex 10)
  8. ストレージサービスがリッスンする IP アドレスを設定します。Object Storage クラスター内の全ノードにある全サービスに対して以下のコマンドを実行します。
    # openstack-config --set /etc/swift/object-server.conf \
       DEFAULT bind_ip NODE_IP_ADDRESS
    # openstack-config --set /etc/swift/account-server.conf \
       DEFAULT bind_ip NODE_IP_ADDRESS
    # openstack-config --set /etc/swift/container-server.conf \
       DEFAULT bind_ip NODE_IP_ADDRESS
    NODE_IP_ADDRESS は、設定するノードの IP アドレスに置き換えます。
  9. 現在設定中のノードから全 Object Storage サービスノードに /etc/swift/swift.conf をコピーします。

    重要

    /etc/swift/swift.conf ファイルは、すべての Object Storage サービスノードで全く同じである必要があります。
  10. ノードで実行するサービスを起動します。
    # systemctl start openstack-swift-account.service
    # systemctl start openstack-swift-container.service
    # systemctl start openstack-swift-object.service
  11. サービスがブート時に起動するように設定します。
    # systemctl enable openstack-swift-account.service
    # systemctl enable openstack-swift-container.service
    # systemctl enable openstack-swift-object.service

4.4.3. Object Storage サービスのプロキシーサービスの設定

Object Storage のプロキシーサービスは、gets および puts の転送先のノードを決定します。
アカウント、コンテナー、オブジェクトのサービスは、プロキシーサービスと並行して実行することが可能ですが、以下の手順ではプロキシーサービスのみについて説明します。

注記

Object Storage サービスに組み込まれている SSL 機能は、主にテストを目的としており、実稼働環境での使用はお勧めできません。Red Hat は 実稼働環境のクラスターには SSL 接続の終了にロードバランサーを使用することを推奨します。

手順4.5 Object Storage サービスのプロキシサービスの設定

  1. 適切なサービスユーザーの正しい認証情報でプロキシーサーバーの設定ファイルを更新します。
    # openstack-config --set /etc/swift/proxy-server.conf \
          filter:authtoken auth_host IP
    # openstack-config --set /etc/swift/proxy-server.conf \
          filter:authtoken admin_tenant_name services
    # openstack-config --set /etc/swift/proxy-server.conf \
          filter:authtoken admin_user swift
    # openstack-config --set /etc/swift/proxy-server.conf \
          filter:authtoken admin_password PASSWORD
    以下の値を置き換えてください。
    • IP は、Identity サーバーの IP アドレスまたはホスト名に置き換えます。
    • services は、Object Storage サービス用に作成されたテナントの名前に置き換えます (上記の例では、この値を services に設定)。
    • swift は、Object Storage サービス用に作成されたサービスユーザーの名前に置き換えます (上記の例では、この値を swift に設定)。
    • PASSWORD は、サービスユーザーに関連付けられたパスワードに置き換えます。
  2. memcached および openstack-swift-proxy サービスを起動します。
    # systemctl start memcached.service
    # systemctl start openstack-swift-proxy.service
  3. memcached および openstack-swift-proxy サービスがブート時に起動するように設定します。
    # systemctl enable memcached.service
    # systemctl enable openstack-swift-proxy.service
  4. Object Storage プロキシーサービスをホストするサーバーへの受信接続を許可します。テキストエディターで /etc/sysconfig/iptables ファイルを開き、ポート 8080 の TCP トラフィックを許可する INPUT ルールを追加します。新規ルールは、トラフィックを REJECT する INPUT ルールよりも前に記載するようにしてください。
    -A INPUT -p tcp -m multiport --dports 8080 -j ACCEPT

    重要

    上記のルールにより、全リモートホストから Swift プロキシーを実行するシステムへの通信がポート 8080 で許可されます。より制限の厳しいファイアウォールルールの作成についての説明は、『Red Hat Enterprise Linux セキュリティーガイド』を参照してください。
  5. iptables サービスを再起動して、変更を有効にします。
    # systemctl restart iptables.service

4.4.4. Object Storage サービスのリング

リングは、ストレージノードのクラスター内でデータが格納される場所を決定します。リングファイルは、swift-ring-builder ツールを使用して生成されます。必要なリングファイルは 3 つで、それぞれ オブジェクトコンテナーアカウント のサービスが対象です。
クラスター内の各ストレージデバイスは、パーティション分割されます。推奨されるパーティション数は 1 デバイスあたり 100 です。partition power (パーティションのべき乗) として知られる、パーティションディレクトリーへのファイルシステムパスの MD5 ハッシュから設定可能なビット数は、そのデバイスのパーティション指数として使用されます。1000 のデバイスがあるクラスターで、各デバイスが 100 パーティションに分かれている場合に、partition count (パーティション数) は 100 000 です。
partition count は partition power の計算に使用され、partition power を 2 で累乗した値が partition count となります。partition power が小数の場合には切り上げられます。partition count が 100 000 の場合には、その partition power は 17 となります (16.610 から切り上げした値)。数学的には、2 partition power と表記します。

4.4.5. Object Storage サービスのリングファイルの構築

リングファイルは、Object Storage サービスに保管されているオブジェクトのトラッキング用に 1 つ、オブジェクトが配置されているコンテナーのトラッキング用に 1 つ、どのコンテナーにどのアカウントがアクセスできるかをトラッキングするのに 1 つ、合計で 3 つ作成する必要があります。リングファイルは、特定のデータが保管されている場所を推定するのに使用されます。
リングファイルは、パーティションのべき乗、レプリカ数、ゾーン、パーティションの再割り当て間隔の 4 つのパラメーターを使用することで生成されます。

表4.1 リングファイルの構築に使用されるパラメーター

リングファイルのパラメーター説明
part_power
2partition power = partition count.
パーティション数は、計算後に切り上げ
replica_count
クラスター内でデータが複製される回数
min_part_hours
パーティションが移動できるまでの最小時間。このパラメーターは、min_part_hours で指定された時間内に 1 つのデータ項目のコピーを複数移動しないようにすることで、データの可用性を向上させます。
zone
デバイスをリングに追加する際に使用されます (任意)。ゾーンは、柔軟な抽象化です。特定のデプロイメント内では、各ゾーンを他のゾーンから可能な限り分離する必要があります。ゾーンを使用してサイト、キャビネット、ノードに加えて、デバイスまでも示すことができます。

手順4.6 Object Storage サービスのリングファイルの構築

  1. サービスごとに 1 リングを構築します。ビルダーファイル、partition powerレプリカ数、および パーティション再割り当ての最小間隔 を指定します。
    # swift-ring-builder /etc/swift/object.builder create part_power replica_count min_part_hours
    # swift-ring-builder /etc/swift/container.builder create part_power replica_count min_part_hours
    # swift-ring-builder /etc/swift/account.builder create part_power replica_count min_part_hours
  2. リングが作成されたら、account リングにデバイスを追加します。
    # swift-ring-builder /etc/swift/account.builder add zX-SERVICE_IP:6202/dev_mountpt part_count
    以下の値を置き換えてください。
    • X は、指定したゾーンに対応する整数に置き換えます (例: z1 はゾーン 1 に対応)。
    • SERVICE_IP は、アカウント、コンテナー、オブジェクトのサービスがリッスンする必要のある IP アドレスに置き換えます。IP は、Object Storage サービスのストレージノードの設定中に指定した bind_ip の値と一致する必要があります。
    • dev_mountpt は、デバイスがマウントされる /srv/node のサブディレクトリーに置き換えます。
    • part_count は、partition power (パーティションのべき乗) の計算に使用した partition count (パーティション数) に置き換えます。

    注記

    上記の手順は、リングに追加する (クラスター内の各ノード上の) デバイスごとに繰り返してください。
  3. container と object のリングの両方にデバイスを追加します。
    # swift-ring-builder /etc/swift/container.builder add zX-SERVICE_IP:6201/dev_mountpt part_count
    # swift-ring-builder /etc/swift/object.builder add zX-SERVICE_IP:6200/dev_mountpt part_count
    変数は前のステップで使用したのと同じ値に置き換えます。

    注記

    上記のコマンドは、リングに追加する (クラスター内の各ノード上の) デバイスごとに繰り返してください。
  4. リング内の複数のデバイスにパーティションを分散します。
    # swift-ring-builder /etc/swift/account.builder rebalance
    # swift-ring-builder /etc/swift/container.builder rebalance
    # swift-ring-builder /etc/swift/object.builder rebalance
  5. /etc/swift ディレクトリーにリングファイルが 3 つあるかどうかを確認します。次のコマンドを実行してください。
    # ls /etc/swift/*gz 
    これらのファイルは以下のように表示されるはずです。
    /etc/swift/account.ring.gz  /etc/swift/container.ring.gz  /etc/swift/object.ring.gz
  6. openstack-swift-proxy サービスを再起動します。
    # systemctl restart openstack-swift-proxy.service
  7. 前の手順で作成したばかりのファイルを含む、/etc/swift/ ディレクトリー内の全ファイルの所有権を root ユーザーと swift グループに設定します。

    重要

    マウントポイントはすべて root が所有し、マウント済みファイルシステムの全 root は swift が所有する必要があります。以下のコマンドを実行する前に、すべてのデバイスがすでにマウント済みで、それらを root が所有していることを確認してください。
    # chown -R root:swift /etc/swift
  8. クラスター内の各ノードに各リングビルダーファイルをコピーして、 /etc/swift/ 配下に保管します。