TRY ME

Try Valo for free

We want to show you something amazing.

We'll send you a link to download a fully functional Valo copy to play with.



Great! Check your email and enjoy Valo



Apologies, we seem to be having a problem processing your input, please try again

Adding nodesΒΆ

Nodes can be added to the cluster at any time to provide extra storage and computing capacity.

The following must be true to add a node:

  • No other nodes may be joining or leaving
  • All nodes must be reachable (see Node failure)
  • The new nodes must not have stored data (for example writing to a stream)

Multiple nodes can be added in a single request. This leads to more optimal data transfers than adding each node incrementally.

In order to optimise the use of storage, Valo will perform data transfers from existing nodes to the new nodes. These transfers are in proportion to the amount of data stored in the cluster and will take time. The transfers are executed on a per-stream basis and whilst data is moving for a stream, new data written to the stream will not be visible in queries.

The add process cannot yet be cancelled or reversed, so be careful to check the information in the request is correct. The 1.2 release of Valo does not handle node failure during transfers so it is advisable to add nodes outside of business hours and not during periods of high load.

To add additional nodes, issue a POST using the Cluster API, including the contact details of the new nodes:

POST /cluster/nodes HTTP/1.1

{
   "nodes" : [
     {
       "name": "valo1",
       "publicKey" : "y/0L){oT1/zPPeR*Mn%BEk[$<Njz(LY/<)3S1%J0",
       "address": "localhost",
       "port": 3333
     },
     {
        "name": "valo2",
        "publicKey" : "y/0L){oT1/zPPeR*Mn%BEk[$<Njz(LY/<)3S1%J0",
        "host": "otherhost",
        "port": 3334
     }
   ]
}

The request will return once all the nodes in the cluster have seen the new nodes as Joining. It is normal for this to take several seconds.

{
  "nodes": [
    {
      "name": "valo",
      "publicKey": "NDkSJ}NVCMK1bk+k/p[?eOlkPv?USXu#*lTaP]-k",
      "address": "localhost",
      "port": 3333,
      "clusterPort": 2551,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joined",
      "available": true
    },
    {
      "name": "valo1",
      "publicKey": "y/0L){oT1/zPPeR*Mn%BEk[$<Njz(LY/<)3S1%J0",
      "address": "localhost",
      "port": 3334,
      "clusterPort": 2552,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joining",
      "available": true
    },
    {
      "name": "valo2",
      "publicKey": "!Do<)U2<8BhK)LVi4Z>lyC&{)G9(<!jd)tu@6+gv",
      "address": "otherHost",
      "port": 3334,
      "clusterPort": 2552,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joining",
      "available": true
    }
  ]
}

Once the request returns, data transfers will begin and the progress can be monitored using the Cluster API.

Once the transfers are complete, the nodes will moved to Joined. This can be verified on the /cluster end-point:

{
  "nodes": [
    {
      "name": "valo",
      "publicKey": "NDkSJ}NVCMK1bk+k/p[?eOlkPv?USXu#*lTaP]-k",
      "address": "localhost",
      "port": 3333,
      "clusterPort": 2551,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joined",
      "available": true
    },
    {
      "name": "valo1",
      "publicKey": "y/0L){oT1/zPPeR*Mn%BEk[$<Njz(LY/<)3S1%J0",
      "address": "localhost",
      "port": 3334,
      "clusterPort": 2552,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joined",
      "available": true
    },
    {
      "name": "valo2",
      "publicKey": "!Do<)U2<8BhK)LVi4Z>lyC&{)G9(<!jd)tu@6+gv",
      "address": "otherHost",
      "port": 3334,
      "clusterPort": 2552,
      "version": {
        "number": "1.2",
        "revision": "fcbd5f3978ca34a4d4a1587e9d90dc2b2b797c20"
      },
      "state": "Joined",
      "available": true
    }
  ]
}