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 10Concedemos permissão de escrita para o script:
chmod +x /tmp/scriptCriamos o arquivo que terá o seu valor incrementado:
echo 0 > /tmp/executouRodamos 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.