Configuring A Production Ready HA Consul Cluster
Downloading the Web UI Files
Now that we have configured the client to serve the web UI, we need to acquire the actual files that will allow us to do this. On the consul website, right-click the link to the consul web UI and select “copy link location” or whatever similar option you have.
On the client, use su to become the consul user. We are going to set up the web directory in theconsul user’s home directory.
su consul cd ~
Now, type wget, followed by a space and paste the link you copied for the web UI download. At the time of this writing, it will look like this:
Unzip the file downloaded and remove the zip file:
unzip *.zip rm *.zip
This will create a directory called dist within your home directory. This is the directory that we pointed the web UI parameter to in the configuration file.
Before we continue, you should exit the consul user’s session to get back into the root session:
Create an Upstart Script
We now have our configuration files in place. Next, we can focus on creating an upstart script so that our consul instances are automatically started upon boot and restart in case of any problem.
Since bootstrapping a cluster is not something we will have to do often (most of the time, the cluster itself will persist and a single node may have to be restarted and rejoin the cluster), we will not factor bootstrapping into the upstart script. We will show you how to manually complete this process shortly.
Our upstart script will be similar on our servers and on the client. On one of the consul servers, create a file within the /etc/init directory to hold your consul configuration:
We will copy the contents of this file to the other servers and then use it as the basis for our client configuration as well. Within this file, the first order of business is to create a description of the process. On our server’s we’ll use:
description "Consul server process"
Next, we specify the conditions under which the process will start. For this service, we want the service to begin when the local filesystem is mounted and when the public network interface is running.
We also want to specify when the process should stop. Using the standard Linux runlevels, we can tell it to stop the process whenever it is not in one of the normal operating modes (stop the process when halting or rebooting the server):
description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345]
We can tell the init system to restart the process if it ever dies unexpectedly. We also want to specify the user and group that the process should run under. Remember, we created the consul user and group to isolate the process:
description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid consul setgid consul
Finally, we need to provide the actual command that we want to run. This will simply be the consulcommand run in agent mode. We will pass in the directory that contains our server configuration specifications as an argument to the command:
description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid consul setgid consul exec consul agent -config-dir /etc/consul.d/server
Save the file when you are finished.
Copy the contents of this file to a file called /etc/init/consul.conf on each of your servers and the client as well.
On the client, we need to modify the file just a bit. We should change the description to reference the fact that this is a client machine. We also need to change the configuration directory that is passed into the actual consul command.
The end file should look something like this:
description "Consul client process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid consul setgid consul exec consul agent -config-dir /etc/consul.d/client
Save and close the file when you are finished.