Postmortem 18/05/2020: reboot inesperado, crontab zoado, glusterfs não montado

Métricas

  • Tempo fora do ar: 9 minutos
  • Serviços afetados: T O D O S
  • O quão foi afetado?: Queda total

O que aconteceu

Estávamos felizes e contentes em uma de nossas discussões diárias sobre qual editor de texto serviço de comunicação utilizar, quando de repente recebemos uma mensagem da nossa querida Ada, que é um bot de telegram que monitora os serviços e repositórios do IMEsec:

processo de resolução

0. O que sabíamos

A primeira coisa a ser feita foi verificar se foi só a Ada que caiu ou se houve algum problema no servidor. Uma rápida visita a imesec.ime.usp.br nos disse que nem o servidor de DNS sobreviveu.

Logo que logamos no servidor por SSH ficou claro o problema: ele reiniciou inesperadamente e o GlusterFS não conseguiu auto-montar, e portanto nenhum container conseguiu subir.

1. desescalando o problema

Como foi só uma falha em inicializar, a solução foi simples: iniciar manualmente o GlusterFS e subir nossos serviços.

Isso se resume a dois comandos:

mount -t glusterfs localhost:services /services && docker-compose up -d

E com isso tudo voltou ao normal :)

Analisando o ponto de falha

O GlusterFS não está listado em nossa /etc/fstab pois caso algum problema desse tipo ocorresse, o sistema inicializaria em modo de recuperação sem rodar nenhum serviço, então não conseguiríamos conectar por SSH.

A solução temporária pra isso foi colocar a linha @reboot sleep 20 && mount -t glusterfs localhost:services /services na crontab de root, para esperar alguns segundos para a stack de rede inicializar e em seguida montar o GlusterFS. Mas como já dizia Alan Turin: "Não há nada mais permanente do que uma solução temporária" [citation needed], então ela ficou lá. Eventualmente a stack de rede demorou um pouco mais de 20 segundos para subir e deu ruim.

A solução certa seria provavelmente fazer uma unidade do systemd e colocar a stack de rede como dependência.

O que foi feito?

-	@reboot sleep 20 && mount -t glusterfs localhost:services /services
+ 	@reboot sleep 60 && mount -t glusterfs localhost:services /services

Follow-ups

Ainda não sabemos ao certo o motivo do servidor ter reiniciado, mas suspeitamos do hardware pré histórico, pois ao ver o arquivo /var/log/syslog percebemos que ele estava corrompido logo antes da inicialização (depois que reiniciou):

TO BE CONTINUED.... I hope......