quarta-feira, 6 de maio de 2015

Alta disponibilidade em containers docker

quarta-feira, 6 de maio de 2015
Docker é realmente uma ferramenta incrível, estou construindo um cluster apache mesos de alta disponibilidade e tudo o que preciso é o docker, estou usando uma feature interessante do docker que é a possibilidade de reiniciar serviços que falham.

Em um cluster apache mesos, a idéia é abraçar a falha, o marathon da mesosphere é um framework que garante a alta disponibilidade das aplicações que estão sendo lançadas reiniciando as mesmas se por algum motivo elas caem, entretanto, quem garante a alta disponibilidade das aplicações que administram o cluster?

Neste ponto estou realmente apaixonado sobre o docker, vejam bem o teste que fiz para mostrar o seu poder.

Criei um script que simplesmente incrementa o conteúdo do arquivo e espera 10 segundos, ao rodar este script no docker fiz assim:

arquivo /ṭmp/script:
#!/bin/sh
echo $(($(cat /tmp/executou) + 1)) > /tmp/executou
sleep 10
Concedemos permissão de escrita para o script:
chmod +x /tmp/script 
Criamos o arquivo que terá o seu valor incrementado:
echo 0 > /tmp/executou
Rodamos o script usando o docker:
docker run -v /tmp:/tmp -dt ubuntu /tmp/script

Ao rodar o container, a imagem executa e logo em seguida sai, normalmente, quando olhamos o arquivo /tmp/executou, o conteudo dele agora é 1, ou seja executou 1 vez.

Agora imagine que este script na verdade seja um serviço critico sendo executado, como garantir a alta disponibilidade, reiniciando o serviço em caso de queda?

simples use a feature do docker --restart=always

docker run -v /tmp:/tmp --restart=always -dt ubuntu /tmp/script


Você verá que o script não para de ser executado, quando ele sai por ter encerrado o tempo, o docker reinicia automaticamente o serviço.

Vejam que isso ocorre mesmo se parar o docker (lógico que o container morre rsrsrs):

stop docker
start docker 

Ao iniciar o docker novamente o serviço está lá novamente, rodando, assim garante-se a alta disponibilidade dos containers em execução.

Realmente o docker é demais.

Espero que tenham gostado da dica.


Nenhum comentário :