Database Clusters

We currently support cluster mode for MySQL & KeyDB (Redis compatible). We are working hard on adding cluster mode support for more databases.

MySQL cluster with Multi-master or Replica mode

If you can’t afford for your database to be down for even a few minutes, a Multi-Master cluster is a great option to ensure high availability.

A multi-master scenario means that one node can be taken offline (e.g. for maintenance or upgrade purposes) without impacting availability, as the other node will continue to serve production traffic. Further, it doubles your capacity to read or write to the database and provides an additional layer of protection against data loss.

MySQL includes a Multi-Master replication, and Elestio enables you to set up your MySQL Multi-Master cluster in just a few clicks.

To begin, you will need to have deployed two MySQL instances

1) Go to elestio Dashboard > Deploy new service> Databases > select MySQL, scroll down and name it for example mysql-1 then click on the "Create service button"


Screenshot 2022-09-29 175854.png


2) Again, go to elestio Dashboard > Deploy new service> Databases > select MySQL, scroll down and name it for example mysql-2 then click on the "Create service button"

3) Wait for the 2 instances to be ready

4) In the elestio dashboard open the service details of mysql-1 and click on the "Configure cluster" button

5) Select in the partner instance dropdown "mysql-2" as the partner, then select "Multi Master" in Cluster mode, then click on "Apply changes" button

Screenshot 2022-09-29 180350.png

6) In the elestio dashboard open the service details of mysql-2 and click on the "Configure cluster" button

7) Select in the partner instance dropdown "mysql-1" as the partner, then select "Multi-Master" in Cluster mode, then click on "Apply changes" button

All done. You now have a multi-master MySQL cluster.


You can now read and write on both instances. If instance A is down you will still be able to use instance B and vice versa. Also, if you restore a backup on one instance it will be automatically replicated to the other instance.

How to use Multi-Master cluster from Node.js

If you can configure your two master clusters in Round Robin in your MySQL driver, a load balancer is not needed. The client-side will split the traffic between your instances and avoid a dead node. This helps to greatly simplify the high-availability system.

The regular MySQL driver for node.js supports this: https://www.npmjs.com/package/mysql#poolcluster


How to test your High Availability Cluster

  1. Shut down one of the VMs (instance A). You should still be able to connect, read and write on your cluster.
  2. Restart instance A, wait 30 seconds, then shut down instance B.
  3. Test your connectivity and read/write access to the cluster again.
  4. Finally, restart instance B.


How to use PHPMyAdmin to test your cluster

  1. Open the service details and click on Admin UI to get url and credentials of PHPMyAdmin.
  2. Open a browser tab with the Admin UI for instance B.
  3. Open another browser tab for instance A.
  4. Create a new database in instance A, add a table, and insert a line with sample data.
  5. Check if the database created from A is correctly replicated to instance B.
  6. Open the database in instance B.
  7. Add or edit some rows in the database on instance B and check if correctly replicated to instance A.


KeyDB (Redis compatible) with Multi-master or Replica mode

If you can’t afford for your database to be down for even a few minutes, you need a Multi-Master cluster to ensure high availability. This means that one node can be taken offline (e.g. for maintenance or upgrade purposes) without impacting availability, as the other node will continue to serve production traffic. Further, it doubles your capacity to read or write to the database and provides an additional layer of protection against data loss.

KeyDB is a fork of Redis that brings multithreading and Multi-Master replication, so you can have a highly available cluster of Redis in-memory DB. Usually setting up a cluster is a non-trivial task but in OpenVM you can do this in a few clicks.


To begin, you will need to have deployed two KeyDB instances

1) Go to elestio Dashboard > Deploy new service> Databases > select KeyDB, scroll down and name it for example keydb-1 then click on the "Create service button"

Screenshot 2022-09-29 180512.png

2) Again, go to elestio Dashboard > Deploy new service> Databases > select KeyDB, scroll down and name it for example keydb-2 then click on the "Create service button"

3) Wait for the 2 instances to be ready

4) In the elestio dashboard open the service details of keydb-1 and click on the "Configure cluster" button

Screenshot 2022-09-29 180350.png

5) Select in the partner instance dropdown "keydb-2" as the partner, then select "Multi-Master" in Cluster mode, then click on "Apply changes" button

6) In the elestio dashboard open the service details of keydb-2 and click on the "Configure cluster" button

7) Select in the partner instance dropdown "keydb-1" as the partner, then select "Multi-Master" in Cluster mode, then click on "Apply changes" button

All done. You now have a multi-master KeyDB cluster.


You can now read and write on both instances. If instance A is down you will still be able to use instance B and vice versa. Also, if you restore a backup on one instance it will be automatically replicated to the other instance.

How to use Multi-Master cluster from Node.js


////////////// NodeJS sample //////////////
const Redis = require("ioredis");
const cluster = new Redis.Cluster([
{ port: 23647, password:'FIRST_INSTANCE_PASSWORD_HERE', host: "Type_your_first_node_ip_here" },
{ port: 23647, password:'FIRST_INSTANCE_PASSWORD_HERE', host: "Type_your_second_node_ip_here" }
]);

cluster.set("foo", "bar");
cluster.get("foo", (err, res) => {
// res === 'bar'
});
////////////// ////////////// ////////////// //////////////


How to test your High Availability Cluster

  1. Shut down one of the VMs (instance A). You should still be able to connect, read and write on your cluster.
  2. Restart instance A, wait 30 seconds, then shut down instance B.
  3. Test your connectivity and read/write access to the cluster again.
  4. Finally, restart instance B.


Use Redis Insight to test your cluster

  1. Open the service details and click on Admin UI to get url and credentials of Redis Insight.
  2. Open a browser tab with the Admin UI for instance B.
  3. Open another browser tab for instance A.
  4. Go to Local Redis > Browser > Add Key.
  5. Create a key, of type String, named ‘A’, with value 100, then click on Add.
  6. Go to the other browser tab for instance A and select Local Redis > Browser > and check if you see key A with the correct value.
  7. You can also test it by modifying the A key - e.g. set another value, or by creating a new key and checking in your first tab if the change has been correctly replicated.