Install the Database service This procedure installs the Database service on the controller node. Prerequisites This chapter assumes that you already have a working OpenStack environment with at least the following components installed: Compute, Image service, Identity. If you want to do backup and restore, you also need Object Storage. If you want to provision datastores on block-storage volumes, you also need Block Storage. To install the Database service on the controller: Install required packages: # apt-get install python-trove python-troveclient \ trove-common trove-api trove-taskmanager trove-conductor # yum install openstack-trove python-troveclient # zypper install openstack-trove python-troveclient Respond to the prompts for database management and [keystone_authtoken] settings, and API endpoint registration. The trove-manage db_sync command runs automatically. All configuration files should be placed at the /etc/trove directory. Edit the following configuration files, taking the below actions for each file: api-paste.ini trove.conf trove-taskmanager.conf trove-conductor.conf You need to take upstream api-paste.ini and change content below in it: [composite:trove] auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 auth_host = controller admin_tenant_name = service admin_user = trove admin_password = TROVE_PASS Edit the [DEFAULT] section of each file (except api-paste.ini) and set appropriate values for the OpenStack service URLs (can be handled by Keystone service catalog), logging and messaging configuration. Edit the [database] section in each file to add the SQL connections: [DEFAULT] log_dir = /var/log/trove trove_auth_url = http://controller:5000/v2.0 nova_compute_url = http://controller:8774/v2 cinder_url = http://controller:8776/v2 swift_url = http://controller:8080/v1/AUTH_ notifier_queue_hostname = controller [database] connection = mysql://trove:TROVE_DBPASS@controller/trove Configure the Database service to use the RabbitMQ message broker by setting the following options in the [DEFAULT] configuration group of each file: [DEFAULT] control_exchange = trove rabbit_host = controller rabbit_userid = guest rabbit_password = RABBIT_PASS rabbit_virtual_host= / rpc_backend = trove.openstack.common.rpc.impl_kombu Edit the trove.conf file so it includes appropriate values for the default datastore and network label regex as shown below: [DEFAULT] # Config option for showing the IP address that nova doles out add_addresses = True network_label_regex = ^NETWORK_LABEL$ control_exchange = trove Edit the trove-taskmanager.conf file so it includes the required settings to connect to the OpenStack Compute service as shown below: [DEFAULT] # Configuration options for talking to nova via the novaclient. # These options are for an admin user in your keystone config. # It proxy's the token received from the user to send to nova via this admin users creds, # basically acting like the client via that proxy token. nova_proxy_admin_user = admin nova_proxy_admin_pass = ADMIN_PASS tenant_id = service taskmanager_manager = trove.taskmanager.manager.Manager log_file=trove-taskmanager.log Prepare the trove admin database: $ mysql -u root -p mysql> CREATE DATABASE trove; mysql> GRANT ALL PRIVILEGES ON trove.* TO trove@'localhost' \ IDENTIFIED BY 'TROVE_DBPASS'; mysql> GRANT ALL PRIVILEGES ON trove.* TO trove@'%' \ IDENTIFIED BY 'TROVE_DBPASS'; Prepare the Database service: Initialize the database: # trove-manage db_sync Create a datastore. You need to create a separate datastore for each type of database you want to use, for example, MySQL, MongoDB, Cassandra. This example shows you how to create a datastore for a MySQL database: # su -s /bin/sh -c "trove-manage datastore_update mysql ''" trove Create a trove image. Create an image for the type of database you want to use, for example, MySQL, MongoDB, Cassandra. This image must have the trove guest agent installed, and it must have the trove-guestagent.conf file configured to connect to your OpenStack environment. To correctly configure the trove-guestagent.conf file, follow these steps on the guest instance you are using to build your image: Add the following lines to trove-guestagent.conf: rabbit_host = controller rabbit_password = RABBIT_PASS nova_proxy_admin_user = admin nova_proxy_admin_pass = ADMIN_PASS tenant_id = service trove_auth_url = http://controller:35357/v2.0 log_file = trove-guestagent.log Update the datastore and version to use the specific image with the trove-manage command. #trove-manage datastore_update datastore_name datastore_version #trove-manage datastore_version_update datastore_name version_name \ datastore_manager glance_image_id packages active This example shows you how to create a MySQL datastore with version 5.5: #trove-manage datastore_update mysql '' #trove-manage datastore_version_update mysql 5.5 mysql glance_image_ID mysql-server-5.5 1 #trove-manage datastore_update mysql 5.5 Upload post-provisioning configuration validation rules: #trove-manage db_load_datastore_config_parameters datastore_name version_name \ /etc/datastore_name/validation-rules.json Example for uploading rules for MySQL datastore: # trove-manage db_load_datastore_config_parameters \ mysql 5.5 "$PYBASEDIR"/trove/templates/mysql/validation-rules.json Source the admin credentials to gain access to admin-only CLI commands: $ source admin-openrc.sh To create the service credentials, complete these steps: Create the trove user: $ openstack user create --password-prompt trove User Password: Repeat User Password: +----------+----------------------------------+ | Field | Value | +----------+----------------------------------+ | email | None | | enabled | True | | id | a0bb962771744d63a659c540d5384b0c | | name | trove | | username | trove | +----------+----------------------------------+ Add the admin role to the trove user: $ openstack role add --project service --user trove admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | cd2cb9a39e874ea69e5d4b896eb16128 | | name | admin | +-------+----------------------------------+ Create the neutron service entity: $ openstack service create --name trove \ --description "OpenStack Database service" database +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Database service | | enabled | True | | id | 390a039be169460c994110210c620d2f | | name | trove | | type | database | +-------------+----------------------------------+ Create the Database service API endpoint: $ openstack endpoint create \ --publicurl http://controller:8779/v1.0/%\(tenant_id\)s \ --internalurl http://controller:8779/v1.0/%\(tenant_id\)s \ --adminurl http://controller:8779/v1.0/%\(tenant_id\)s \ --region RegionOne \ database +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | adminurl | http://controller:8779/v1.0/%(tenant_id)s | | id | 22db3a4e1ce1407f80dfc1fbe6c26278 | | internalurl | http://controller:8779/v1.0/%(tenant_id)s | | publicurl | http://controller:8779/v1.0/%(tenant_id)s | | region | RegionOne | | service_id | 390a039be169460c994110210c620d2f | | service_name | trove | | service_type | database | +--------------+-------------------------------------------+ Restart the Database services: # service trove-api restart # service trove-taskmanager restart # service trove-conductor restart Start the Database services and configure them to start when the system boots: # systemctl enable openstack-trove-api.service openstack-trove-taskmanager.service \ openstack-trove-conductor.service # systemctl start openstack-trove-api.service openstack-trove-taskmanager.service \ openstack-trove-conductor.service