Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
16.3. Database-as-a-Service の設定
- 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 | +----------------------------------+----------+----------+-------+ - オプションで、全設定ファイルの詳細なデバッグ情報を設定します。
[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 api-paste.iniファイルを作成します (存在していない場合)。[root@rhosp-trove ~(keystone_admin)]#cp /usr/share/trove/trove-dist-paste.ini /etc/trove/api-paste.iniapi-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.iniapi-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 = servicestrove-taskmanager.confのnova_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- 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 - 設定ファイルにサービスの 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 の接続を追加しますが、これはまだ機能しません。これらのパーミッションは次のステップで付与します。 - 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 - デフォルトのデータストア (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$ - Database-as-a-Service のデータベースを作成し、
troveユーザーにパーミッションを付与します。[root@rhosp-trove trove(keystone_admin)]#mysql -u rootMariaDB [(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) - 新規データベースにデータを読み込み、初期データストアを作成します。
[root@rhosp-trove trove(keystone_admin)]#trove-manage db_sync[root@rhosp-trove trove(keystone_admin)]#trove-manage datastore_update mysql '' - イメージとともに使用する 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_USERNAME、RHN_PASSWORD、POOL_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 形式のレイアウトを使用して記述することもできます。 - 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 | +--------------------------------------+--------+-------------+------------------+-----------+--------+ - 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」です。 - 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 | +-------------+----------------------------------+ - 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 - 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}