summaryrefslogtreecommitdiff
path: root/doc/source/admin/datastore.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/admin/datastore.rst')
-rw-r--r--doc/source/admin/datastore.rst492
1 files changed, 492 insertions, 0 deletions
diff --git a/doc/source/admin/datastore.rst b/doc/source/admin/datastore.rst
new file mode 100644
index 00000000..f026d562
--- /dev/null
+++ b/doc/source/admin/datastore.rst
@@ -0,0 +1,492 @@
+.. _database:
+
+=========
+Datastore
+=========
+
+The Database service provides database management features.
+
+Introduction
+~~~~~~~~~~~~
+
+The Database service provides scalable and reliable cloud
+provisioning functionality for both relational and non-relational
+database engines. Users can quickly and easily use database features
+without the burden of handling complex administrative tasks. Cloud
+users and database administrators can provision and manage multiple
+database instances as needed.
+
+The Database service provides resource isolation at high performance
+levels, and automates complex administrative tasks such as deployment,
+configuration, patching, backups, restores, and monitoring.
+
+You can modify various cluster characteristics by editing the
+``/etc/trove/trove.conf`` file. A comprehensive list of the Database
+service configuration options is described in the `Database service
+<https://docs.openstack.org/ocata/config-reference/database.html>`_
+chapter in the *Configuration Reference*.
+
+Create a data store
+~~~~~~~~~~~~~~~~~~~
+
+An administrative user can create data stores for a variety of
+databases.
+
+This section assumes you do not yet have a MySQL data store, and shows
+you how to create a MySQL data store and populate it with a MySQL 5.5
+data store version.
+
+
+**To create a data store**
+
+#. **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 configure ``trove-guestagent.conf``,
+ add the following lines to ``trove-guestagent.conf`` on the guest
+ instance you are using to build your image:
+
+ .. code-block:: ini
+
+ rabbit_host = controller
+ rabbit_password = RABBIT_PASS
+ trove_auth_url = http://controller:35357/v2.0
+
+ This example assumes you have created a MySQL 5.5 image called
+ ``mysql-5.5.qcow2``.
+
+ .. important::
+
+ If you have a guest image that was created with an OpenStack version
+ before Kilo, modify the guest agent init script for the guest image to
+ read the configuration files from the directory ``/etc/trove/conf.d``.
+
+ For a backwards compatibility with pre-Kilo guest instances, set the
+ database service configuration options ``injected_config_location`` to
+ ``/etc/trove`` and ``guest_info`` to ``/etc/guest_info``.
+
+#. **Register image with Image service**
+
+ You need to register your guest image with the Image service.
+
+ In this example, you use the :command:`openstack image create`
+ command to register a ``mysql-5.5.qcow2`` image.
+
+ .. code-block:: console
+
+ $ openstack image create mysql-5.5 --disk-format qcow2 --container-format bare --public < mysql-5.5.qcow2
+ +------------------+------------------------------------------------------+
+ | Field | Value |
+ +------------------+------------------------------------------------------+
+ | checksum | 133eae9fb1c98f45894a4e60d8736619 |
+ | container_format | bare |
+ | created_at | 2016-12-21T12:10:02Z |
+ | disk_format | qcow2 |
+ | file | /v2/images/d1afb4f0-2360-4400-8d97-846b1ab6af52/file |
+ | id | d1afb4f0-2360-4400-8d97-846b1ab6af52 |
+ | min_disk | 0 |
+ | min_ram | 0 |
+ | name | mysql-5.5 |
+ | owner | 5669caad86a04256994cdf755df4d3c1 |
+ | protected | False |
+ | schema | /v2/schemas/image |
+ | size | 13200896 |
+ | status | active |
+ | tags | |
+ | updated_at | 2016-12-21T12:10:03Z |
+ | virtual_size | None |
+ | visibility | public |
+ +------------------+------------------------------------------------------+
+
+#. **Create the data store**
+
+ Create the data store that will house the new image. To do this, use
+ the :command:`trove-manage` :command:`datastore_update` command.
+
+ This example uses the following arguments:
+
+ .. list-table::
+ :header-rows: 1
+ :widths: 20 20 20
+
+ * - Argument
+ - Description
+ - In this example:
+ * - config file
+ - The configuration file to use.
+ - ``--config-file=/etc/trove/trove.conf``
+ * - name
+ - Name you want to use for this data store.
+ - ``mysql``
+ * - default version
+ - You can attach multiple versions/images to a data store. For
+ example, you might have a MySQL 5.5 version and a MySQL 5.6
+ version. You can designate one version as the default, which
+ the system uses if a user does not explicitly request a
+ specific version.
+ - ``""``
+
+ At this point, you do not yet have a default version, so pass
+ in an empty string.
+
+ |
+
+ Example:
+
+ .. code-block:: console
+
+ $ trove-manage --config-file=/etc/trove/trove.conf datastore_update mysql ""
+
+#. **Add a version to the new data store**
+
+ Now that you have a MySQL data store, you can add a version to it,
+ using the :command:`trove-manage` :command:`datastore_version_update`
+ command. The version indicates which guest image to use.
+
+ This example uses the following arguments:
+
+ .. list-table::
+ :header-rows: 1
+ :widths: 20 20 20
+
+ * - Argument
+ - Description
+ - In this example:
+
+ * - config file
+ - The configuration file to use.
+ - ``--config-file=/etc/trove/trove.conf``
+
+ * - data store
+ - The name of the data store you just created via
+ ``trove-manage`` :command:`datastore_update`.
+ - ``mysql``
+
+ * - version name
+ - The name of the version you are adding to the data store.
+ - ``mysql-5.5``
+
+ * - data store manager
+ - Which data store manager to use for this version. Typically,
+ the data store manager is identified by one of the following
+ strings, depending on the database:
+
+ * cassandra
+ * couchbase
+ * couchdb
+ * db2
+ * mariadb
+ * mongodb
+ * mysql
+ * percona
+ * postgresql
+ * pxc
+ * redis
+ * vertica
+ - ``mysql``
+
+ * - glance ID
+ - The ID of the guest image you just added to the Image
+ service. You can get this ID by using the glance
+ :command:`image-show` IMAGE_NAME command.
+ - bb75f870-0c33-4907-8467-1367f8cb15b6
+
+ * - packages
+ - If you want to put additional packages on each guest that
+ you create with this data store version, you can list the
+ package names here.
+ - ``""``
+
+ In this example, the guest image already contains all the
+ required packages, so leave this argument empty.
+
+ * - active
+ - Set this to either 1 or 0:
+ * ``1`` = active
+ * ``0`` = disabled
+ - 1
+
+ |
+
+ Example:
+
+ .. code-block:: console
+
+ $ trove-manage --config-file=/etc/trove/trove.conf datastore_version_update mysql mysql-5.5 mysql GLANCE_ID "" 1
+
+ **Optional.** Set your new version as the default version. To do
+ this, use the :command:`trove-manage` :command:`datastore_update`
+ command again, this time specifying the version you just created.
+
+ .. code-block:: console
+
+ $ trove-manage --config-file=/etc/trove/trove.conf datastore_update mysql mysql-5.5
+
+#. **Load validation rules for configuration groups**
+
+ .. note::
+
+ **Applies only to MySQL and Percona data stores**
+
+ * If you just created a MySQL or Percona data store, then you need
+ to load the appropriate validation rules, as described in this
+ step.
+ * If you just created a different data store, skip this step.
+
+ **Background.** You can manage database configuration tasks by using
+ configuration groups. Configuration groups let you set configuration
+ parameters, in bulk, on one or more databases.
+
+ When you set up a configuration group using the trove
+ :command:`configuration-create` command, this command compares the configuration
+ values you are setting against a list of valid configuration values
+ that are stored in the ``validation-rules.json`` file.
+
+ .. list-table::
+ :header-rows: 1
+ :widths: 20 20 20
+
+ * - Operating System
+ - Location of :file:`validation-rules.json`
+ - Notes
+
+ * - Ubuntu 14.04
+ - :file:`/usr/lib/python2.7/dist-packages/trove/templates/DATASTORE_NAME`
+ - DATASTORE_NAME is the name of either the MySQL data store or
+ the Percona data store. This is typically either ``mysql``
+ or ``percona``.
+
+ * - RHEL 7, CentOS 7, Fedora 20, and Fedora 21
+ - :file:`/usr/lib/python2.7/site-packages/trove/templates/DATASTORE_NAME`
+ - DATASTORE_NAME is the name of either the MySQL data store or
+ the Percona data store. This is typically either ``mysql`` or ``percona``.
+
+ |
+
+ Therefore, as part of creating a data store, you need to load the
+ ``validation-rules.json`` file, using the :command:`trove-manage`
+ :command:`db_load_datastore_config_parameters` command. This command
+ takes the following arguments:
+
+ * Data store name
+ * Data store version
+ * Full path to the ``validation-rules.json`` file
+
+ |
+
+ This example loads the ``validation-rules.json`` file for a MySQL
+ database on Ubuntu 14.04:
+
+ .. code-block:: console
+
+ $ trove-manage db_load_datastore_config_parameters mysql mysql-5.5 /usr/lib/python2.7/dist-packages/trove/templates/mysql/validation-rules.json
+
+#. **Validate data store**
+
+ To validate your new data store and version, start by listing the
+ data stores on your system:
+
+ .. code-block:: console
+
+ $ trove datastore-list
+ +--------------------------------------+--------------+
+ | id | name |
+ +--------------------------------------+--------------+
+ | 10000000-0000-0000-0000-000000000001 | Legacy MySQL |
+ | e5dc1da3-f080-4589-a4c2-eff7928f969a | mysql |
+ +--------------------------------------+--------------+
+
+ Take the ID of the MySQL data store and pass it in with the
+ :command:`datastore-version-list` command:
+
+ .. code-block:: console
+
+ $ trove datastore-version-list DATASTORE_ID
+ +--------------------------------------+-----------+
+ | id | name |
+ +--------------------------------------+-----------+
+ | 36a6306b-efd8-4d83-9b75-8b30dd756381 | mysql-5.5 |
+ +--------------------------------------+-----------+
+
+Data store classifications
+--------------------------
+
+The Database service supports a variety of both relational and
+non-relational database engines, but to a varying degree of support for
+each *data store*. The Database service project has defined
+several classifications that indicate the quality of support for each
+data store. Data stores also implement different extensions.
+An extension is called a *strategy* and is classified similar to
+data stores.
+
+Valid classifications for a data store and a strategy are:
+
+* Experimental
+
+* Technical preview
+
+* Stable
+
+Each classification builds on the previous one. This means that a data store
+that meets the ``technical preview`` requirements must also meet all the
+requirements for ``experimental``, and a data store that meets the ``stable``
+requirements must also meet all the requirements for ``technical preview``.
+
+**Requirements**
+
+* Experimental
+
+ A data store is considered to be ``experimental`` if it meets these criteria:
+
+ * It implements a basic subset of the Database service API including
+ ``create`` and ``delete``.
+
+ * It has guest agent elements that allow guest agent creation.
+
+ * It has a definition of supported operating systems.
+
+ * It meets the other
+ `Documented Technical Requirements <https://specs.openstack.org/openstack/trove-specs/specs/kilo/experimental-datastores.html#requirements>`_.
+
+ A strategy is considered ``experimental`` if:
+
+ * It meets the
+ `Documented Technical Requirements <https://specs.openstack.org/openstack/trove-specs/specs/kilo/experimental-datastores.html#requirements>`_.
+
+* Technical preview
+
+ A data store is considered to be a ``technical preview`` if it meets the
+ requirements of ``experimental`` and further:
+
+ * It implements APIs required to plant and start the capabilities of the
+ data store as defined in the
+ `Datastore Compatibility Matrix <https://wiki.openstack.org/wiki/Trove/DatastoreCompatibilityMatrix>`_.
+
+ .. note::
+
+ It is not required that the data store implements all features like
+ resize, backup, replication, or clustering to meet this classification.
+
+ * It provides a mechanism for building a guest image that allows you to
+ exercise its capabilities.
+
+ * It meets the other
+ `Documented Technical Requirements <https://specs.openstack.org/openstack/trove-specs/specs/kilo/experimental-datastores.html#requirements>`_.
+
+ .. important::
+
+ A strategy is not normally considered to be ``technical
+ preview``.
+
+* Stable
+
+ A data store or a strategy is considered ``stable`` if:
+
+ * It meets the requirements of ``technical preview``.
+
+ * It meets the other
+ `Documented Technical Requirements <https://specs.openstack.org/openstack/trove-specs/specs/kilo/experimental-datastores.html#requirements>`_.
+
+**Initial Classifications**
+
+The following table shows the current classification assignments for the
+different data stores.
+
+.. list-table::
+ :header-rows: 1
+ :widths: 30 30
+
+ * - Classification
+ - Data store
+ * - Stable
+ - MySQL
+ * - Technical Preview
+ - Cassandra, MongoDB
+ * - Experimental
+ - All others
+
+Redis data store replication
+----------------------------
+
+Replication strategies are available for Redis with
+several commands located in the Redis data store
+manager:
+
+- :command:`create`
+- :command:`detach-replica`
+- :command:`eject-replica-source`
+- :command:`promote-to-replica-source`
+
+Additional arguments for the :command:`create` command
+include :command:`--replica_of` and
+:command:`--replica_count`.
+
+Redis integration and unit tests
+--------------------------------
+
+Unit tests and integration tests are also available for
+Redis.
+
+#. Install trovestack:
+
+ .. code-block:: console
+
+ $ ./trovestack install
+
+ .. note::
+
+ Trovestack is a development script used for integration
+ testing and Database service development installations.
+ Do not use Trovestack in a production environment. For
+ more information, see `the Database service
+ developer docs <https://docs.openstack.org/developer/trove/dev/install.html#running-trovestack-to-setup-trove>`_
+
+#. Start Redis:
+
+ .. code-block:: console
+
+ $ ./trovestack kick-start redis
+
+#. Run integration tests:
+
+ .. code-block:: console
+
+ $ ./trovestack int-tests --group=replication
+
+ You can run :command:`--group=redis_supported`
+ instead of :command:`--group=replication` if needed.
+
+Configure a cluster
+~~~~~~~~~~~~~~~~~~~
+
+An administrative user can configure various characteristics of a
+MongoDB cluster.
+
+**Query routers and config servers**
+
+**Background.** Each cluster includes at least one query router and
+one config server. Query routers and config servers count against your
+quota. When you delete a cluster, the system deletes the associated
+query router(s) and config server(s).
+
+**Configuration.** By default, the system creates one query router and
+one config server per cluster. You can change this by editing
+the ``/etc/trove/trove.conf`` file. These settings are in the
+``mongodb`` section of the file:
+
+.. list-table::
+ :header-rows: 1
+ :widths: 30 30
+
+ * - Setting
+ - Valid values are:
+
+ * - num_config_servers_per_cluster
+ - 1 or 3
+
+ * - num_query_routers_per_cluster
+ - 1 or 3