Description
Built on top of democracy.js, healthcare.js creates a fully distributed auto-healing system to DigitalOcean setups. Simply define groups by tags and provide configs for creation of those servers. Using UDP unicast, health checks will determine when a server in the group has gone down and it will be destroyed and replaced using the given config. No need for single points of failure or additional servers to manage as healthcare.js runs on each server in the pool as a standalone Node.js service.
Installation
- Install with npm:
npm install healthcare
- Install with Yarn:
yarn add healthcare
Examples
The simplest use-case is to write a node service that defines groups of servers using healthcare. In this example, the group of test servers will be maintained at a size of 2. If one of the servers goes down or becomes unresponsive, it will be destroyed and a new one created in its place with the provided config. Simply run this service on each server (it would be a good idea to use use_data to set it up with each new server).
const Healthcare = require('healthcare');
const healthcare = new Healthcare({
key: '...',
tag: 'healthcare',
interval: 5000,
timeout: 30000,
});
healthcare.init().then(() => {
healthcare.group({
tags: ['ENV:Test', 'TYPE:Test'],
size: 2,
config: {
name: 'TEST',
region: 'nyc3',
size: 's-1vcpu-1gb',
image: 'ubuntu-16-04-x64',
ssh_keys: ['...'],
backups: false,
ipv6: false,
private_networking: true,
user_data: '',
monitoring: true,
tags: ['ENV:Test', 'TYPE:Test', 'healthcare'],
},
});
});
API
Constructor
new Healthcare({
key: 'API KEY',
tag: 'healthcare',
timeout: 60000,
interval: 10000,
port: 12345,
});
Methods
init()
Sets up the "healthcare system" by discovering all of the DigitalOcean servers with the matching tag. Everything else must happen inside of the returned promise.
group({tags = [], size = 1, floatingIp = '', config = {}})
Initialize a new group of servers. Prvide a list of tags to identify the group with, a size for the number of servers and a config to build the new servers with.
You can also optionally include a floatingIp
for the group. If this is provided, this IP will always be assigned to the current master server (useful for a cluster of load balancers for example).
Server config uses the following format:
{
name: 'NAME',
region: 'nyc3',
size: 's-1vcpu-1gb', The slug identifier for the Droplet size.
image: 'ubuntu-16-04-x64', The image ID of a private image or slug identifier of a public.
ssh_keys: [], An array of SSH key IDs or fingerprints.
backups: false,
ipv6: false,
private_networking: true,
user_data: '',
monitoring: true,
volumes: [], An array of the string identifier for each block storage volume to attach.
tags: ['healthcare'],
}
License
Copyright (c) 2018 James Simpson and GoldFire Studios, Inc.
Released under the MIT License.