Install the Database service
This procedure installs the Database module 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.
Ubuntu 14.04 Only
The Database module is only available under Ubuntu 14.04.
Packages are not available for 12.04, or via the Ubuntu Cloud
Archive.
To install the Database module on the controller:
Install required packages:
# apt-get install python-trove python-troveclient python-glanceclient \
trove-common trove-api trove-taskmanager
# yum install openstack-trove FIXME
# zypper install openstack-trove python-troveclient
Prepare OpenStack:
Source the admin-openrc.sh file.
$ source ~/admin-openrc.sh
Create a trove user that Compute uses to
authenticate with the Identity service. Use the
service tenant and give the user the
admin role:
$ keystone user-create --name=trove --pass=TROVE_PASS --email=trove@example.com
$ keystone user-role-add --user=trove --tenant=service --role=admin
Edit the the following configuration files, taking the below
actions for each file:
trove.conf
trove-taskmanager.conf
trove-conductor.conf
Edit the [DEFAULT] section of each file
for the, client URLs and logging configuration
[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/v1
swift_url = http://controller:8080/v1/AUTH_
Set these configuration keys to configure thee Database
module to use the Qpid message broker:
# openstack-config --set /etc/trove/trove-api.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-taskmaster.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-conductor.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-api.conf DEFAULT qpid_hostname controller
# openstack-config --set /etc/trove/trove-taskmaster.conf DEFAULT qpid_hostname controller
# openstack-config --set /etc/trove/trove-conductor.conf DEFAULT qpid_hostname controller
Configure the Database module to use the RabbitMQ message broker by
setting these configuration keys in the [DEFAULT]
configuration group of each file:
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS
Set these configuration keys to configure the Database module to use
the RabbitMQ message broker:
# openstack-config --set /etc/trove/trove-api.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-taskmaster.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-conductor.conf \
DEFAULT rpc_backend rabbit
# openstack-config --set /etc/trove/trove-api.conf DEFAULT rabbit_host controller
# openstack-config --set /etc/trove/trove-taskmaster.conf DEFAULT rabbit_host controller
# openstack-config --set /etc/trove/trove-conductor.conf DEFAULT rabbit_host controller
# openstack-config --set /etc/trove/trove-api.conf DEFAULT rabbit_password RABBIT_PASS
# openstack-config --set /etc/trove/trove-taskmaster.conf DEFAULT rabbit_password RABBIT_PASS
# openstack-config --set /etc/trove/trove-conductor.conf DEFAULT rabbit_password RABBIT_PASS
Edit the [keystone_authtoken] section of each file so it matches the listing shown below:
[keystone_authtoken]
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_user = trove
admin_password = TROVE_PASS
admin_tenant_name = service
auth_uri = https://controller:5000/v2.0
Edit the [database] section of each file,
adding it if necessary, so it matches the listing shown below:
[database]
connection = mysql://trove:TROVE_DBPASS@controller/trove
Edit the trove.conf file so it matches
the listing shown below:
[DEFAULT]
default_datastore = mysql
....
# Config option for showing the IP address that nova doles out
add_addresses = True
network_label_regex = ^NETWORK_LABEL$
....
# ============ notifer queue kombu connection options ========================
notifier_queue_hostname = controller
Edit the trove-taskmanager.conf file so it matches the listing 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_PASSS
nova_proxy_admin_tenant_name = service
....
# ============ notifer queue kombu connection options ========================
notifier_queue_hostname = controller
...
Create a trove_nolog.conf file:
# cp /etc/trove/trove.conf /etc/trove/trove_nolog.conf
Edit the trove_nolog.conf file:
# remove line starting with logdir and add
use_syslog=False
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 --config-file=/etc/trove/trove_nolog.conf 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:
$ trove-manage --config-file=/etc/trove/trove_nolog.conf datastore_update mysql ""
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, do 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_PASSS
nova_proxy_admin_tenant_name = service
trove_auth_url = http://controller:35357/v2.0
Update the datastore to use the new image, using the trove-manage command.
This example shows you how to create a MySQL 5.5 datastore:
# trove-manage --config-file=/etc/trove/trove.conf datastore_version_update \
mysql mysql-5.5 mysql glance_image_ID mysql-server-5.5 1
You must register the Database module with the Identity service so
that other OpenStack services can locate it. Register the
service and specify the endpoint:
$ keystone service-create --name=trove --type=database \
--description="OpenStack Database Service"
$ keystone endpoint-create \
--service-id=$(keystone service-list | awk '/ trove / {print $2}') \
--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
Start Database
services and configure them to start when the system
boots:
Restart Database services:
# service trove-api restart
# service trove-taskmanager restart
# service trove-conductor restart
# service openstack-trove-api start
# service openstack-trove-taskmanager start
# service openstack-trove-conductor start
# chkconfig openstack-trove-api on
# chkconfig openstack-trove-taskmanager on
# chkconfig openstack-trove-conductor on