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