Show Table of Contents
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)]#
openstack user create --password PASSWORD swift
+----------+----------------------------------+ | Field | Value | +----------+----------------------------------+ | email | None | | enabled | True | | id | 00916f794cec438ea7f14ee0769e6964 | | name | swift | | username | swift | +----------+----------------------------------+PASSWORD は、Object Storageサービスが Identityサービスとの認証を行う際に使用するセキュアなパスワードに置き換えます。services
テナントのコンテキスト内で、swift
ユーザーとadmin
ロールを関連付けます。[(keystone_admin)]#
openstack role add --project services --user swift admin
swift
Object Storage サービスのエントリーを作成します。[(keystone_admin)]#
openstack service create --name swift \
--description "Swift Storage Service" \
object-store
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 サービスのストレージノードの設定
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_ADDRESS
NODE_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.service
memcached
および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/
配下に保管します。
Comments