Consul - Instalare, configurare server si client

Postat la Sat 07 December 2019 in tutoriale, consul

Consul este o solutie creata si dezvoltata de Hashicorp ce permite interconectarea microserviciilor in medii dinamice si autoscalabile.

Acest sistem consta din doua parti:

  • instante server ce stocheaza informatiile (se recomanda min 3 pe datacenter)
  • instante client - instalate pe fiecare masina ce ruleaza un serviciu - care comunica serverelor serviciile oferite precum si pot efectua monitorizarea acestora.

Toate aceste instante (numite si noduri) comunica si fac schimb de informatii folosind protocolul LAN GOSSIP.

Instalarea se face ca pachet binar si se descarca ca arhiva zip.

Extragem din arhiva singurul binar pe care il mutam in /usr/bin/:

cd /usr/src
curl -O https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip
unzip consul_1.6.2_linux_amd64.zip
mv consul /usr/bin/
mkdir /etc/consul.d

Creem un user dedicat cu care va rula serviciul:

sudo adduser \
    --shell /bin/bash \
    --group \
    --disabled-password \
    --home /var/consul \
    consul

Pentru o facila administrare a sistemului creem un fisier serviciu /lib/systemd/system/consul.service

[Unit]
Description=Consul server process
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/usr/bin/consul agent -config-dir /etc/consul.d
KillSignal=SIGTERM
User=consul
Group=consul

[Install]
WantedBy=multi-user.target

Creem un fisierul de configurare pentru instantele server /etc/consul.d/server.json:

{
  "bootstrap": true,
  "bind_addr": "10.209.214.89",
  "server": true,
  "datacenter": "dc1",
  "data_dir": "/var/consul",
  "log_level": "INFO",
  "enable_syslog": true,
  "rejoin_after_leave": true,
  "retry_join": [
    "10.209.214.89",
    "10.209.214.180",
    "10.209.214.225"
  ]
}

Unde:

  • bootstrap - true pentru o singura masina din cluster;
  • bind_addr - interfata pe care va asculta servciul, in cazul cand masina dispune de interfete multiple;
  • server - true pentru instantele server;
  • datacenter - numele de identificare a retelei in care ruleaza consul;
  • "enable_syslog - informatiile de log se vor salva in logul de sistemului;
  • rejoin_after_leave - serverul se va reconecta la cluster la restart;
  • retry_join - o lista cu celelalte instante server (daca le cunoastem IP/hostname);

Creem un fisier de configurare pentru instantele client /etc/consul.d/client.json:

{
  "server": false,
  "datacenter": "dc1",
  "data_dir": "/var/consul",
  "log_level": "INFO",
  "enable_syslog": true,
  "retry_join": [
    "10.209.214.89",
    "10.209.214.180",
    "10.209.214.225"
  ]
}

ori ca fisier HCL in /etc/consul.d/client.hcl:

server = false
datacenter = "dc1"
data_dir = "/var/consul"
log_level = "INFO"
enable_syslog = true
retry_join = [
    "10.209.214.89",
    "10.209.214.180",
    "10.209.214.225"
]

Mai multe optiuni si functii de configurare gasiti pe pagina dedicata.

Se recomanda ca serverul sa aiba permisa comunicarea pe porturile:

  • 8500 - HTTP API (TCP only)
  • 8501 - HTTPS API
  • 8502 - gRPC API
  • 8600 - DNS (TCP si UDP)
  • 8301 - comunicare LAN (TCP si UDP)
  • 8302 - comunicare WAN (TCP si UDP)

Pornim serviciul consul pe fiecare instanta (server/client):

systemctl start consul
systemctl enable consul

Dupa restart putem verifica statusul cluster-ului:

# consul members
Node            Address              Status  Type    Build  Protocol  DC   Segment
consul-server   10.209.214.89:8301   alive   server  1.6.2  2         dc1  <all>
consul-server2  10.209.214.180:8301  alive   server  1.6.2  2         dc1  <all>
consul-server3  10.209.214.225:8301  alive   server  1.6.2  2         dc1  <all>
consul-node1    10.209.214.170:8301  alive   client  1.6.2  2         dc1  <default>
consul-node2    10.209.214.25:8301   alive   client  1.6.2  2         dc1  <default>
consul-node3    10.209.214.214:8301  alive   client  1.6.2  2         dc1  <default>

Pentru o mai usoara vizibilitate pe langa API Consul include si o interfata web pentru vizualiazarea nodurilor/serviciilor ce se poate activa cu optiunea -ui la comanda de start

...
ExecStart=/usr/bin/consul agent -ui -config-dir /etc/consul.d