Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

Database-as-a-Service ガイド

Red Hat OpenStack Platform 9

Red Hat OpenStack Platform の Database-as-a-Service

OpenStack Documentation Team

概要

本ガイドでは、Database-as-a-Service の trove を Red Hat OpenStack Platform でデプロイ、設定、使用する方法について説明します。

前書き

Database-as-a-Service (DBaaS) により、ユーザーは、デプロイ、設定、バックアップなどの管理タスクについて懸念することなく、OpenStack 環境でリレーショナルデータベースまたは非リレーショナルデータベースを便利に活用することができます。この機能は、ゲストのデータベースイメージのプロビジョニングと管理を行う trove コンポーネントによって提供されます。

警告

非推奨機能のお知らせ: Red Hat OpenStack Platform 10 以降では、OpenStack Trove サービスは Red Hat OpenStack Platform ディストリビューションには同梱されません。現在、信頼できるパートナーと連携して実稼動環境ですぐに使用できる DBaaS サービスをお客様に提供できるように取り組んでいます。このオプションに関する情報は、担当のセールスアカウントマネージャーにお問い合わせください。

DBaaS は、複数のサービスで構成されます。

  • ゲストエージェントサービス。ゲストインスタンス上で実行され、データストアを管理します。これには、新規データストアをオンラインにしたり、データベース操作を実行したりする作業が含まれます。
  • インスタンスのプロビジョニング、管理、操作を実行するタスクマネージャーサービス
  • RESTful API を提供し、API 要求をゲストエージェントまたはタスクマネージャーに転送する API サービス。DBaaS API へのコマンドラインインターフェースは、python-troveclient パッケージの一部である trove クライアントによって提供されます。
  • ホスト上で実行され、ゲストインスタンスからのメッセージ (例: ステータスの更新など) をリッスンしてホストに渡すコンダクターサービス

以下のデータベースがサポートされています。

  • MySQL 5.5 および 5.6
  • MariaDB 5.5 および 10
警告

OpenStack Database-as-a-Service は、本リリースではテクノロジープレビューとして提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト目的のみでご利用いただく機能で、実稼働環境にデプロイすべきではありません。 テクノロジープレビューについての詳しい情報は Scope of Coverage Details を参照してください。

第1章 Database-as-a-Service の管理

1.1. Database-as-a-Service コントローラーのインストールおよび設定

Trove コントローラーに必要なパッケージのインストールと環境の設定方法に関する詳しい説明は、『手動インストール手順』を参照してください。

1.2. OpenStack Database-as-a-Service のセキュリティー保護

Red Hat OpenStack Platform の以前のバージョンでは、DBaaS ゲストエージェントは、RabbitMQ メッセージバスへの認証情報を使用して実行されていました。RabbitMQ メッセージバスは、管理コントローラー全体で、機密データを含む全トラフィックに使用されていたので、DBaaS のインスタンスは、メッセージバスで送信される全データを表示することが可能でした。このため、インスタンスがこのバスを共有する他のサービスを誤用したり、攻撃したりできてしまう可能性がありました。Red Hat OpenStack Platform 9 では、DBaaS は、分離されたテナントに配置され、管理コントローラーの他の部分にはアクセスできなくなりましたが、DBaaS のセキュリティーをさらに強化するには、別のホストと別の RabbitMQ メッセージバスに DBaaS インスタンスを設定することが可能です。この設定を使用するには、以下の手順を実行してください。

  1. 管理コントローラー上での操作

    1. RabbitMQ のユーザーとパスワードをカスタムの値に設定します。この値は、DBaaS テナントとは共有されません。たとえば、guest アカウントと / デフォルトの仮想ホストに変更したパスワードを使用することができます。

      # rabbitmqctl change_password guest password

      このパスワードは、サービスがメッセージバスに接続するように設定している全設定ファイルで変更されます。

    2. DBaaS データベースエンドポイントを更新して、サービスカタログルックアップが別のホスト上で DBaaS を使用するようにします。まず現在のエンドポイント UUID を特定してから削除し、最後に別の DBaaS ホストの IP アドレスを使用して新規エンドポイントを作成します。

      # keystone endpoint-list
      # keystone endpoint-delete current_DBaaS_endpoint_uuid
      # keystone endpoint-create --service trove --publicurl http://IP:8779/v1.0/\$\(tenant_id\)s --region RegionOne
  2. DBaaS コントローラー上での操作:

    1. リモート管理コントローラーホストの WSGI 設定で認証トークンフィルターをポイントします。/etc/trove/api-paste.ini ファイルで、以下のオプションと値を指定します。IP は管理コントローラーホストの IP アドレスに置き換えます。

      [filter:authtoken]
      paste.filter_factory = keystonemiddleware.auth_token:filter_factory
      service_protocol = http
      service_host = IP
      service_port = 5000
      auth_host = IP
      auth_port = 35357
      auth_protocol = http
      auth_uri = http://IP:35357/v2.0/
      signing_dir = /tmp/keystone-signing-trove
      admin_tenant_name = admin
      admin_user = admin
      admin_password = admin
    2. 管理ユーザーを追加して、DBaaS ゲストエージェントには、管理コントローラーで使用しているのとは異なるシークレットが設定されるようにします。

      # rabbitmqctl add_user isolated isolated
      # rabbitmqctl set_permissions isolated ".*" ".*" ".*"
    3. /etc/trove/trove.conf ファイルで以下オプションと値を指定して、DBaaS コントロールプレーンがローカルの RabbitMQ インスタンスに接続して認証を行うように設定します。

      # AMQP Connection info
      rabbit_userid=isolated
      rabbit_password=isolated
      rabbit_host=DBaaS_IP
      
      # single instance tenant
      nova_proxy_admin_user = user
      nova_proxy_admin_pass = password
      nova_proxy_admin_tenant_name = tenant
      trove_auth_url = http://MGMT_IP:5000/v2.0
      nova_compute_service_type = compute
      cinder_service_type = volumev2
      os_region_name = RegionOne
      nova_compute_url = http://MGMT_IP:8774/v3
      
      remote_nova_client = trove_ext.cloudos.remote.nova_client_trove_admin
      remote_cinder_client = trove_ext.cloudos.remote.cinder_client_trove_admin
      remote_neutron_client = trove_ext.cloudos.remote.neutron_client_trove_admin
  3. 管理コントローラーで、/etc/trove/trove-guestagent.conf ファイルを以下のように編集します。

    # AMQP Connection info
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_host=DBaaS_IP
    
    # single tenant config
    nova_proxy_admin_user = user
    nova_proxy_admin_pass = password
    nova_proxy_admin_tenant_name = tenant
    trove_auth_url = http://MGMT_IP:5000/v2.0
    swift_url = http://MGMT_IP:8080/v1/AUTH_

1.2.1. ACL ポリシー

また、RabbitMQ 仮想ホストの提供する ACL ポリシーを活用してセキュリティーを強化することができます。この場合には、仮想ホストごとに異なるパーミッションのある異なるユーザーを割り当てることができます。たとえば、/isolated という名前の仮想ホストを定義して、isolated ユーザーに仮想ホストの適切なパーミッションを割り当てます。このように設定するには、以下の手順を実行します。

  1. デフォルトの / 仮想ホスト用の guest アカウントのパスワードを変更します。

    # rabbitmqctl change_password guest password
  2. 新規ユーザーと仮想ホストを追加して、パーミッションを適切に設定します。

    # rabbitmqctl add_user isolated isolated
    # rabbitmqctl add_vhost /isolated
    # rabbitmqctl -p /isolated set_permissions isolated ".*" ".*" ".*"
  3. DBaaS の設定を編集します。編集するファイルは 2 つあります。/etc/trove/trove-guestmanager.conf は、puppet-trove から packstack によって生成され、ゲストインスタンスに挿入されます。/etc/trove/trove-conductor.conf は、DBaaS インスタンスからの非同期ステータス更新のための DBaaS コントロールプレーンサービスを設定します。

    [oslo_messaging_rabbit]
    rabbit_host=IP
    rabbit_virtual_host=/isolated
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_port=5672
    rabbit_ha_queues=False
    rabbit_hosts=IP:5672
    rabbit_use_ssl=False

この方法の利点は、別のホストとメッセージキューを使用する場合のシナリオよりもシンプルであることです。これは、Red Hat OpenStack Platform director を使用するなどの方法で、プロビジョニングを自動的に実行する場合に役立てることができます。

第2章 Database-as-a-Service の使用

2.1. Database-as-a-Service ゲストイメージの作成および設定の自動化

Red Hat は、サポート対象のデータストア向けに自動の DBaaS 互換イメージを生成するには trove-image-create ツールを使用することを推奨します。

trove-image-create ツールを取得して、openstack-trove-imagesパッケージをインストールします。

# yum install openstack-trove-images

以下の基本オプションを利用することができます。

オプション説明、パラメーター

-i--image

使用するベースイメージ。QEMU イメージ (qcow2) がサポートされています。イメージファイル名 (およびオプションでそのパス) をパラメーターとして指定します。

-r--release

使用するOpenStack バージョン。kilolibertymitaka のいずれかをパラメーターとして指定します。

-s--datastore

デプロイするデータストア。サポート対象のデータストアは、「前書き」に記載しています。以下のようなパラメーターを使用する可能性があります。

  • mysql: ディストリビューションで mysql を提供するパッケージ。RHEL 7 の場合には MariaDB 5.5 が使用されます。
  • mysql55:  mysql.com から提供されている MySQL 5.5
  • mysql56:  mysql.com から提供される MySQL 5.6
  • mariadb10: mariadb.org から提供されている MariaDB 10.0

例2.1 イメージのカスタマイズ

たとえば、以下のようにツールを使用することができます。

# trove-image-create -s mysql -r mitaka -i myimage.qcow2

このコマンドにより、Red Hat OpenStack Platform 9 (Mitaka) から MariaDB 5.5 および Trove が追加され、現在の作業ディレクトリー内の myimage.qcow2 ファイルに保管されているイメージがカスタマイズされます

RHEL 7 イメージを使用して作業を行う場合には、使用する必要のある追加のオプションがあります。

オプション認識されるパラメーターおよび構文説明

--sm-register

USER:password:PASSWORD
USER:file:FILE_CONTAINING_PASSWORD

Red Hat の認証情報を使用して、サブスクリプションマネージャーに登録します。

--sm-pool

pool:POOL_ID
file:FILE_CONTAINING_POOL_ID
auto

指定または自動的に決定されたサブスクリプションプールをシステムにアタッチします。

例2.2 RHEL 7 イメージのカスタマイズ

# trove-image-create -s mysql -r mitaka -i ../../images/rhel-mariadb55.qcow2 --sm-register admin@example.com:password:123456 --sm-pool auto

このコマンドは、上記の例と同様の方法でイメージをカスタマイズするとともに、Red Hat ログイン名 admin@example.com、パスワード 123456、および最も適したサブスクリプションを使用してシステムを登録します。

2.1.1. Database-as-a-Service 管理へのイメージの読み込み

イメージのカスタマイズが完了したら、以下のステップを実行してください。

  1. Image サービスへイメージをアップロードします。これには、以下のようなコマンドを実行します。

    # openstack image create rhel7-mariadb55 --disk-format qcow2 --container-format bare --public < myimage.qcow2
  2. 上記のコマンドの出力から、アップロードしたイメージの ID を取得します。以下のような出力が表示されるはずです。

    +------------------+------------------------------------------------------+
    | Field            | Value                                                |
    +------------------+------------------------------------------------------+
    | checksum         | dec3f16054739459d03984b7a552cd9c                     |
    | container_format | bare                                                 |
    | created_at       | 2016-01-27T20:10:36Z                                 |
    | disk_format      | qcow2                                                |
    | file             | /v2/images/c637391b-e00f-47fb-adb5-e8dfc4e224d4/file |
    | id               | c637391b-e00f-47fb-adb5-e8dfc4e224d4                 |
    | min_disk         | 0                                                    |
    | min_ram          | 0                                                    |
    | name             | rhel7-mariadb55                                      |
    | owner            | 483cae7de00c4f029e19eef5983c67a9                     |
    | protected        | False                                                |
    | schema           | /v2/schemas/image                                    |
    | size             | 1910767616                                           |
    | status           | active                                               |
    | updated_at       | 2016-01-27T20:10:46Z                                 |
    | virtual_size     | None                                                 |
    | visibility       | public                                               |
    +------------------+------------------------------------------------------+

    この場合、ID は c637391b-e00f-47fb-adb5-e8dfc4e224d4 です。

  3. DBaaS 管理データストアを更新して、必要なデータストアとバージョンのインスタンスを起動するのに使用される新規イメージのレコードを追加します。

    # export DATASTORE=mariadb
    # export DATASTORE_VERSION=5.5
    # export IMAGE_ID=c637391b-e00f-47fb-adb5-e8dfc4e224d4
    # export PACKAGES=mariadb-server
    #
    # trove-manage datastore_update ${DATASTORE} ""
    # trove-manage datastore_version_update ${DATASTORE} ${DATASTORE_VERSION} ${DATASTORE} ${IMAGE_ID} ${PACKAGES} 1
    # trove-manage datastore_update ${DATASTORE} ${DATASTORE_VERSION}
    重要

    PACKAGES 変数は、使用するデータストアによって異なります。MySQL (任意のバージョン) の場合には、mysql-community-server を使用します。MariaDB 10.0 の場合には、MariaDB-server を使用します。

2.1.2. トラブルシューティング

インスタンスの起動時にエラーが発生した場合には、SSH キーを使用してイメージを作成し、トラブルシューティングに使用することができます。trove-image-create ツールには、この目的のために --root-ssh-key オプションがあります。このオプションは、公開鍵へのパスをパラメーターとして取り、イメージに鍵を挿入します。以下に例を示します。

# trove-image-create -i myimage.qcow2 -r liberty -s mysql --root-ssh-key ~/.ssh/id_rsa.pub

このイメージをベースにするインスタンスにアクセスできるようにするには、以下の手順に従ってください。

  1. インスタンスに関連付けられたセキュリティーグループを編集します。
  2. SSH ポートを開きます。
  3. ICMP の許可も検討してください。
  4. インスタンスがプライベートネットワーク内にある場合には、Floating IP をインスタンスに追加する必要があります。

これらの手順を完了後には、以下のコマンドでインスタンスにログインできるはずです。

# ssh root@INSTANCE_IP

法律上の通知

Copyright © 2017 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.