Show Table of Contents
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.ini
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
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
trove-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 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) - 新規データベースにデータを読み込み、初期データストアを作成します。
[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}
Comments