6.3. Block Storage サービスの設定

6.3.1. Block Storage サービスのデータベース接続の設定

Block Storage サービスによって使用されるデータベース接続文字列は、/etc/neutron/plugin.ini ファイルで定義されます。サービスを起動する前に、有効なデータベースサーバーをポイントするように更新しておく必要があります。
Block Storage サービスをホストする各システムの sql_connection 設定キーの値を設定します。
# openstack-config --set /etc/cinder/cinder.conf \
   DEFAULT sql_connection mysql://USER:PASS@IP/DB
以下の値を置き換えてください。
  • USER は、Block Storage サービスのデータベースのユーザー名 (通常は cinder) に置き換えます。
  • PASS は選択したデータベースユーザーのパスワードに置き換えます。
  • IP は、データベースサービスをホストするシステムの IP アドレスまたはホスト名に置き換えます。
  • DB は、Block Storage サービスのデータベースの名前 (通常は cinder) に置き換えます。

重要

この接続設定キーに指定する IP アドレスまたはホスト名は、Block Storage サービスのデータベースの作成時に Block Storage サービスのデータベースユーザーがアクセスを許可された IP アドレスまたはホスト名と一致する必要があります。また、データベースがローカルでホストされ、Block Storage サービスのデータベースの作成時に「localhost」へのアクセス権を付与した場合には、「localost」と入力する必要があります。

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

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

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

  1. Keystone に管理ユーザーとしてアクセスするためのシェルを設定します。
    # source ~/keystonerc_admin
  2. cinder ユーザーを作成します。
    [(keystone_admin)]# openstack user create --password PASSWORD cinder
    +----------+----------------------------------+
    | Field    | Value                            |
    +----------+----------------------------------+
    | email    | None                             |
    | enabled  | True                             |
    | id       | cb4dafc849df4ea180e9e29346a29038 |
    | name     | cinder                           |
    | username | cinder                           |
    +----------+----------------------------------+
    PASSWORD は、Block Storage サービスが Identity サービスとの認証を行う際に使用するセキュアなパスワードに置き換えます。
  3. services テナントのコンテキスト内で、cinder ユーザーと admin ロールを関連付けます。
    [(keystone_admin)]# openstack role add --project services --user cinder admin
  4. cinder および cinderv2 Block Storage サービスエントリーを作成します。
    [(keystone_admin)]# openstack service create --name cinder \
            --description "Cinder Volume Service" \
            volume
  5. cinder エンドポイントエントリーを作成します。
    [(keystone_admin)]# openstack endpoint create \
       --publicurl 'http://IP:8776/v1/%(tenant_id)s' \
       --adminurl 'http://IP:8776/v1/%(tenant_id)s' \
       --internalurl 'http://IP:8776/v1/%(tenant_id)s'\ 
       --region RegionOne \
       cinder
    IP は、Block Storage API サービス (openstack-cinder-api) をホストするシステムの IP アドレスまたはホスト名に置き換えます。複数の API サービスインスタンスをインストールして実行するには、各インスタンスの IP アドレスまたはホスト名を使用してこのステップを繰り返します。

6.3.3. Block Storage サービスの認証設定

Block Storage サービスが認証に Identity サービスを使用するように設定します。以下の手順に記載するステップはすべて、Block Storage サービスをホストする各サーバーに root ユーザーとしてログインして実行する必要があります。

手順6.3 Block Storage サービスが Identity サービスを使用して認証を行うための設定

  1. 認証ストラテジーを keystone に設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT auth_strategy keystone
  2. Block Storage サービスが使用する必要のある Identity サービスのホストを設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       keystone_authtoken auth_host IP
    IP は、Identity サービスをホストするシステムの IP アドレスまたはホスト名に置き換えます。
  3. Block Storage サービスが正しいテナントとして認証を行うように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       keystone_authtoken admin_tenant_name services
    services は、OpenStack Networking を使用するために作成したテナントの名前に置き換えます。本ガイドの例では、services を使用しています。
  4. Block Storage サービスが cinder の管理ユーザーアカウントを使用して認証を行うように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       keystone_authtoken admin_user cinder
  5. Block Storage サービスが正しい cinder の管理ユーザーアカウントを使用するように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       keystone_authtoken admin_password PASSWORD
    PASSWORD は、cinder ユーザーの作成時に設定したパスワードに置き換えます。

6.3.4. Block Storage サービスのトラフィックを許可するためのファイアウォール設定

OpenStack 環境内の各コンポーネントは、認証に Idenity サービスを使用するため、このサービスへアクセスできる必要があります。Block Storage サービスをホストするシステムのファイアウォール設定を変更して、これらのポートでのネットワークトラフィックを許可する必要があります。以下の手順に記載するステップはすべて、Block Storage サービスをホストする各システムに root ユーザーとしてログインして実行する必要があります。

手順6.4 Block Storage サービスのトラフィックを許可するためのファイアウォール設定

  1. テキストエディターで /etc/sysconfig/iptables ファイルを開きます。
  2. このファイルに、ポート 3260 および 8776 で TCP トラフィックを許可する INPUT ルールを追加します。新規ルールは、トラフィックを REJECT する INPUT ルールよりも前に記載する必要があります。
    -A INPUT -p tcp -m multiport --dports 3260,8776 -j ACCEPT
  3. /etc/sysconfig/iptables ファイルへの変更を保存します。
  4. iptables サービスを再起動して、変更を有効にします。
    # systemctl restart iptables.service

6.3.5. Block Storage サービスが SSL を使用するための設定

以下に記載する cinder.conf ファイル内のオプションを使用して、SSL を設定します。

表6.1 Block Storage の SSL オプション

設定オプション説明
backlog
ソケットの設定を行うバックログ要求の数
tcp_keepidle
サーバーソケットごとに設定する TCP_KEEPIDLE の値 (秒単位)
ssl_ca_file
クライアントの接続を検証するのに使用する CA 証明書ファイル
ssl_cert_file
サーバーをセキュアに起動する際に使用する証明書ファイル
ssl_key_file
サーバーをセキュアに起動する際に使用する秘密鍵ファイル

6.3.6. Block Storage サービスのための RabbitMQ メッセージブローカーの設定

RabbitMQ はデフォルト (かつ推奨の) メッセージブローカーです。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。以下の手順で記載する全ステップは、Block Storage サービスをホストするサーバーに root ユーザーとしてログインして実行する必要があります。

手順6.5 Block Storage サービスが RabbitMQ メッセージブローカーを使用するための設定

  1. RPC バックエンドとして RabbitMQ を設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rpc_backend cinder.openstack.common.rpc.impl_kombu
  2. RabbitMQ のホスト名を設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rabbit_host RABBITMQ_HOST
    RABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。
  3. メッセージブローカーのポートを 5672 に設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rabbit_port 5672
  4. RabbitMQ の設定時に Block Storage サービス用に作成した RabbitMQ ユーザー名とパスワードを設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rabbit_userid cinder
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rabbit_password CINDER_PASS
    cinder および CINDER_PASS は、Block Storage サービス用に作成された RabbitMQ ユーザー名とパスワードに置き換えます。
  5. RabbitMQ の起動時に、cinder ユーザーに全リソースに対するパーミッションが付与されます。このアクセスは、特別に仮想ホスト / を介して行われます。Block Storage サービスがこの仮想ホストに接続されるように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
       DEFAULT rabbit_virtual_host /

6.3.7. Block Storage サービスとメッセージブローカーとの間の SSL 通信の有効化

メッセージブローカーで SSL を有効化した場合は、Block Storage サービスも相応に設定する必要があります。以下の手順では、エクスポートしたクライアントの証明書とキーファイルが必要です。これらのファイルのエクスポートの方法に関する説明は、「クライアント用 SSL 証明書のエクスポート」を参照してください。
  1. メッセージブローカーとの SSL 通信を有効化します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_use_ssl True
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT kombu_ssl_certfile /path/to/client.crt
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT kombu_ssl_keyfile /path/to/clientkeyfile.key
    以下の値を置き換えてください。
    • /path/to/client.crt はエクスポートされたクライアント証明書の絶対パスに置き換えます。
    • /path/to/clientkeyfile.key はエクスポートされたキーファイルの絶対パスに置き換えます。
  2. 証明書がサードパーティーの認証局 (CA) によって署名されている場合には、次のコマンドを実行する必要もあります。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT kombu_ssl_ca_certs /path/to/ca.crt
    /path/to/ca.crt は、サードパーティー CA によって提供された CA ファイルの絶対パスに置き換えます (詳細は 「RabbitMQ メッセージブローカーでの SSL の有効化」 を参照)。

6.3.8. Block Storage データベースへのデータ投入

Block Storage データベース接続文字列を適切に設定した後には、Block Storage データベースにデータを投入します。

重要

この手順は、データベースの初期化とデータ投入のために 1 回のみ実行する必要があります。Block Storage サービスをホストするシステムの追加時には繰り返す必要はありません。

手順6.6 Block Storage サービスのデータベースへのデータ投入

  1. Block Storage サービスをホストするシステムにログインします。
  2. cinder ユーザーに切り替えます。
    # su cinder -s /bin/sh
  3. /etc/cinder/cinder.conf で特定されているデータベースを初期化し、データを投入します。
    $ cinder-manage db sync

6.3.9. Block Storage API サービスのスループットの増加

デフォルトでは、Block Storage API サービス (openstack-cinder-api) は 1 プロセスで実行されます。これにより、Block Storage サービスが常時処理可能な要求件数が制限されます。実稼働環境では、マシンのキャパシティーが許す限り多くのプロセスで openstack-cinder-api の実行を許可することによって、Block Storage API のスループットを増加させることをお勧めします。
Block Storage API サービスオプション osapi_volume_workers により、openstack-cinder-api 向けに起動する API サービスワーカーの数 (または OS プロセス数) を指定することができます。
このオプションを設定するには、openstack-cinder-api ホストで以下のコマンドを実行します。
# openstack-config --set /etc/cinder/cinder.conf \
   DEFAULT osapi_volume_workers CORES
CORES はマシン上の CPU コア/スレッド数に置き換えてください。