Using Mysos
Mysos provides a REST API for creating and managing MySQL clusters on Mesos.
Dashboard
- HTTP Method:
GET - Path:
/
The root of API endpoint is a web page that lists the managed MySQL clusters.
Creating a MySQL cluster
- HTTP Method:
POST - Path:
/clusters/<cluster_name>
Parameters
cluster_name: Required. Name of the cluster.cluster_user: Required. The user account for all MySQL instances in the cluster which as full admin privileges.num_nodes: Number of nodes in the cluster. [default: 1]size: The size of instances in the cluster as a JSON dictionary ofcpus,memanddisk.memanddiskare specified with standard data size units such asmb,gb,tb, etc. (no spaces, see the default for an example) [default:{"mem": "512mb", "disk": "2gb", "cpus": 1.0}]backup_id: An ID for the MySQL backup to restore from when the MySQL instance starts. If not specified, Mysos will start an empty MySQL instance. The format and meaning ofbackup_idis specific to the implementation ofBackupStorethat the Mysos cluster uses.
cluster_name is part of the path and the rest of the parameters are specified as form fields.
Response
A JSON object with the following fields:
cluster_password: The password for accessing the MySQL instance (associated withcluster_user).cluster_url: A URL to the ZooKeeper group for discovering the MySQL instances of this cluster. See the Service Discovery section below.
Example
# Create a cluster named 'test_cluster3' and restore from the backup 'foo/bar:201503122000'.
curl -X POST 192.168.33.7/clusters/test_cluster3 --form "cluster_user=mysos" \
--form "num_nodes=2" --form "backup_id=foo/bar:201503122000" \
--form 'size={"mem": "512mb", "disk": "3gb", "cpus": 1.0}'
# Response
{"cluster_password": "w9gMCkecsMh6sWsRdxNTa", "cluster_url": "zk://192.168.33.7:2181/mysos/discover/test_cluster3"}
Notes
- Cluster creation is asynchronous. The API call returns (with status 200) as soon as the Mysos scheduler has accepted the request. The same goes for cluster deletion.
- ZooKeeper
<cluster_url>/mastersub-group has at most one ZNode which is the master of the MySQL cluster. - ZooKeeper
<cluster_url>/slavessub-group can have multiple ZNodes which are the slaves of the MySQL cluster. - A ZNode is added to the ZooKeeper group when the instance becomes available and ready to serve traffic.
Removing a MySQL cluster
- HTTP Method:
DELETE - Path:
/clusters/<cluster_name>
Parameters
cluster_name: Name of the cluster.password: The password for the cluster returned by cluster creation call.
Response
A JSON object with:
cluster_url: A URL to the ZooKeeper group to watch for the termination of the cluster. The group ZNode is removed from ZooKeeper when the MySQL cluster is removed/terminated.
Example
# Remove a cluster named 'test_cluster3'
curl -X DELETE 192.168.33.7/cluster/test_cluster3 --form "password=w9gMCkecsMh6sWsRdxNTa"
# Response
{"cluster_url": "zk://mysos:mysos@192.168.33.7:2181/mysos/discover/test_cluster3"}
Service Discovery
Mysos' service discovery with ZooKeeper conforms to the ServerSet protocol. Each MySQL instance is represented by a ZNode with its data being a ServiceInstance serialized into JSON.
- The
Endpoint serviceEndpointfield in ServiceInstance has thehostandportthat MySQL client can connect to. - Some utilities for watching ZooKeeper and parsing the
ServiceInstances: Java src | Maven, Python src | PyPI.