Ubuntu 20.04
Sponsored Link

OpenStack Victoria : Trove 利用方法
2020/10/27
 
OpenStack Database Service(Trove)の利用方法です。
当例では以下のような環境を例に Trove をインストールしています。
------------+---------------------------+---------------------------+------------
            |                           |                           |
        eth0|10.0.0.30              eth0|10.0.0.50              eth0|10.0.0.51
+-----------+-----------+   +-----------+-----------+   +-----------+-----------+
|    [ Control Node ]   |   |    [ Network Node ]   |   |    [ Compute Node ]   |
|                       |   |                       |   |                       |
|  MariaDB    RabbitMQ  |   |      Linux Bridge     |   |        Libvirt        |
|  Memcached  httpd     |   |   L2 Agent L3 Agent   |   |     Nova Compute      |
|  Keystone   Glance    |   |     Metadata Agent    |   |      Linux Bridge     |
|  Nova API  Cinder API |   |     Cinder Volume     |   |        L2 Agent       |
|  Neutron Server       |   |        Heat API       |   |                       |
|  Metadata Agent       |   |      Heat Engine      |   |                       |
|                       |   |    Trove Services     |   |                       |
+-----------------------+   +-----------------------+   +-----------------------+

[1]
Trove API が稼働するノード (当例では Network ノード) で、Trove 用の VM イメージを作成します。
作成に関しては以下の条件を満たす必要があります。
条件を満たすことにより、ノード上のユーザーと VM イメージ上のユーザーが通信可能となります。
* 作成する実行ユーザーは [sudo] で root 権限が行使できる一般ユーザー
* 作成する実行ユーザー名と、作成の際に指定する VM イメージ用の ${guest_username} は同名にする (下例では [ubuntu])
* [git clone] はホームディレクトリ直下で実行
ubuntu@network:~$
git clone https://opendev.org/openstack/trove

ubuntu@network:~$
cd trove/integration/scripts
# 書式 : trovestack build-image ${guest_os} ${guest_os_release} ${dev_mode} ${guest_username} ${output_image_path}

# 引数を全く指定しない場合はデフォルト値として以下の値がセットされる

ubuntu@network:~/trove/integration/scripts$
./trovestack build-image ubuntu bionic true ubuntu

*******************************************************************************
Params for cmd_build_image function: ubuntu bionic true ubuntu
*******************************************************************************
[sudo] password for ubuntu:
Ensuring we have all packages needed to build image.
.....
.....
2020-10-27 05:16:52.279 | Build completed successfully
*******************************************************************************
Image /home/ubuntu/images/trove-guest-ubuntu-bionic-dev.qcow2 was built successfully.
*******************************************************************************
[2] [1] で作成した Trove 用の VM イメージを、[admin] ユーザーで認証可能な任意のノードにコピーして Glance に登録します。
また、[trove.conf] で [cinder_volume_type] に設定したボリュームタイプを作成しておきます。
root@dlp ~(keystone)#
openstack image create Trove-Ubuntu --file=trove-guest-ubuntu-bionic-dev.qcow2 --disk-format=qcow2 --container-format=bare --tag=trove --private
root@dlp ~(keystone)#
openstack image list

+--------------------------------------+--------------+--------+
| ID                                   | Name         | Status |
+--------------------------------------+--------------+--------+
| 6c287889-9a1c-4f24-bb2f-f7e786fcf677 | Trove-Ubuntu | active |
| 7ba71e53-e270-4d2a-bbe9-0d642a6c019c | Ubuntu2004   | active |
+--------------------------------------+--------------+--------+

root@dlp ~(keystone)#
openstack volume type create lvm-trove --private

+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description | None                                 |
| id          | 70494ce9-0c45-4585-a523-65e139943a6f |
| is_public   | False                                |
| name        | lvm-trove                            |
+-------------+--------------------------------------+
[3] Trove API が稼働するノード (当例では Network ノード) で、使用したいデータストアを登録しておきます。
当例では、MariaDB, MySQL, PostgreSQL をデータストアとして登録します。
# データストア登録

root@network:~#
su -s /bin/bash trove -c "trove-manage datastore_update mariadb ''"

Datastore 'mariadb' updated.
root@network:~#
su -s /bin/bash trove -c "trove-manage datastore_update mysql ''"

Datastore 'mysql' updated.
root@network:~#
su -s /bin/bash trove -c "trove-manage datastore_update postgresql ''"

Datastore 'postgresql' updated.
# 各データストアのバージョンを登録

# [6c287889-***] の部分は [2] で作成した Trove 用のイメージ ID

root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update mariadb 10.2 mariadb 6c287889-9a1c-4f24-bb2f-f7e786fcf677 mariadb 1" trove

Datastore version '10.2' updated.
root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update mariadb 10.3 mariadb 6c287889-9a1c-4f24-bb2f-f7e786fcf677 mariadb 1" trove

Datastore version '10.3' updated.
root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update mysql 5.7 mysql 6c287889-9a1c-4f24-bb2f-f7e786fcf677 mysql 1" trove

Datastore version '5.7' updated.
root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update postgresql 10 postgresql 6c287889-9a1c-4f24-bb2f-f7e786fcf677 postgresql 1" trove

Datastore version '10' updated.
root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update postgresql 12 postgresql 6c287889-9a1c-4f24-bb2f-f7e786fcf677 postgresql 1" trove

Datastore version '12' updated.
# 各データストアのバージョン用の設定パラメーターを登録

root@network:~#
su -s /bin/bash trove -c "trove-manage db_load_datastore_config_parameters mariadb 10.2 /usr/lib/python3/dist-packages/trove/templates/mariadb/validation-rules.json"

Loading config parameters for datastore (mariadb) version (10.2)
root@network:~#
su -s /bin/bash trove -c "trove-manage db_load_datastore_config_parameters mariadb 10.3 /usr/lib/python3/dist-packages/trove/templates/mariadb/validation-rules.json"

Loading config parameters for datastore (mariadb) version (10.3)
root@network:~#
su -s /bin/bash trove -c "trove-manage db_load_datastore_config_parameters mysql 5.7 /usr/lib/python3/dist-packages/trove/templates/mysql/validation-rules.json"

Loading config parameters for datastore (mysql) version (5.7)
root@network:~#
su -s /bin/bash trove -c "trove-manage db_load_datastore_config_parameters postgresql 10 /usr/lib/python3/dist-packages/trove/templates/postgresql/validation-rules.json"

Loading config parameters for datastore (postgresql) version (10)
root@network:~#
su -s /bin/bash trove -c "trove-manage db_load_datastore_config_parameters postgresql 12 /usr/lib/python3/dist-packages/trove/templates/postgresql/validation-rules.json"

Loading config parameters for datastore (postgresql) version (12)
# VM イメージ用の [cloudinit] ファイル作成

root@network:~#
mkdir /etc/trove/cloudinit

root@network:~#
vi /etc/trove/cloudinit/mariadb.cloudinit
# 新規作成

# [CONTROLLER] に Trove API ホストを指定

#cloud-config
write_files:
  - path: /etc/trove/controller.conf
    content: |
      CONTROLLER=10.0.0.50
runcmd:
  - chmod 644 /etc/trove/controller.conf

root@network:~#
cp /etc/trove/cloudinit/mariadb.cloudinit /etc/trove/cloudinit/mysql.cloudinit

root@network:~#
cp /etc/trove/cloudinit/mariadb.cloudinit /etc/trove/cloudinit/postgresql.cloudinit

root@network:~#
chown -R trove /etc/trove/cloudinit

[4] 任意のノードで、データベースインスタンスを作成します。
例として、[admin] ユーザーで MariaDB データベースインスタンスを作成します。
(デフォルトポリシーでは [admin] ユーザーのみがインスタンス作成可)
ちなみに、データベースインスタンスは VM イメージ上で Docker コンテナーとして起動します。
root@dlp ~(keystone)#
openstack datastore list

+--------------------------------------+------------+
| ID                                   | Name       |
+--------------------------------------+------------+
| a9241925-b246-4462-bd4c-859c347e3833 | postgresql |
| ae93dd0e-4ead-403f-a14e-8d317e19f9cd | mysql      |
| bf97a535-8e29-49b4-b4e4-8ea4ea6f6c9a | mariadb    |
+--------------------------------------+------------+

root@dlp ~(keystone)#
openstack datastore version list mariadb

+--------------------------------------+------+
| ID                                   | Name |
+--------------------------------------+------+
| 72bac071-d80c-411b-9e86-b4a2d56070f9 | 10.2 |
| e2a37f93-0d21-405b-b360-4dfc79fc38dc | 10.3 |
+--------------------------------------+------+

root@dlp ~(keystone)#
openstack flavor list

+----+----------+------+------+-----------+-------+-----------+
| ID | Name     |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+----------+------+------+-----------+-------+-----------+
| 0  | m1.small | 2048 |   10 |         0 |     1 | True      |
+----+----------+------+------+-----------+-------+-----------+

root@dlp ~(keystone)#
openstack subnet list

+--------------------------------------+----------------+--------------------------------------+------------------+
| ID                                   | Name           | Network                              | Subnet           |
+--------------------------------------+----------------+--------------------------------------+------------------+
| 7aa5fca7-efe4-4a30-b1f0-0653cc743a1c | public-subnet  | 5d7b1b73-602d-40e2-a82f-352991de37e0 | 10.0.0.0/24      |
| e7e82cb2-29c0-4eea-a459-e212a2bc3650 | private-subnet | 9f39959f-2f70-400c-aa80-5de54e92cf27 | 192.168.100.0/24 |
+--------------------------------------+----------------+--------------------------------------+------------------+

root@dlp ~(keystone)#
openstack network list

+--------------------------------------+---------+--------------------------------------+
| ID                                   | Name    | Subnets                              |
+--------------------------------------+---------+--------------------------------------+
| 5d7b1b73-602d-40e2-a82f-352991de37e0 | public  | 7aa5fca7-efe4-4a30-b1f0-0653cc743a1c |
| 9f39959f-2f70-400c-aa80-5de54e92cf27 | private | e7e82cb2-29c0-4eea-a459-e212a2bc3650 |
+--------------------------------------+---------+--------------------------------------+

# データベースインスタンス作成
root@dlp ~(keystone)# openstack database instance create MariaDB-103 \
--flavor 0 \
--size 10 \
--nic net-id=9f39959f-2f70-400c-aa80-5de54e92cf27 \
--databases MyDB --users serverworld:password \
--datastore mariadb --datastore-version 10.3 \
--is-public \
--allowed-cidr 10.0.0.0/24 \
--allowed-cidr 192.168.100.0/24 
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| allowed_cidrs           | ['10.0.0.0/24', '192.168.100.0/24']  |
| created                 | 2020-10-28T00:50:45                  |
| datastore               | mariadb                              |
| datastore_version       | 10.3                                 |
| encrypted_rpc_messaging | True                                 |
| flavor                  | 0                                    |
| id                      | 75817dd0-d6dd-41cf-8623-99447a97cdc0 |
| name                    | MariaDB-103                          |
| public                  | True                                 |
| region                  | RegionOne                            |
| server_id               | None                                 |
| service_status_updated  | 2020-10-28T00:50:45                  |
| status                  | BUILD                                |
| tenant_id               | b573c9e160864f028fc2d681a929f5af     |
| updated                 | 2020-10-28T00:50:45                  |
| volume                  | 10                                   |
| volume_id               | None                                 |
+-------------------------+--------------------------------------+

# 作成中は [BUILD] ステータス

root@dlp ~(keystone)#
openstack database instance list

+--------------------------------------+-------------+-----------+-------------------+--------+--------+-----------+-----------+------+------+
| ID                                   | Name        | Datastore | Datastore Version | Status | Public | Addresses | Flavor ID | Size | Role |
+--------------------------------------+-------------+-----------+-------------------+--------+--------+-----------+-----------+------+------+
| 75817dd0-d6dd-41cf-8623-99447a97cdc0 | MariaDB-103 | mariadb   | 10.3              | BUILD  | True   |           | 0         |   10 |      |
+--------------------------------------+-------------+-----------+-------------------+--------+--------+-----------+-----------+------+------+

# 作成が正常に完了すると [HEALTHY] ステータス

root@dlp ~(keystone)#
openstack database instance list

+--------------------------------------+-------------+-----------+-------------------+---------+--------
| ID                                   | Name        | Datastore | Datastore Version | Status  | Public 
+--------------------------------------+-------------+-----------+-------------------+---------+--------
| 75817dd0-d6dd-41cf-8623-99447a97cdc0 | MariaDB-103 | mariadb   | 10.3              | HEALTHY | True   
+--------------------------------------+-------------+-----------+-------------------+---------+--------
+--------------------------------------------------------------------------------------------------+-----------+------+------+
| Addresses                                                                                        | Flavor ID | Size | Role |
+--------------------------------------------------------------------------------------------------+-----------+------+------+
| [{'address': '192.168.100.183', 'type': 'private'}, {'address': '10.0.0.239', 'type': 'public'}] | 0         |   10 |      |
+--------------------------------------------------------------------------------------------------+-----------+------+------+

# アクセスして動作確認

root@dlp ~(keystone)#
mysql -h 10.0.0.239 -u serverworld -p

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.25-MariaDB-1:10.3.25+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show variables like 'hostname';
+---------------+-------------+
| Variable_name | Value       |
+---------------+-------------+
| hostname      | mariadb-103 |
+---------------+-------------+
1 row in set (0.003 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| MyDB               |
| information_schema |
+--------------------+
2 rows in set (0.003 sec)

MariaDB [(none)]> exit
Bye

# データベースインスタンスを削除する場合は以下

root@dlp ~(keystone)#
openstack database instance delete MariaDB-103

Request to delete database instance 75817dd0-d6dd-41cf-8623-99447a97cdc0 has been accepted.
[5] MySQL を起動する場合の設定です。
root@dlp ~(keystone)#
openstack datastore list

+--------------------------------------+------------+
| ID                                   | Name       |
+--------------------------------------+------------+
| a9241925-b246-4462-bd4c-859c347e3833 | postgresql |
| ae93dd0e-4ead-403f-a14e-8d317e19f9cd | mysql      |
| bf97a535-8e29-49b4-b4e4-8ea4ea6f6c9a | mariadb    |
+--------------------------------------+------------+

root@dlp ~(keystone)#
openstack datastore version list mysql

+--------------------------------------+------+
| ID                                   | Name |
+--------------------------------------+------+
| 0acb7e6b-247d-48dc-a38b-d1b79d6bff19 | 5.7  |
+--------------------------------------+------+

root@dlp ~(keystone)# openstack database instance create MySQL-57 \
--flavor 0 \
--size 10 \
--nic net-id=9f39959f-2f70-400c-aa80-5de54e92cf27 \
--databases MyDB --users serverworld:password \
--datastore mysql --datastore-version 5.7 \
--is-public \
--allowed-cidr 10.0.0.0/24 \
--allowed-cidr 192.168.100.0/24 

root@dlp ~(keystone)#
openstack database instance list

+--------------------------------------+----------+-----------+-------------------+---------+--------
| ID                                   | Name     | Datastore | Datastore Version | Status  | Public 
+--------------------------------------+----------+-----------+-------------------+---------+--------
| 708ccbfd-09c5-4f55-b571-04f20925adba | MySQL-57 | mysql     | 5.7               | HEALTHY | True   
+--------------------------------------+----------+-----------+-------------------+---------+--------
+------------------------------------------------------------------------------------------------+-----------+------+------+
| Addresses                                                                                      | Flavor ID | Size | Role |
+------------------------------------------------------------------------------------------------+-----------+------+------+
| [{'address': '192.168.100.7', 'type': 'private'}, {'address': '10.0.0.245', 'type': 'public'}] | 0         |   10 |      |
+------------------------------------------------------------------------------------------------+-----------+------+------+

root@dlp ~(keystone)#
mysql -h 10.0.0.245 -u serverworld -p -e "show variables like 'version';"

Enter password:
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 5.7.32 |
+---------------+--------+
[6] PostgreSQL を起動する場合の設定です。
root@dlp ~(keystone)#
openstack datastore list

+--------------------------------------+------------+
| ID                                   | Name       |
+--------------------------------------+------------+
| a9241925-b246-4462-bd4c-859c347e3833 | postgresql |
| ae93dd0e-4ead-403f-a14e-8d317e19f9cd | mysql      |
| bf97a535-8e29-49b4-b4e4-8ea4ea6f6c9a | mariadb    |
+--------------------------------------+------------+

root@dlp ~(keystone)#
openstack datastore version list postgresql

+--------------------------------------+------+
| ID                                   | Name |
+--------------------------------------+------+
| 43c0bad3-d384-419c-b9d8-f81a7149de5f | 10   |
| 5a0c7b53-a3d0-4b2c-b8e0-f558b545e2a0 | 12   |
+--------------------------------------+------+

root@dlp ~(keystone)# openstack database instance create PostgreSQL-12 \
--flavor 0 \
--size 10 \
--nic net-id=9f39959f-2f70-400c-aa80-5de54e92cf27 \
--databases MyDB --users serverworld:password \
--datastore postgresql --datastore-version 12 \
--is-public \
--allowed-cidr 10.0.0.0/24 \
--allowed-cidr 192.168.100.0/24 

root@dlp ~(keystone)#
openstack database instance list

+--------------------------------------+---------------+------------+-------------------+---------+--------
| ID                                   | Name          | Datastore  | Datastore Version | Status  | Public 
+--------------------------------------+---------------+------------+-------------------+---------+--------
| 87263bee-57ad-45ed-b2f2-096348e53e39 | PostgreSQL-12 | postgresql | 12                | HEALTHY | True   
+--------------------------------------+---------------+------------+-------------------+---------+--------
+--------------------------------------------------------------------------------------------------+-----------+------+------+
| Addresses                                                                                        | Flavor ID | Size | Role |
+--------------------------------------------------------------------------------------------------+-----------+------+------+
| [{'address': '192.168.100.216', 'type': 'private'}, {'address': '10.0.0.238', 'type': 'public'}] | 0         |   10 |      |
+--------------------------------------------------------------------------------------------------+-----------+------+------+

root@dlp ~(keystone)#
psql -h 10.0.0.238 -d MyDB -U serverworld -c "SELECT version();"

Password for user serverworld:
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.4 (Debian 12.4-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 row)
関連コンテンツ