16.3. Database-as-a-Service の設定

  1. keystone ユーザーを作成して、Database-as-a-Service 用のロールを追加します。
    [root@rhosp-trove ~(keystone_admin)]# openstack user create --password trove --email trove@localhost --project services trove
    +------------+----------------------------------+
    | Field      | Value                            |
    +------------+----------------------------------+
    | email      | trove@localhost                  |
    | enabled    | True                             |
    | id         | 8740fd0cba314fe68cf0ca95144d2766 |
    | name       | trove                            |
    | project_id | 42e1efb4bd5e49a49cb2b346078d6325 |
    | username   | trove                            |
    +------------+----------------------------------+
    [root@rhosp-trove ~(keystone_admin)]# openstack role add --project services --user trove admin
    +-----------+----------------------------------+
    | Field     | Value                            |
    +-----------+----------------------------------+
    | domain_id | None                             |
    | id        | 63aa6177a61b44aca25dd88a917353bc |
    | name      | admin                            |
    +-----------+----------------------------------+
    [root@rhosp-trove ~(keystone_admin)]# openstack user role list --project services trove
    +----------------------------------+----------+----------+-------+
    | ID                               | Name     | Project  | User  |
    +----------------------------------+----------+----------+-------+
    | 63aa6177a61b44aca25dd88a917353bc | admin    | services | trove |
    | 9fe2ff9ee4384b1894a90878d3e92bab | _member_ | services | trove |
    +----------------------------------+----------+----------+-------+
  2. オプションで、全設定ファイルの詳細なデバッグ情報を設定します。
    [root@rhosp-trove ~(keystone_admin)]# for conf_file in {trove,trove-conductor,trove-taskmanager,trove-guestagent}; do
    > openstack-config --set /etc/trove/$conf_file.conf DEFAULT verbose True;
    > openstack-config --set /etc/trove/$conf_file.conf DEFAULT debug True;
    > done
  3. api-paste.ini ファイルを作成します (存在していない場合)。
    [root@rhosp-trove ~(keystone_admin)]# cp /usr/share/trove/trove-dist-paste.ini /etc/trove/api-paste.ini
  4. api-paste.ini の keystone 認証トークンを更新します。
    [filter:authtoken]
    paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
    auth_uri = http://127.0.0.1:35357/
    identity_uri = http://127.0.0.1:35357/
    admin_password = TROVE_PASSWORD
    admin_user = trove
    admin_tenant_name = services
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf DEFAULT api_paste_config /etc/trove/api-paste.ini
  5. api-paste.ini と同じ情報で、trove.conf を更新します。
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf keystone_authtoken auth_uri http://127.0.0.1:35357/
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf keystone_authtoken identity_uri http://127.0.0.1:35357/
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf keystone_authtoken admin_password TROVE_PASSWORD
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf keystone_authtoken admin_user trove
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove.conf keystone_authtoken admin_tenant_name = services
  6. trove-taskmanager.confnova_proxy 情報を更新します。Database-as-a-Service は、admin ユーザーの認証情報で nova コマンドを発行するので、この設定は実際の admin ユーザーにする必要があります。
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove-taskmanager.conf DEFAULT nova_proxy_admin_user admin
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove-taskmanager.conf DEFAULT nova_proxy_admin_password ADMIN_PASSWORD
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set trove-taskmanager.conf DEFAULT nova_proxy_admin_tenant_name services
  7. RabbitMQ ホストの情報で設定ファイルを更新します。
    [root@rhosp-trove trove(keystone_admin)]# cat /etc/rabbitmq/rabbitmq.config
    % This file managed by Puppet
    % Template Path: rabbitmq/templates/rabbitmq.config
    [
      {rabbit, [
        {default_user, <<"guest">>},
        {default_pass, <<"RABBITMQ_GUEST_PASSWORD">>}
      ]},
    [root@rhosp-trove trove(keystone_admin)]# for conf_file in trove.conf trove-taskmanager.conf trove-conductor.conf ; do
    > openstack-config --set /etc/trove/$conf_file DEFAULT rabbit_host 127.0.0.1;
    > openstack-config --set /etc/trove/$conf_file DEFAULT rabbit_password RABBITMQ_GUEST_PASSWORD;
    > done
  8. 設定ファイルにサービスの URL を追加します。
    [root@rhosp-trove trove(keystone_admin)]# for conf_file in trove.conf trove-taskmanager.conf trove-conductor.conf ; do
    > openstack-config --set /etc/trove/$conf_file DEFAULT trove_auth_url http://127.0.0.1:5000/v2.0
    > openstack-config --set /etc/trove/$conf_file DEFAULT nova_compute_url http://127.0.0.1:8774/v2
    > openstack-config --set /etc/trove/$conf_file DEFAULT cinder_url http://127.0.0.1:8776/v1
    > openstack-config --set /etc/trove/$conf_file DEFAULT swift_url http://127.0.0.1:8080/v1/AUTH_
    > openstack-config --set /etc/trove/$conf_file DEFAULT sql_connection mysql://trove:trove@127.0.0.1/trove
    > openstack-config --set /etc/trove/$conf_file DEFAULT notifier_queue_hostname 127.0.0.1
    > done
    上記のコマンドは、MySQL の接続を追加しますが、これはまだ機能しません。これらのパーミッションは次のステップで付与します。
  9. cloud-init の情報を使用してタスクマネージャーの設定を更新します。
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set /etc/trove/trove-taskmanager.conf DEFAULT cloud-init_loaction /etc/trove/cloudinit
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set /etc/trove/trove-taskmanager.conf DEFAULT taskmanager_manager trove.taskmanager.manager.Manager
    [root@rhosp-trove trove(keystone_admin)]# mkdir /etc/trove/cloudinit
  10. デフォルトのデータストア (database type) で trove.conf を更新し、インスタンスをアタッチする OpenStack Networking ネットワークの名前を設定します。この場合は、ネットワークは private という名前です。
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set /etc/trove/trove.conf DEFAULT default_datastore mysql
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set /etc/trove/trove.conf DEFAULT add_addresses True
    [root@rhosp-trove trove(keystone_admin)]# openstack-config --set /etc/trove/trove.conf DEFAULT network_label_regex ^private$
  11. Database-as-a-Service のデータベースを作成し、trove ユーザーにパーミッションを付与します。
    [root@rhosp-trove trove(keystone_admin)]# mysql -u root
    MariaDB [(none)]> create database trove;
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [(none)]> grant all on trove.* to trove@'localhost' identified by 'TROVE_PASSWORD';
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> grant all on trove.* to trove@'%' identified by 'TROVE_PASSWORD';
    Query OK, 0 rows affected (0.00 sec)
  12. 新規データベースにデータを読み込み、初期データストアを作成します。
    [root@rhosp-trove trove(keystone_admin)]# trove-manage db_sync
    [root@rhosp-trove trove(keystone_admin)]# trove-manage datastore_update mysql ''
  13. イメージとともに使用する cloud-init ファイルを作成します。

    注記

    Database-as-a-Service によりインスタンスが作成される時には、そのインスタンスをビルドするためにデータベースに設定した image_id が使用されます。また、指定したデータストアに基づいて、ユーザーデータにアタッチする .cloudinit ファイルを /etc/trove/cloudinit/ 内で検索します。たとえば、新規インスタンスのデータストアに mysql を選択した場合には、nova が /etc/trove/cloudinit/ 内で mysql.cloudinit ファイルを検索して、ユーザーデータスクリプトとしてアタッチします。これは、ビルド時に MySQL を登録/インストールするのに使用されます。
    以下の内容で /etc/trove/cloudinit/mysql.cloudinit ファイルを作成します。各 PASSWORD は適切なパスワードに、RHN_USERNAMERHN_PASSWORDPOOL_ID はお使いの Red Hat 認証情報とサブスクリプションプール ID に、host SSH public key はパスワードなしの SSH ログイン用のキーに置き換えます。
    #!/bin/bash
    
    sed -i'.orig' -e's/without-password/yes/' /etc/ssh/sshd_config
    echo "PASSWORD" | passwd --stdin cloud-user
    echo "PASSWORD" | passwd --stdin root
    systemctl restart sshd
    
    subscription-manager register --username=RHN_USERNAME --password=RHN_PASSWORD
    subscription-manager attach --pool POOL_ID
    subscription-manager repos --disable=*
    subscription-manager repos --enable=rhel-7-server-optional-rpms 
    subscription-manager repos --enable=rhel-7-server-rpms 
    subscription-manager repos --enable=rhel-server-rhscl-7-rpms
    yum install -y openstack-trove-guestagent mysql55
    
    cat << EOF > /etc/trove/trove-guestagent.conf
    rabbit_host = 172.1.0.12
    rabbit_password = RABBITMQ_GUEST_PASSWORD
    nova_proxy_admin_user = admin
    nova_proxy_admin_pass = ADMIN_PASSWORD
    nova_proxy_admin_tenant_name = services
    trove_auth_url = http://172.1.0.12:35357/v2.0
    control_exchange = trove
    EOF
    
    echo "host SSH public key" >> /root/.ssh/authorized_keys
    
    echo "host SSH public key" >> /home/cloud-user/.ssh/authorized_keys
    
    systemctl stop trove-guestagent
    systemctl enable trove-guestagent
    systemctl start trove-guestagent

    注記

    上記は bash スクリプトとして記述されており、cloud-init に対応しています。これは、could-init の YAML 形式のレイアウトを使用して記述することもできます。
  14. glance を使用して、--file オプションで指定したクラウドイメージをアップロードします。
    [root@rhosp-trove trove(keystone_admin)]# glance image-create --name rhel7 \
    > --file image.qcow2 \
    > --disk_format qcow2 \
    > --container_format bare \
    > --is-public True \
    > --owner trove
    
    [root@rhosp-trove trove(keystone_admin)]# glance image-list
    +--------------------------------------+--------+-------------+------------------+-----------+--------+
    | ID                                   | Name   | Disk Format | Container Format | Size      | Status |
    +--------------------------------------+--------+-------------+------------------+-----------+--------+
    | b88fa633-7219-4b80-87fa-300840575f91 | cirros | qcow2       | bare             | 13147648  | active |
    | 9bd48cdf-52b4-4463-8ce7-ce81f44205ae | rhel7  | qcow2       | bare             | 435639808 | active |
    +--------------------------------------+--------+-------------+------------------+-----------+--------+
  15. Red Hat Enterprise Linux 7 イメージへの参照で Database-as-a-Service データベースを更新します。前のコマンドの出力に表示された ID を使用してください。
    [root@rhosp-trove trove(keystone_admin)]# trove-manage --config-file=/etc/trove/trove.conf datastore_version_update \
    > mysql mysql-5.5 mysql 9bd48cdf-52b4-4463-8ce7-ce81f44205ae mysql55 1

    注記

    構文は「trove-manage datastore_version_update datastore version_name manager image_id packages active」です。
  16. keystone を使用して Database-as-a-Service サービスを作成し、OpenStack がこのサービスの存在を認識するようにします。
    [root@rhosp-trove trove(keystone_admin)]# openstack service create --name trove \
    > --description "OpenStack DBaaS" \
    > database
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack DBaaS                  |
    | enabled     | True                             |
    | id          | b05b564d5ac049f49984a827d820c5a5 |
    | name        | trove                            |
    | type        | database                         |
    +-------------+----------------------------------+
  17. Database-as-a-Service API 用の URL エンドポイントを追加します。
    [root@rhosp-trove trove(keystone_admin)]# openstack endpoint create \
    > --publicurl 'http://127.0.0.1:8779/v1.0/%(tenant_id)s' \
    > --internalurl 'http://127.0.0.1:8779/v1.0/%(tenant_id)s' \
    > --adminurl 'http://127.0.0.1:8779/v1.0/%(tenant_id)s' \
    > --region RegionOne \
    > database
  18. 3 つの Database-as-a-Service サービスを起動して、ブート時に有効になるように設定します。
    [root@rhosp-trove trove(keystone_admin)]# systemctl start openstack-trove-{api,taskmanager,conductor}
    [root@rhosp-trove trove(keystone_admin)]# systemctl enable openstack-trove-{api,taskmanager,conductor}
    ln -s '/usr/lib/systemd/system/openstack-trove-api.service' '/etc/systemd/system/multi-user.target.wants/openstack-trove-api.service'
    ln -s '/usr/lib/systemd/system/openstack-trove-taskmanager.service' '/etc/systemd/system/multi-user.target.wants/openstack-trove-taskmanager.service'
    ln -s '/usr/lib/systemd/system/openstack-trove-conductor.service' '/etc/systemd/system/multi-user.target.wants/openstack-trove-conductor.service'

    重要

    systemctl status openstack-trove-{api,taskmanager,conductor} のコマンドを実行して、サービスが起動しているかどうかを確認します。操作が失敗して、/var/log/trove にエラーが出力されが場合には、以下のコマンドを実行して問題を解決します。
    [root@rhosp-trove trove(keystone_admin)]# chown -R trove:trove /var/log/trove
    [root@rhosp-trove trove(keystone_admin)]# systemctl restart openstack-trove-{api,taskmanager,conductor}