Merge "Added Percona cluster spec"
This commit is contained in:
commit
3e63adf8c9
685
specs/liberty/percona-cluster.rst
Normal file
685
specs/liberty/percona-cluster.rst
Normal file
@ -0,0 +1,685 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
Sections of this template were taken directly from the Nova spec
|
||||||
|
template at:
|
||||||
|
https://github.com/openstack/nova-specs/blob/master/specs/template.rst
|
||||||
|
..
|
||||||
|
|
||||||
|
======================================
|
||||||
|
Implement Percona cluster provisioning
|
||||||
|
======================================
|
||||||
|
|
||||||
|
To continue the Trove HA story, high availability of database instances is
|
||||||
|
required in order to give users a peace of mind when running their production
|
||||||
|
workloads in Trove. Apart from replication, clustering makes the deployment
|
||||||
|
to be highly available by allowing data to be accessed from any node in the
|
||||||
|
cluster. It enhances system uptime, it prevents from data loss and makes the
|
||||||
|
architecture more scalable for future growth. Trove Clustering for the
|
||||||
|
Percona datastore will be based on the Percona XtraDB Cluster, which is a
|
||||||
|
true Multimaster Cluster based on synchronous replication.
|
||||||
|
|
||||||
|
This change will focus on the Create, List, Show, and Delete of a Peronca
|
||||||
|
cluster. Grow and shrink of the cluster will be handled in a separate
|
||||||
|
blueprint.
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/trove/+spec/support-pxc-56
|
||||||
|
|
||||||
|
Problem Description
|
||||||
|
===================
|
||||||
|
|
||||||
|
The Percona datastore does not have support for clustering. Adding a cluster
|
||||||
|
implementation will allow users to create read and write scalable and highly
|
||||||
|
available deployments.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed Change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Percona cluster will leverage the base cluster implementation that currently
|
||||||
|
exists in Trove by creating plugabble and configurable strategies.
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
|
||||||
|
- The cluster should not have less than three nodes.
|
||||||
|
- Initial cluster creation will start with 3 or more.
|
||||||
|
- The cluster will return all IPs of its nodes.
|
||||||
|
This is done so that the cluster can be used for multi write and read.
|
||||||
|
- The name of each instance will be automatically generated;
|
||||||
|
it will be the <cluster_name>-<instance_num>.
|
||||||
|
- The clusters shall have nodes of same volumes but not for flavors.
|
||||||
|
- Clusters shall allow the instances/cluster members to be resizable for
|
||||||
|
volume and flavors. No validation will occur if a user resizes volumes
|
||||||
|
or flavors of an instance.
|
||||||
|
|
||||||
|
The following will be changed:
|
||||||
|
|
||||||
|
- A percona-cluster implementation will be added to
|
||||||
|
common/strategies/cluster/experimental/mysql/xtradbcluster
|
||||||
|
- Task manager strategy to handle the cluster provisioning for percona.
|
||||||
|
- Guestagent strategy to handle the clustering provisioning,
|
||||||
|
configuration and execution.
|
||||||
|
- Unit and integration tests.
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
A new datastore configuration section will be added. This initial
|
||||||
|
implementation will add no Percona-Cluster specific configuration
|
||||||
|
options.
|
||||||
|
|
||||||
|
Trove Integration
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The Redstack script will create a datastore configuration for
|
||||||
|
percona-cluster to open ports 3306, 4444, 4567, and 4568.
|
||||||
|
|
||||||
|
Elements will be added to support "redstack kick-start
|
||||||
|
percona-cluster-5.6".
|
||||||
|
|
||||||
|
|
||||||
|
Database
|
||||||
|
--------
|
||||||
|
|
||||||
|
This implementation will leverage the existing database schema for cluster.
|
||||||
|
|
||||||
|
Public API
|
||||||
|
----------
|
||||||
|
|
||||||
|
The API request for creating/deleting cluster will remain unchanged. However,
|
||||||
|
there will be subtle differences in the response. Percona clustering will
|
||||||
|
return all IPs of its nodes. This will be used for the user who wants to scale
|
||||||
|
read/write.
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Create Cluster
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
POST /v1.0/<tenant_id>/clusters
|
||||||
|
{
|
||||||
|
"cluster": {
|
||||||
|
"name": "products",
|
||||||
|
"datastore": {
|
||||||
|
"type": "percona",
|
||||||
|
"version": "5.5"
|
||||||
|
},
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"flavorRef": "2",
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"flavorRef": "2",
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"flavorRef": "2",
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"cluster": {
|
||||||
|
"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998",
|
||||||
|
"task": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "BUILDING",
|
||||||
|
"description": "Building the initial cluster."
|
||||||
|
},
|
||||||
|
"name": "products",
|
||||||
|
"created": "2014-04-25T20:19:23",
|
||||||
|
"updated": "2014-04-25T20:19:23",
|
||||||
|
"links": [{...}],
|
||||||
|
"datastore": {
|
||||||
|
"type": "percona",
|
||||||
|
"version": "5.5"
|
||||||
|
},
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"id": "416b0b16-ba55-4302-bbd3-ff566032e1c1",
|
||||||
|
"status": "BUILD",
|
||||||
|
"flavor": {
|
||||||
|
"id": "2",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "965ef811-7c1d-47fc-89f2-a89dfdd23ef2",
|
||||||
|
"status": "BUILD",
|
||||||
|
"flavor": {
|
||||||
|
"id": "2",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3642f41c-e8ad-4164-a089-3891bf7f2d2b",
|
||||||
|
"status": "BUILD",
|
||||||
|
"flavor": {
|
||||||
|
"id": "2",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Show Cluster
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
GET /v1.0/<tenant_id>/clusters/dfbbd9ca-b5e1-4028-adb7-f78643e17998
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"cluster": {
|
||||||
|
"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998",
|
||||||
|
"task": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "NONE",
|
||||||
|
"description": "No tasks for the cluster."
|
||||||
|
},
|
||||||
|
"name": "products",
|
||||||
|
"created": "2014-04-25T20:19:23",
|
||||||
|
"updated": "2014-04-25T20:19:23",
|
||||||
|
"links": [{...}],
|
||||||
|
"datastore": {
|
||||||
|
"type": "percona",
|
||||||
|
"version": "5.5"
|
||||||
|
},
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"id": "416b0b16-ba55-4302-bbd3-ff566032e1c1",
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.1"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"id": "965ef811-7c1d-47fc-89f2-a89dfdd23ef2",
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3642f41c-e8ad-4164-a089-3891bf7f2d2b",
|
||||||
|
"status": "BUILD",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-------------
|
||||||
|
Show Instance
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
GET /v1.0/<tenant_id>/clusters/dfbbd9ca-b5e1-4028-adb7-f78643e17998/instances/416b0b16-ba55-4302-bbd3-ff566032e1c1
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"instance": {
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"id": "416b0b16-ba55-4302-bbd3-ff566032e1c1",
|
||||||
|
"cluster_id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998",
|
||||||
|
"name": "products-1",
|
||||||
|
"created": "2014-04-25T20:19:23",
|
||||||
|
"updated": "2014-04-25T20:19:23",
|
||||||
|
"links": [{...}],
|
||||||
|
"datastore": {
|
||||||
|
"type": "percona",
|
||||||
|
"version": "5.5"
|
||||||
|
},
|
||||||
|
"ip": ["10.0.0.1"],
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}],
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100,
|
||||||
|
"used": 0.17
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-------------
|
||||||
|
List Clusters
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
GET /v1.0/<tenant_id>/clusters
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"clusters": [
|
||||||
|
{
|
||||||
|
"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998",
|
||||||
|
"task": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "NONE",
|
||||||
|
"description": "No tasks for the cluster."
|
||||||
|
},
|
||||||
|
"name": "products",
|
||||||
|
"created": "2014-04-25T20:19:23",
|
||||||
|
"updated": "2014-04-25T20:19:23",
|
||||||
|
"links": [{...}],
|
||||||
|
"ip": ["10.0.0.1", "10.0.0.2", "10.0.0.3"],
|
||||||
|
"datastore": {
|
||||||
|
"type": "percona",
|
||||||
|
"version": "5.5"
|
||||||
|
},
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"id": "416b0b16-ba55-4302-bbd3-ff566032e1c1",
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.1",
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"id": "965ef811-7c1d-47fc-89f2-a89dfdd23ef2",
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3642f41c-e8ad-4164-a089-3891bf7f2d2b",
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"flavor": {
|
||||||
|
"id": "7",
|
||||||
|
"links": [{...}]
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"size": 100
|
||||||
|
},
|
||||||
|
"ip": "10.0.0.3",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Delete Cluster
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
DELETE /v1.0/<tenant_id>/clusters/dfbbd9ca-b5e1-4028-adb7-f78643e17998
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
HTTP 202 (Empty Body)
|
||||||
|
|
||||||
|
|
||||||
|
Public API Security
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Internal API
|
||||||
|
------------
|
||||||
|
|
||||||
|
No changes in the internal API yet.
|
||||||
|
|
||||||
|
Guest Agent
|
||||||
|
-----------
|
||||||
|
|
||||||
|
No API changes in the guest agent. This feature will just be adding a new
|
||||||
|
strategy to support a different type of clustering.
|
||||||
|
|
||||||
|
|
||||||
|
CLI (python-troveclient)
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
The following illustrates the clustering CLI
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Create Cluster
|
||||||
|
--------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ trove help cluster-create
|
||||||
|
|
||||||
|
usage: trove cluster-create <name> <datastore> <datastore_version>
|
||||||
|
[--instance <instance>]
|
||||||
|
|
||||||
|
Creates a new cluster.
|
||||||
|
|
||||||
|
Positional arguments:
|
||||||
|
<name> Name of the cluster.
|
||||||
|
<datastore> A datastore name or UUID.
|
||||||
|
<datastore_version> A datastore version name or UUID.
|
||||||
|
|
||||||
|
Optional arguments:
|
||||||
|
|
||||||
|
--instance <flavor_id=flavor_id,volume=volume,parameters=<key=value>>
|
||||||
|
Create an instance for the cluster. Specify
|
||||||
|
multiple times to create multiple instances.
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
$ trove cluster-create products percona "5.5" \
|
||||||
|
--instance flavor_id=7,volume=2 \
|
||||||
|
--instance flavor_id=7,volume=2 \
|
||||||
|
--instance flavor_id=7,volume=2
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
| Property | Value |
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
| created | 2014-08-16T01:46:51 |
|
||||||
|
| datastore | percona |
|
||||||
|
| datastore_version | 5.5 |
|
||||||
|
| id | aa6ef0f5-dbef-48cd-8952-573ad881e717 |
|
||||||
|
| name | products |
|
||||||
|
| task_description | Building the initial cluster. |
|
||||||
|
| task_name | BUILDING |
|
||||||
|
| updated | 2014-08-16T01:46:51 |
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
|
||||||
|
The cluster-create command will create a cluster of functionally
|
||||||
|
equivalent trove instances. Trove will choose a instance to start with
|
||||||
|
the --wsrep-new-cluster option, then the remaining instances will be
|
||||||
|
started sequentially. The cluster will be marked ACTIVE when all
|
||||||
|
instances have started and the database is available for use.
|
||||||
|
|
||||||
|
|
||||||
|
------------
|
||||||
|
Show Cluster
|
||||||
|
------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ trove help cluster-show
|
||||||
|
|
||||||
|
usage: trove cluster-show <cluster>
|
||||||
|
|
||||||
|
Shows details of a cluster.
|
||||||
|
|
||||||
|
Positional arguments:
|
||||||
|
<cluster> ID or name of the cluster.
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
$ trove cluster-show aa6ef0f5-dbef-48cd-8952-573ad881e717
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
| Property | Value |
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
| created | 2014-08-16T01:46:51 |
|
||||||
|
| datastore | percona |
|
||||||
|
| datastore_version | 5.5 |
|
||||||
|
| id | aa6ef0f5-dbef-48cd-8952-573ad881e717 |
|
||||||
|
| ip | 10.0.0.2, 10.0.0.1, 10.0.0.3 |
|
||||||
|
| name | products |
|
||||||
|
| task_description | No tasks for the cluster. |
|
||||||
|
| task_name | NONE |
|
||||||
|
| updated | 2014-08-16T01:59:33 |
|
||||||
|
+-------------------+--------------------------------------+
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
Show Cluster Instance
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ trove help cluster-instances
|
||||||
|
|
||||||
|
usage: trove cluster-instances <cluster>
|
||||||
|
|
||||||
|
Lists all instances of a cluster.
|
||||||
|
|
||||||
|
Positional arguments:
|
||||||
|
<cluster> ID or name of the cluster.
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
$ trove cluster-instances aa6ef0f5-dbef-48cd-8952-573ad881e717
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
+-------------------------------------+----------------+-----------+------+
|
||||||
|
| ID | Name | Flavor ID | Size |
|
||||||
|
+-------------------------------------+----------------+-----------+------+
|
||||||
|
| 45532fc4-661c-4030-8ca4-18f02a2b337 | products-1 | 7 | 2 |
|
||||||
|
| 7458a98d-6f89-4dfd-bb61-5cf1d65c121 | products-2 | 8 | 2 |
|
||||||
|
| 1557208f-5c23-4537-a9f2-52a9db38d3a | products-3 | 7 | 2 |
|
||||||
|
+-------------------------------------+----------------+-----------+------+
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
List Clusters
|
||||||
|
-------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ trove help cluster-list
|
||||||
|
|
||||||
|
usage: trove cluster-list [--limit <limit>] [--marker <ID>]
|
||||||
|
|
||||||
|
Lists all the clusters.
|
||||||
|
|
||||||
|
Optional arguments:
|
||||||
|
--limit <limit> Limit the number of results displayed.
|
||||||
|
--marker <ID> Begin displaying the results for IDs greater than the
|
||||||
|
specified marker. When used with --limit, set this to
|
||||||
|
the last ID displayed in the previous run.
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
$ trove cluster-list
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
+--------+----------+-----------+-----------+----------+-----------+
|
||||||
|
| ID | Name | Datastore | DsVersion | IP | Task Name |
|
||||||
|
+--------+----------+-----------+-----------+----------+-----------+
|
||||||
|
| uuid-1 | products | percona | 5.5 | ip1 | NONE |
|
||||||
|
| uuid-2 | items | percona | 5.5 | ip2, ip3 | BUILDING |
|
||||||
|
+--------+----------+-----------+-----------+----------+-----------+
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Delete Cluster
|
||||||
|
--------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ trove help cluster-delete
|
||||||
|
|
||||||
|
usage: trove cluster-delete <cluster>
|
||||||
|
|
||||||
|
Deletes a cluster.
|
||||||
|
|
||||||
|
Positional arguments:
|
||||||
|
<cluster> ID of the cluster.
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
$ trove cluster-delete aa6ef0f5-dbef-48cd-8952-573ad881e717
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
(None)
|
||||||
|
|
||||||
|
Replication Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Due to the scope of adding a replica to a cluster this will be disabled
|
||||||
|
as part of this blueprint and added as a separate blueprint. [4]_
|
||||||
|
|
||||||
|
|
||||||
|
Python API
|
||||||
|
----------
|
||||||
|
|
||||||
|
???
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
None defined yet.
|
||||||
|
|
||||||
|
|
||||||
|
Upgrade Implications
|
||||||
|
====================
|
||||||
|
|
||||||
|
To enable MySQL cluster support, a different package will be needed to install
|
||||||
|
on the guest instance rather than the default. There are 2 ways to mitigate
|
||||||
|
this in an upgrade path.
|
||||||
|
|
||||||
|
1. Update the packages installed on the datastore version.
|
||||||
|
|
||||||
|
2. Build a new image with the new package installed into the guest image.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
+---------------+--------------+---------+--------------------+
|
||||||
|
+ Name + Launchpad Id + IRC + Email +
|
||||||
|
+===============+==============+=========+====================+
|
||||||
|
+ Steve Leon + steve-leon + esmute + kokhang@gmail.com +
|
||||||
|
+---------------+--------------+---------+--------------------+
|
||||||
|
+ Morgan Jones + 6-morgan + vgnbkr + morgan@tesora.com +
|
||||||
|
+---------------+--------------+---------+--------------------+
|
||||||
|
+ Craig Vyvial + cp16net + cp16net + cp16net@gmail.com +
|
||||||
|
+---------------+--------------+---------+--------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Milestones
|
||||||
|
----------
|
||||||
|
|
||||||
|
Liberty-3
|
||||||
|
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
- trove-integration change to add percona-xtradb-cluster-server package
|
||||||
|
- API strategy implementation
|
||||||
|
- Taskmanager strategy implementation
|
||||||
|
- Guestagent strategy implementation
|
||||||
|
- Unit and integration tests
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
There will be unit tests that test every components in the strategies.
|
||||||
|
There will be integration tests which will test end-to-end cluster features
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The response API will look different due to the nature of XtraDB clusters.
|
||||||
|
For example, the view will contain all the IPs of the instances.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
API strategy to handle clustering request for Percona. Besides the existing
|
||||||
|
API, there will be new API to grow/shrink cluster handled in another
|
||||||
|
blueprint. (bp/cluster-scaling [1]_ )
|
||||||
|
|
||||||
|
Trove does not monitor the status of cluster instances. Should an instance
|
||||||
|
in the cluster become detached from the primary instance it will be up to
|
||||||
|
the user to detect the situation and take corrective action. If the instance
|
||||||
|
does not re-attach to the cluster in a state where an Incremental State
|
||||||
|
Transfer (IST) is possible, it is suggested to delete the
|
||||||
|
instance and add a new node to the cluster. (In the future, a user will be
|
||||||
|
able to delete the instance from a cluster via the shrink action and add
|
||||||
|
a new instance to the cluster with the grow action.)
|
||||||
|
|
||||||
|
In the event of a nova compute reboot, the nodes will automatically
|
||||||
|
restart, and the cluster will automatically recover provided that the
|
||||||
|
nodes can determine that the PRIMARY component can be properly
|
||||||
|
recovered. In the case that the PRIMARY component cannot be
|
||||||
|
recovered, operator intervention would be required to manually restart
|
||||||
|
the cluster.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List of other cluster related blueprints. These blueprints will likely cause
|
||||||
|
conflicts with changes.
|
||||||
|
|
||||||
|
.. [1] bp/cluster-scaling: https://blueprints.launchpad.net/trove/+spec/cluster-scaling
|
||||||
|
.. [2] bp/mysql-manager-refactor: https://blueprints.launchpad.net/trove/+spec/mysql-manager-refactor
|
||||||
|
.. [3] bp/cluster-user-management: https://blueprints.launchpad.net/trove/+spec/cluster-user-management
|
||||||
|
.. [4] percona-xtradb-with-replica: https://blueprints.launchpad.net/trove/+spec/percona-add-replica-of-cluster
|
Loading…
Reference in New Issue
Block a user