Set up database replication

You can create a replica of an existing database instance. When you make subsequent changes to the original instance, the system automatically applies those changes to the replica.

  • Replicas are read-only.

  • When you create a replica, do not specify the --users or --databases options.

  • You can choose a smaller volume or flavor for a replica than for the original, but the replica’s volume must be big enough to hold the data snapshot from the original.

This example shows you how to replicate a MySQL database instance.

Set up replication

  1. Get the instance ID

    Get the ID of the original instance you want to replicate:

    $ openstack database instance list
    +-----------+------------+-----------+-------------------+--------+-----------+------+
    |     id    |  name      | datastore | datastore_version | status | flavor_id | size |
    +-----------+------------+-----------+-------------------+--------+-----------+------+
    | 97b...ae6 | base_1     |   mysql   |     mysql-5.5     | ACTIVE |     10    |  2   |
    +-----------+------------+-----------+-------------------+--------+-----------+------+
    
  2. Create the replica

    Create a new instance that will be a replica of the original instance. You do this by passing in the --replica_of option with the openstack database instance create command. This example creates a replica called replica_1. replica_1 is a replica of the original instance, base_1:

    $ openstack database instance create replica_1 6 --size=5 \
      --datastore_version mysql-5.5 \
      --datastore mysql --replica_of ID_OF_ORIGINAL_INSTANCE
    
  3. Verify replication status

    Pass in replica_1’s instance ID with the openstack database instance show command to verify that the newly created replica_1 instance is a replica of the original base_1. Note that the replica_of property is set to the ID of base_1.

    $ openstack database instance show INSTANCE_ID_OF_REPLICA_1
    +-------------------+--------------------------------------+
    | Property          | Value                                |
    +-------------------+--------------------------------------+
    | created           | 2014-09-16T11:16:49                  |
    | datastore         | mysql                                |
    | datastore_version | mysql-5.5                            |
    | flavor            | 6                                    |
    | id                | 49c6eff6-ef91-4eff-91c0-efbda7e83c38 |
    | name              | replica_1                            |
    | replica_of        | 97b4b853-80f6-414f-ba6f-c6f455a79ae6 |
    | status            | BUILD                                |
    | updated           | 2014-09-16T11:16:49                  |
    | volume            | 5                                    |
    +-------------------+--------------------------------------+
    

    Now pass in base_1’s instance ID with the openstack database instance show command to list the replica(s) associated with the original instance. Note that the replicas property is set to the ID of replica_1. If there are multiple replicas, they appear as a comma-separated list.

    $ openstack database instance show INSTANCE_ID_OF_BASE_1
    +-------------------+--------------------------------------+
    | Property          | Value                                |
    +-------------------+--------------------------------------+
    | created           | 2014-09-16T11:04:56                  |
    | datastore         | mysql                                |
    | datastore_version | mysql-5.5                            |
    | flavor            | 6                                    |
    | id                | 97b4b853-80f6-414f-ba6f-c6f455a79ae6 |
    | ip                | 172.16.200.2                         |
    | name              | base_1                               |
    | replicas          | 49c6eff6-ef91-4eff-91c0-efbda7e83c38 |
    | status            | ACTIVE                               |
    | updated           | 2014-09-16T11:05:06                  |
    | volume            | 5                                    |
    | volume_used       | 0.11                                 |
    +-------------------+--------------------------------------+
    
  4. Detach the replica

    If the original instance goes down, you can detach the replica. The replica becomes a standalone database instance. You can then take the new standalone instance and create a new replica of that instance.

    You detach a replica using the openstack database instance detach replica command:

    $ openstack database instance detach replica INSTANCE_ID_OF_REPLICA