Difference between revisions of "Trove-Replication-And-Clustering-API-Single"
(Created page with "== MYSQL == <br> ==== MySQL Master/Slave ==== <br> For Master/Slave, the ''server_id'' must differ, and optionally the slave can specify whether it is ''read_only'' or not to ...") |
m (Starting MongoDB) |
||
Line 1: | Line 1: | ||
− | == | + | == MySQL == |
<br> | <br> | ||
==== MySQL Master/Slave ==== | ==== MySQL Master/Slave ==== | ||
Line 536: | Line 536: | ||
<pre> | <pre> | ||
TBD | TBD | ||
+ | </pre> | ||
+ | |||
+ | == MongoDB == | ||
+ | <br> | ||
+ | To Do. | ||
+ | <br> | ||
+ | <br> | ||
+ | '''Create Initial Replica-Set''' | ||
+ | <br> | ||
+ | <br> | ||
+ | Request: | ||
+ | |||
+ | <pre> | ||
+ | POST /instances | ||
+ | { | ||
+ | "instance": { | ||
+ | "availability_zone": "us-west-1", | ||
+ | "name": "product-a", | ||
+ | "datastore": { | ||
+ | "type": "mongodb", | ||
+ | "version": "mongodb-2.0.4" | ||
+ | }, | ||
+ | "topology": { | ||
+ | "mongodb": { | ||
+ | "type": "node", | ||
+ | "replica_set": "products" | ||
+ | } | ||
+ | }, | ||
+ | "configuration": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", | ||
+ | "flavorRef": "7", | ||
+ | "volume": { | ||
+ | "size": 1 | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | Response: | ||
+ | |||
+ | <pre> | ||
+ | { | ||
+ | "instance": { | ||
+ | "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", | ||
+ | ... | ||
+ | } | ||
+ | } | ||
</pre> | </pre> |
Revision as of 01:18, 28 February 2014
MySQL
MySQL Master/Slave
For Master/Slave, the server_id must differ, and optionally the slave can specify whether it is read_only or not to avoid accidental writes.
Create Configuration-Group for Master
Request:
POST /configurations { "configuration": { "name": "config-a", "datastore": { "type": "mysql", "version": "mysql-5.5" }, "values": { "server_id": 1 } } }
Response:
{ "configuration": { "id": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "name": "config-a", "description": null, "datastore_version_id": "c5ad9638-b7a1-464b-8cef-721d8c29dbf9", "values": { "server_id": 1 } } }
Create Configuration-Group for Slave
Request:
POST /configurations { "configuration": { "name": "config-b", "datastore": { "type": "mysql", "version": "mysql-5.5" }, "values": { "server_id": 2, "read_only": true } } }
Response:
{ "configuration": { "id": "fc318e00-3a6f-4f93-af99-146b44912188", "name": "config-b", "description": null, "datastore_version_id": "c5ad9638-b7a1-464b-8cef-721d8c29dbf9", "values": { "server_id": 2, "read_only": true } } }
Notes:
- read_only here is used for illustrative purposes; it can be omitted or set to false on the slave/read-replica as desired.
Create Master
Request:
POST /instances { "instance": { "availability_zone": "us-west-1", "name": "product-a", "datastore": { "type": "mysql", "version": "mysql-5.5" }, "topology": { "mysql": { "type": "master", } }, "configuration": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "flavorRef": "7", "volume": { "size": 1 } } }
Response:
{ "instance": { "status": "BUILD", "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", "name": "product-a", "configuration": { "id": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "name": "config-a", "links": [{...}] }, ... } }
Create Slave
Request:
POST /instances { "instance": { "availability_zone": "us-west-2", "name": "product-b", "datastore": { "type": "mysql", "version": "mysql-5.5" }, "topology": { "mysql": { "type": "slave", "replicates_from": [{"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998"}] } }, "configuration": "fc318e00-3a6f-4f93-af99-146b44912188", "flavorRef": "7",, "volume": { "size": 1 } } }
Response:
{ "instance": { "status": "BUILD", "id": "061aaf4c-3a57-411e-9df9-2d0f813db859", "name": "product-b", "configuration": { "id": "fc318e00-3a6f-4f93-af99-146b44912188", "name": "config-b", "links": [{...}] }, ... } }
Notes:
- type and replicates_from will be the only supported input fields, despite replicates_to being returned in a GET /instances/<id> response
- replicates_from and replicates_to should be arrays to properly represent star + fan-in/multi-source + all-masters replication patterns (Tungsten, MySQL 5.7)
- For now, replicates_from takes a trove instance uuid, but inevitably will need to be prefixed with resource-names to support multiple dcs and sources
- Format of trove:dc:tenant:source:id/name, where source is instance, or backup or etc.
- *or* additional fields like datacenter, tenant, etc. will need to be added to each dict in replicates_from
Show Instance
Request:
GET /instances/dfbbd9ca-b5e1-4028-adb7-f78643e17998
Response:
{ "instance": { "status": "ACTIVE", "updated": "2014-02-16T03:38:49" "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", "name": "product-a", "datastore": { "version": "mysql-5.5", "type": "mysql", }, "topology": { "mysql": { "type": "master", "replicates_to": [{"id": "061aaf4c-3a57-411e-9df9-2d0f813db859"}] } }, "flavor": { "id": "7", "links": [{...}] }, "configuration": { "id": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "name": "config-a", "links": [{...}] } } }
Show Topology
Request:
GET /instances/dfbbd9ca-b5e1-4028-adb7-f78643e17998/topology
Response:
{ "instance": { "status": "ACTIVE", "updated": "2014-02-16T03:38:49" "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", "name": "product-a", "datastore": { "version": "mysql-5.5", "type": "mysql", }, "topology": { "members": [ { "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", "name": "product-a", "mysql": { "type": "master", "replicates_to": [{"id": "061aaf4c-3a57-411e-9df9-2d0f813db859"}] } }, { "id": "061aaf4c-3a57-411e-9df9-2d0f813db859", "name": "product-b", "mysql": { "type": "slave", "replicates_from": [{"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998"}] } } ] } "flavor": { "id": "7", "links": [{...}] }, "configuration": { "id": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "name": "config-a", "links": [{...}] } } }
Remove Replication (aka "Promote" to Standalone)
Request:
POST /instances/061aaf4c-3a57-411e-9df9-2d0f813db859/topology { "promote": {} }
Response:
TBD
Notes:
- The PUT /instances/<id> approach requires bloat to prevent multiple unrelated fields from changing in-tandem.
- configuration-groups uses PUT, yet things like resize use /action; no ubiquitous approach.
MySQL Master/Master
For Master/Master, the server_id must differ and the increments be offset so as to avoid collisions.
Create Configuration-Group for Master A
Request:
POST /configurations { "configuration": { ... "values": { "server_id": 1, "auto_increment_increment": 2, "auto_increment_offset": 1 }, ... } }
Response:
{ "configuration": { ... "values": { "server_id": 1, "auto_increment_increment": 2, "auto_increment_offset": 1 }, ... } }
Create Configuration-Group for Master B
Request:
POST /configurations { "configuration": { ... "values": { "server_id": 2, "auto_increment_increment": 2, "auto_increment_offset": 2 }, ... } }
Response:
{ "configuration": { ... "values": { "server_id": 2, "auto_increment_increment": 2, "auto_increment_offset": 2 }, ... } }
Create Master A
Request:
- Same as seen in Master/Slave scenario
Response:
- Same as seen in Master/Slave scenario
Create Master B
Request:
POST /instances { "instance": { ... "topology": { "mysql": { "type": "master", "join": [{"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998"}] } }, ... } }
Response:
{ "instance": { "id": "061aaf4c-3a57-411e-9df9-2d0f813db859", ... } }
Show Instance
Request:
- Same as in Master/Slave scenario
Response:
{ "instance": { ... "topology": { "mysql": { "type": "master", "join": [{"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998"}] } }, ... } }
Show Topology
Request:
- Same as in Master/Slave scenario
Response:
{ "topology": { "id": "377d54bb-9e89-4ac3-bf29-f78c2fd4faca", ... "members": [ { "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", ... "topology": { "mysql": { "type": "master", "join": [{"id": "061aaf4c-3a57-411e-9df9-2d0f813db859"}] } } }, { "id": "061aaf4c-3a57-411e-9df9-2d0f813db859", ... "topology": { "mysql": { "type": "master", "join": [{"id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998"}] } } } ] } }
Remove Replication (aka "Promote")
Request:
POST /instances/061aaf4c-3a57-411e-9df9-2d0f813db859/action { "update_topology": { "topology": { "mysql": { "type": "master", "join": [] } } } } *or* PUT /instances/061aaf4c-3a57-411e-9df9-2d0f813db859 { "instance": { "topology": { "mysql": { "type": "master", "join": [] } } } } *or* POST /instances/061aaf4c-3a57-411e-9df9-2d0f813db859/topology { "promote": {} }
Response:
TBD
MongoDB
To Do.
Create Initial Replica-Set
Request:
POST /instances { "instance": { "availability_zone": "us-west-1", "name": "product-a", "datastore": { "type": "mongodb", "version": "mongodb-2.0.4" }, "topology": { "mongodb": { "type": "node", "replica_set": "products" } }, "configuration": "b9c8a3f8-7ace-4aea-9908-7b555586d7b6", "flavorRef": "7", "volume": { "size": 1 } } }
Response:
{ "instance": { "id": "dfbbd9ca-b5e1-4028-adb7-f78643e17998", ... } }