Ubuntu 22.04
Sponsored Link

OpenStack Bobcat : How to use Trove2023/10/10

 
This is how to use Trove.
This example is based on the environment like follows.
------------+--------------------------+--------------------------+------------
            |                          |                          |
        eth0|10.0.0.30             eth0|10.0.0.50             eth0|10.0.0.51
+-----------+-----------+  +-----------+-----------+  +-----------+-----------+
|   [ dlp.srv.world ]   |  | [ network.srv.world ] |  |  [ node01.srv.world ] |
|     (Control Node)    |  |     (Network Node)    |  |     (Compute Node)    |
|                       |  |                       |  |                       |
|  MariaDB    RabbitMQ  |  |      Open vSwitch     |  |        Libvirt        |
|  Memcached  Nginx     |  |     Neutron Server    |  |      Nova Compute     |
|  Keystone   httpd     |  |      OVN-Northd       |  |      Open vSwitch     |
|  Glance     Nova API  |  |  Nginx  iSCSI Target  |  |   OVN Metadata Agent  |
|  Cinder API           |  |     Cinder Volume     |  |     OVN-Controller    |
|                       |  |     Trove Services    |  |                       |
+-----------------------+  +-----------------------+  +-----------------------+

[1] Download a VM image for Trove and add it to Glance.
Also Create a Cinder volume type configured in [trove.conf].
root@dlp ~(keystone)#
wget https://tarballs.opendev.org/openstack/trove/images/trove-master-guest-ubuntu-jammy.qcow2

root@dlp ~(keystone)#
openstack image create Trove-Ubuntu --file=trove-master-guest-ubuntu-jammy.qcow2 --disk-format=qcow2 --container-format=bare --tag=trove --private
root@dlp ~(keystone)#
openstack image list

+--------------------------------------+--------------+--------+
| ID                                   | Name         | Status |
+--------------------------------------+--------------+--------+
| 6dba2636-44e9-47ce-928c-c9487f76c021 | Trove-Ubuntu | active |
| 2216b5ad-eeb5-4b9a-b862-60b84fdfee1c | Ubuntu2204   | active |
+--------------------------------------+--------------+--------+

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

+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description | None                                 |
| id          | e494c72c-3c1e-418d-8810-679c9f5f1377 |
| is_public   | False                                |
| name        | lvm-trove                            |
+-------------+--------------------------------------+
[2] Add Datastore you'd like to use on the Node Trove API is running. (it's Network Node on this example)
For example, add MariaDB, PostgreSQL on here.
# add datastore

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 postgresql ''"

Datastore 'postgresql' updated.
# add versions for each datastore

# for [6dba2636-***], that's the image ID of Trove you created in [2]

root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update mariadb 10.6 mariadb 6dba2636-44e9-47ce-928c-c9487f76c021 mariadb 1" trove

Datastore version '10.6(10.6)' updated.
root@network:~#
su -s /bin/sh -c "trove-manage datastore_version_update postgresql 12 postgresql 6dba2636-44e9-47ce-928c-c9487f76c021 postgresql 1" trove

Datastore version '12(12)' updated.
# add parameters for each version of datastore

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

Loading config parameters for datastore (mariadb) version (10.6)
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)
# create [cloudinit] files for VM image

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

root@network:~#
vi /etc/trove/cloudinit/mariadb.cloudinit
# create new
# specify Trove API host for [CONTROLLER]

#cloud-config
runcmd:
  - echo 'CONTROLLER=network.srv.world' > /etc/trove/controller.conf
  - chmod 644 /etc/trove/controller.conf

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

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

[3] Login as any Openstack user and create a Database instance on a Node.
By the way, Database instance runs as a Docker container inside a VM instance.
ubuntu@dlp ~(keystone)$
openstack datastore list

+--------------------------------------+------------+
| ID                                   | Name       |
+--------------------------------------+------------+
| 6590920f-a855-460c-a6f8-e8ae2445f05a | postgresql |
| 7f456699-5cf6-4148-9838-a4af886fd7d6 | mariadb    |
+--------------------------------------+------------+

ubuntu@dlp ~(keystone)$
openstack datastore version list mariadb

+--------------------------------------+------+---------+
| ID                                   | Name | Version |
+--------------------------------------+------+---------+
| ddeedbe7-3643-46c7-8835-931c26af40ab | 10.6 | 10.6    |
+--------------------------------------+------+---------+

ubuntu@dlp ~(keystone)$
openstack flavor list

+----+-----------+------+------+-----------+-------+-----------+
| ID | Name      |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+------+------+-----------+-------+-----------+
| 1  | m1.small  | 2048 |   10 |         0 |     1 | True      |
| 2  | m1.medium | 4096 |   10 |         0 |     2 | True      |
| 3  | m1.large  | 8192 |   10 |         0 |     4 | True      |
| 4  | m2.large  | 8192 |   20 |         0 |     4 | True      |
+----+-----------+------+------+-----------+-------+-----------+

ubuntu@dlp ~(keystone)$
openstack network list

+--------------------------------------+---------+--------------------------------------+
| ID                                   | Name    | Subnets                              |
+--------------------------------------+---------+--------------------------------------+
| 1d42f5e1-1ff2-4f70-8c48-8c7f6eae0672 | public  | c192082c-f107-4eed-aafc-6e30b604e283 |
| 529ae54a-4bba-40a3-905d-2ca57557236a | private | e14c5e7d-41d0-4378-af0f-0993c4389593 |
+--------------------------------------+---------+--------------------------------------+

# create database instance
ubuntu@dlp ~(keystone)$ openstack database instance create MariaDB-106 \
--flavor 2 \
--size 10 \
--nic net-id=529ae54a-4bba-40a3-905d-2ca57557236a \
--databases MyDB --users serverworld:password \
--datastore mariadb --datastore-version 10.6 \
--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                  | 2023-10-10T03:20:57                  |
| datastore                | mariadb                              |
| datastore_version        | 10.6                                 |
| datastore_version_number | 10.6                                 |
| flavor                   | 2                                    |
| id                       | b394c76b-e3fd-45fe-8aa5-24a07f9ae20e |
| name                     | MariaDB-106                          |
| operating_status         |                                      |
| public                   | True                                 |
| region                   | RegionOne                            |
| service_status_updated   | 2023-10-10T03:20:57                  |
| status                   | BUILD                                |
| updated                  | 2023-10-10T03:20:57                  |
| volume                   | 10                                   |
+--------------------------+--------------------------------------+

# [BUILD] status during creation

ubuntu@dlp ~(keystone)$
openstack database instance list

+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------+-----------+-----------+------+------+
| ID                                   | Name        | Datastore | Datastore Version | Status | Operating Status | Public | Addresses | Flavor ID | Size | Role |
+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------+-----------+-----------+------+------+
| b394c76b-e3fd-45fe-8aa5-24a07f9ae20e | MariaDB-106 | mariadb   | 10.6              | BUILD  |                  | True   |           | 2         |   10 |      |
+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------+-----------+-----------+------+------+

# if successfully created, status turns to [HEALTHY]

ubuntu@dlp ~(keystone)$
openstack database instance list

+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------
| ID                                   | Name        | Datastore | Datastore Version | Status | Operating Status | Public 
+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------
| b394c76b-e3fd-45fe-8aa5-24a07f9ae20e | MariaDB-106 | mariadb   | 10.6              | ACTIVE | HEALTHY          | True   
+--------------------------------------+-------------+-----------+-------------------+--------+------------------+--------
+--------------------------------------------------------------------------------------------------------
| Addresses                                                                                              
+--------------------------------------------------------------------------------------------------------
| [{'address': '192.168.100.156', 'type': 'private', 'network': '529ae54a-4bba-40a3-905d-2ca57557236a'}, 
+--------------------------------------------------------------------------------------------------------
---------------------------------------------+-----------+------+------+
                                             | Flavor ID | Size | Role |
---------------------------------------------+-----------+------+------+
{'address': '10.0.0.244', 'type': 'public'}] | 2         |   10 |      |
---------------------------------------------+-----------+------+------+

# verify accesses

ubuntu@dlp ~(keystone)$
mysql -h 10.0.0.246 -u serverworld -p -e "show variables like 'hostname'; show databases;"

Enter password:
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| hostname      | 735d226e7528 |
+---------------+--------------+
+--------------------+
| Database           |
+--------------------+
| MyDB               |
| information_schema |
+--------------------+

# to delete a database instance, do like follows

ubuntu@dlp ~(keystone)$
openstack database instance delete MariaDB-106

Request to delete database instance b394c76b-e3fd-45fe-8aa5-24a07f9ae20e has been accepted.
[4] This is for the case to create PostgreSQL instance.
ubuntu@dlp ~(keystone)$
openstack datastore list

+--------------------------------------+------------+
| ID                                   | Name       |
+--------------------------------------+------------+
| 6590920f-a855-460c-a6f8-e8ae2445f05a | postgresql |
| 7f456699-5cf6-4148-9838-a4af886fd7d6 | mariadb    |
+--------------------------------------+------------+

ubuntu@dlp ~(keystone)$
openstack datastore version list postgresql

+--------------------------------------+------+---------+
| ID                                   | Name | Version |
+--------------------------------------+------+---------+
| fa031ab9-b596-41cc-8c4c-70ae03f6df51 | 12   | 12      |
+--------------------------------------+------+---------+

ubuntu@dlp ~(keystone)$ openstack database instance create PostgreSQL-12 \
--flavor 2 \
--size 10 \
--nic net-id=529ae54a-4bba-40a3-905d-2ca57557236a \
--databases MyDB --users serverworld:password \
--datastore postgresql --datastore-version 12 \
--datastore-version-number 12 --is-public \
--allowed-cidr 10.0.0.0/24 \
--allowed-cidr 192.168.100.0/24 

ubuntu@dlp ~(keystone)$
openstack database instance list

+--------------------------------------+---------------+------------+-------------------+--------+------------------+--------
| ID                                   | Name          | Datastore  | Datastore Version | Status | Operating Status | Public 
+--------------------------------------+---------------+------------+-------------------+--------+------------------+--------
| a5da69bb-0eb8-4277-9469-f4e309daffc5 | PostgreSQL-12 | postgresql | 12                | ACTIVE | HEALTHY          | True   
+--------------------------------------+---------------+------------+-------------------+--------+------------------+--------
+--------------------------------------------------------------------------------------------------------
| Addresses                                                                                              
+--------------------------------------------------------------------------------------------------------
| [{'address': '192.168.100.171', 'type': 'private', 'network': '529ae54a-4bba-40a3-905d-2ca57557236a'}, 
+--------------------------------------------------------------------------------------------------------
---------------------------------------------+-----------+------+------+
                                             | Flavor ID | Size | Role |
---------------------------------------------+-----------+------+------+
{'address': '10.0.0.210', 'type': 'public'}] | 2         |   10 |      |
---------------------------------------------+-----------+------+------+

ubuntu@dlp ~(keystone)$
psql -h 10.0.0.210 -d MyDB -U serverworld -c "SELECT version();"

Password for user serverworld:
                                                        version
-----------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.16 (Debian 12.16-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)
Matched Content