Usando o Consul – parte 1

consul-1_abertura

Particularmente eu acho muito interessantes as ferramentas da HashiCorp, tanto que até Já escrevi alguma coisa sobre duas delas — Packer e Vagrant. Agora é vez da acrescentar o¹ Consul na lista.

E no ecossistema da HashiCorp ela é a ferramenta responsável pela descoberta, autoconfiguração e monitoramento de serviços… Quê?

(¹) Sei que deveria escrever “a Consul” pois o gênero é feminino (é a ferramenta) mas por outro lado é uma palavra na língua portuguesa de gênero masculino (é o Cônsul). Então, para não dar um nó na cabeça de ninguém usarei de “o Consul” — em todo caso é por ser o programa… 🙂

Consul, o que é?

Simplificando um pouco, o Consul funciona como um banco de dados distribuído que contém o registro de hosts, serviços e outras informações que se deseje armazenar. Ele cuida da replicação da informação no cluster e ao mesmo tempo que também a mantêm atualizada — sim, ele tanto “sabe” o tipo de informação armazenada como “conhece” o jeito de atualizá-la.

Assim provê tanto um mecanismo para descoberta de serviços (usando DNS ou HTTP para a consulta), monitoração dos mesmos (ele faz o básico mas é possível incrementar), armazenando de dados do tipo chave/valor e integrado tudo em uma só ferramenta².

consul-1_ui

Ah, ele também tem uma interface web para operação de alguns recursos mas cada coisa a seu tempo. 🙂

(²) Pois é, ele pode substituir ferramentas como Chef, Nagios ou ZooKeeper mas de acordo com a HashiCorp em Consul vs. Other Software o seu uso não exclui a nenhuma delas.

Instalação

O Consul está disponível para download em versões para FreeBSD, Linux, MacOS X, Solaris e Windows em binários de 32-bit e 64-bit para a arquitetura Intel e, no caso do FreeBSD e Linux, também para ARM 32-bit².

$ wget https://releases.hashicorp.com/consul/0.7.0/consul_0.7.0_
linux_amd64.zip
...
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 6470848 (6,2M) [application/zip]
Salvando em: “consul_0.7.0_linux_amd64.zip”
...
$ unzip consul_0.7.0_linux_amd64.zip 
Archive:  consul_0.7.0_linux_amd64.zip
  inflating: consul                  
$ file consul
consul: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
statically linked, not stripped
$ sudo mv consul /usr/local/bin/

Basicamente a instalação consiste em baixar o arquivo, descompactar e o colocar o binário no diretório da sua preferência — ou seja, em “/usr/local/bin”, “/opt/consul”, “~/bin” etc. Mas se preferir, é possível compilá-lo a partir do código fonte que está disponível no repositório do projeto.

(²) Funcionou em um Raspberry Pi mas não saberia dizer se funcionaria em outros equipamentos.

Executando o agente

Após instalado, abra um terminal e digite:

$ consul agent -dev
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
           Version: 'v0.7.0'
         Node name: 'athena'
        Datacenter: 'dc1'
            Server: true (bootstrap: false)
       Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
    Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false
             Atlas: <disabled>

==> Log data will now stream in as it occurs:
...

O parâmetro “-dev” serve para executá-lo no modo de desenvolvimento, assim ele não pedirá outros parâmetros de configuração como, por exemplo, o local onde ele armazenará sua base de dados.

Usando outro terminal é possível consultar os membros deste cluster com:

$ consul members
Node    Address         Status  Type    Build  Protocol  DC
athena  127.0.0.1:8301  alive   server  0.7.0  2         dc1

Fazer o mesmo via DNS:

$ dig @127.0.0.1 -p 8600 athena.node.consul | grep -v \;
...
athena.node.consul.    0    IN    A    127.0.0.1
...

Ou então via HTTP (a saída é um JSON):

$ curl localhost:8500/v1/catalog/nodes
[{"Node":"athena","Address":"127.0.0.1","TaggedAddresses":{"lan":
"127.0.0.1","wan":"127.0.0.1"},"CreateIndex":4,"ModifyIndex":5}]

Uma vez que um nó (um host na nomenclatura do Consul) esteja adicionado ao cluster ele passa a regularmente verificar as informações e a situação dele — lembra do que escrevi acima sobre ele armazenar e saber como atualizar as informações?

Porém há um problema aqui! Usar o endereço de loopback, o 127.0.0.1, não só não é uma boa ideia como, claro, não funcionará muito bem — Isto é um (d)efeito colateral do uso conjunto do Network Manager e meu roteador.

Mas isto é facilmente contornável bastando dizer explicitamente ao programa qual a interface de rede que ele deverá utilizar:

$ consul agent -bind=192.168.0.23 -dev
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
...
      Cluster Addr: 192.168.0.23 (LAN: 8301, WAN: 8302)
...
$  consul members
Node    Address            Status  Type    Build  Protocol  DC
athena  192.168.0.23:8301  alive   server  0.7.0  2         dc1

E assim o problema está resolvido e eu não preciso montar um servidor DNS na minha rede. 🙂

Fim da primeira parte

Para não deixar esta primeira parte colossal ela se encerra por aqui, na segunda será a vez executá-lo do jeito correto, configurá-lo melhor e criar um pequeno conjunto de nós com alguns serviços para ele tomar conta. Então, até!

Anúncios

3 comentários sobre “Usando o Consul – parte 1

  1. Pingback: Descoberta, autoconfiguração e monitoramento de serviços: usando o Consul - parte 1 - Linux em Ação XYZ

  2. Pingback: Usando o Consul – parte 2 | giovannireisnunes

  3. Pingback: Usando o Consul – parte 4 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s