Consul Installation
Introduction
When using ApiOmat in a multi-server environment or when using microservice components like the Monitoring Service, a discovery service is needed to make all nodes aware of each other. Each service is announcing itself to the discovery service, which makes it possible to query for all available services in the network afterwards.
Prerequisites
Open the following ports in the firewall to other ApiOmat nodes:
-
8500 (HTTP)
-
8600 (DNS)
System requirements
(Taken from https://www.consul.io/docs/guides/deployment.html)
The following instance configurations are recommended.
|
Size |
CPU |
Memory |
Disk |
Typical Cloud Instance Types |
|
Small |
2 core |
8-16 GB RAM |
50 GB |
AWS: m5.large, m5.xlarge |
|
|
|
|
|
Azure: Standard_A4_v2, Standard_A8_v2 |
|
Large |
4-8 core |
32-64+ GB RAM |
100 GB |
AWS: m5.2xlarge, m5.4xlarge |
|
|
|
|
|
Azure: Standard_D4_v3, Standard_D5_v3 |
The small size instance configuration is appropriate for most initial production deployments, or for development/testing environments. The large size is for production environments where there is a consistently high workload.
Installation
USERNAME, PASSWORD, and TOKEN values are provided per customer from ApiOmat.
# Install the repo keysudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 4DE92D69# Add the repositoryecho "deb https://<USERNAME>:<PASSWORD>@repo.apiomat.com/yambas/rest/web/Repo/LIVE/deb ./" | sudo tee /etc/apt/sources.list.d/apiomat.list# Update APT and installapt-get updateapt-get install -y aom-consulservice consul start# Add the repositoryecho "[apiomat]name=ApiOmatbaseurl=https://<USERNAME>:<PASSWORD>@repo.apiomat.com/yambas/rest/web/Repo/LIVE/rpmgpgcheck=0enabled=1" > /etc/yum.repos.d/apiomat.repo# Installyum -y --nogpgcheck install aom-consulservice consul start# Add the repositoryzypper addrepo --no-gpgcheck https://repo.apiomat.com/yambas/rest/web/Repo/LIVE/suse?token=<TOKEN> "ApiOmat"# Refresh zypper and installzypper refreshzypper --no-gpg-checks --non-interactive install aom-consulservice consul start# Logindocker login -u <USERNAME> -p <PASSWORD># More information: https://hub.docker.com/_/consul/# Store the following file and execute:docker-compose -f consul.yml upconsul.yml:
version: '3'services: consul: image: library/consul # bind port 8500 of container to localhost port 8500 ports: - "8500:8500"-
Download file: https://repo.apiomat.com/yambas/rest/web/Repo/LIVE/aom-consul-<VERSION>.zip?token=<TOKEN> and unzip it to your installation folder.
-
To install as a service and start, open an administrative console and execute :
aom-consul-<VERSION>.exeinstallaom-consul-<VERSION>.exe startTo uninstall the service, execute :
aom-consul-<VERSION>.exe uninstall
After service start, Consul will be accessible on
Configuration
The following configuration files are provided:
%CONFIG_PATH/consul.json
The main configuration file, which contains all necessary information to start Consul in a single node environment. The most common configuration keys are:
|
Key |
Default |
Explanation |
|
data_dir |
Linux: /tmp/consul |
Place where Consul stores information about registered nodes/services |
|
bind_addr |
127.0.0.1 |
The address that should be bound to for internal cluster communications |
|
bootstrap_expect |
1 |
Number of expected Consul nodes |
|
client_addr |
127.0.0.1 |
The address to which Consul will bind client interfaces; to make e.g. the UI available on multi node setups, change to 0.0.0.0! |
More information about all possible settings can be found at the consul website.
These specific configuration are only relevant if you want to set up a cluster of consul instances. In this case please refer to hashicorp docker compose cluster example.
Environmental variables
|
Key |
Default |
Explanation |
|
CONSUL_BIND_INTERFACE |
|
The address that should be bound to for internal cluster communications |
|
CONSUL_CLIENT_INTERFACE |
|
The address to which Consul will bind client interfaces |
Arguments
|
Key |
Default |
Explanation |
|
-bootstrap-expect |
|
Number of expected Consul nodes; set to 1 on single node and to 3 on multi node setups |
|
-bind |
|
(Same as CONSUL_BIND_INTERFACE, see above) |
|
-client |
|
(Same as CONSUL_CLIENT_INTERFACE, see above) |
The container exposes its data directory, /consul/data, as a volume. This is where Consul will store its persisted state.
Mor e information about all possible settings can be found at the consul container documentation.
Cluster setup
-
An uneven node number is required ( usually 3) where Consul should be running on.
-
Install Consul on each node as described above; other services like YAMBAS or Dashboard may run on the same node as well.
-
Change bind_addr and client_addr values, in the config file 'consul.json', depending on your network setup (bind_addr should be set to the address available to other nodes).
-
Still in the 'consul.json' configuration file, set the bootstrap_expect value to the number of nodes where Consul is running.
-
Make sure that each nodes can communicate to each other through the ports used by Consul :
TCP : 8300 | 8301 | 8302 | 8400 | 8500 | 8600 UDP : 8301 | 8302 | 8600 -
Start Consul on all nodes.
-
To make all nodes find each others and elect a primary, execute on all but the first :
%INSTALL_PATH/consul join <IP_OF_THE_FIRST_NODE>
More information are provided by the consul website.
Logging
Logging is done to syslog. You can get the latest logs by executing
tail -f /var/log/syslog | grep consul#or tail -f /var/log/messages | grep consulPlease replace <CONSUL_CONTAINER_ID> with your running container ID. You can list your running container using 'docker container list' command.
docker logs -f <CONSUL_CONTAINER_ID>All logs are written to Event manager.
Next steps
Install futher microservices.