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 サービス用のアイデンティティレコードの作成
- Keystone に管理ユーザーとしてアクセスするためのシェルを設定します。
#source ~/keystonerc_admin swiftユーザーを作成します。[(keystone_admin)]#keystone user-create --name swift --pass PASSWORD+----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | email | | | enabled | True | | id | e1765f70da1b4432b54ced060139b46a | | name | swift | | username | swift | +----------+----------------------------------+PASSWORD は、Object Storage サービスが Identity サービスとの認証を行う際に使用するセキュアなパスワードに置き換えます。servicesテナントのコンテキスト内で、swiftユーザーとadminロールを関連付けます。[(keystone_admin)]#keystone user-role-add --user swift --role admin --tenant servicesswiftObject Storage サービスのエントリーを作成します。[(keystone_admin)]#keystone service-create --name swift --type object-store \--description "Swift Storage Service"+-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Swift Storage Service | | enabled | True | | id | 9e0156e9965241e7a7d9c839884f9c01 | | name | swift | | type | object-store | +-------------+----------------------------------+swiftエンドポイントエントリーを作成します。[(keystone_admin)]#keystone endpoint-create \--service swift \--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'IP は Object Storage のプロキシサービスをホストするサーバーの IP アドレスまたは完全修飾ドメイン名に置き換えます。
4.4.2. Object Storage サービスのストレージノードの設定
Object Storage サービスは、ファイルシステムにオブジェクトを保管します。これは通常、接続されている複数の物理ストレージデバイス上のファイルシステムです。オブジェクトの保管に使用するデバイスはすべて
ext4 または XFS の形式でフォーマットし、/srv/node/ ディレクトリーの下にマウントする必要があります。また、指定されたノードで実行されるサービスはすべて有効化して、それらに使用するポートを開く必要があります。
プロキシサービスは、他のサービスとともに実行することが可能ですが、以下の手順ではプロキシサービスは対象外となっています。
手順4.4 Object Storage サービスのストレージノードの設定
ext4またはXFSのファイルシステムでデバイスをフォーマットします。xattrを必ず有効化してください。/etc/fstabファイルにデバイスを追加して、ブート時には/srv/node/の下にマウントされるようにします。blkidコマンドを使用して、デバイスの一意 ID を検索して、この一意の ID を使用してデバイスをマウントします。注記
ext4を使用する場合には、user_xattrオプションを指定してファイルシステムをマウントすることにより、拡張属性を有効化するようにしてください (XFSの場合は、拡張属性はデフォルトで有効化されます)。- 各ノードで実行中の各サービスが使用する TCP ポートを開くようにファイアウォールを設定します。サービスデフォルトでは、アカウントサービスはポート 6202、コンテナーサービスはポート 6201、オブジェクトサービスはポート 6200 を使用します。
- テキストエディターで
/etc/sysconfig/iptablesファイルを開きます。 - アカウント、コンテナー、オブジェクトのサービスが使用するポートで TCP トラフィックを許可する
INPUTルールを追加します。この新規ルールは、reject-with icmp-host-prohibitedよりも前に記載する必要があります。-A INPUT -p tcp -m multiport --dports 6200,6201,6202,873 -j ACCEPT
/etc/sysconfig/iptablesファイルへの変更を保存します。iptablesサービスを再起動して、ファイアウォールの変更を有効にします。#systemctl restart iptables.service
/srv/node/のコンテンツの所有者をswift:swiftに変更します。#chown -R swift:swift /srv/node//srv/node/配下の全ディレクトリーのSELinuxコンテキストを正しく設定します。#restorecon -R /srv/etc/swift/swift.confファイルにハッシュプレフィックスを追加します。#openstack-config --set /etc/swift/swift.conf swift-hash swift_hash_path_prefix \$(openssl rand -hex 10)/etc/swift/swift.confファイルにハッシュサフィックスを追加します。#openstack-config --set /etc/swift/swift.conf swift-hash swift_hash_path_suffix \$(openssl rand -hex 10)- ストレージサービスがリッスンする 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_ADDRESSNODE_IP_ADDRESS は、設定するノードの IP アドレスに置き換えます。 - 現在設定中のノードから全 Object Storage サービスのノードに
/etc/swift/swift.confをコピーします。重要
/etc/swift/swift.confファイルは、すべての Object Storage サービスのノードで全く同じである必要があります。 - ノードで実行するサービスを起動します。
#systemctl start openstack-swift-account.service#systemctl start openstack-swift-container.service#systemctl start openstack-swift-object.service - サービスがブート時に起動するように設定します。
#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 サービスのプロキシサービスの設定
- 適切なサービスユーザーの正しい認証情報でプロキシーサーバーの設定ファイルを更新します。
#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 は、サービスユーザーに関連付けられたパスワードに置き換えます。
memcachedおよびopenstack-swift-proxyサービスを起動します。#systemctl start memcached.service#systemctl start openstack-swift-proxy.servicememcachedおよびopenstack-swift-proxyサービスがブート時に起動するように設定します。#systemctl enable memcached.service#systemctl enable openstack-swift-proxy.service- 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 セキュリティーガイド』を参照してください。 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 リングを構築します。ビルダーファイル、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 - リングが作成されたら、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 (パーティション数) に置き換えます。
注記
上記の手順は、リングに追加する (クラスター内の各ノード上の) デバイスごとに繰り返して下さい。 - 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変数は前のステップで使用したのと同じ値に置き換えます。注記
上記のコマンドは、リングに追加する (クラスター内の各ノード上の) デバイスごとに繰り返して下さい。 - リング内の複数のデバイスにパーティションを分散します。
#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ディレクトリーにリングファイルが 3 つあるかどうかを確認します。次のコマンドを実行してください。#ls /etc/swift/*gzこれらのファイルは以下のように表示されるはずです。/etc/swift/account.ring.gz /etc/swift/container.ring.gz /etc/swift/object.ring.gz
openstack-swift-proxyサービスを再起動します。#systemctl restart openstack-swift-proxy.service- 前の手順で作成したばかりのファイルを含む、
/etc/swift/ディレクトリー内の全ファイルの所有権をrootユーザーとswiftグループに設定します。重要
マウントポイントはすべてrootが所有し、マウント済みファイルシステムの全 root はswiftが所有する必要があります。以下のコマンドを実行する前に、すべてのデバイスがすでにマウント済みで、それらをrootが所有していることを確認してください。#chown -R root:swift /etc/swift - クラスター内の各ノードに各リングビルダーファイルをコピーして、
/etc/swift/配下に保管します。