Durante os backups, preciso deixar o Apache 'inativo' para poder parar o MySQL e, em seguida, fazer backup dos bancos de dados MySQL e SQLite. O único acesso aos bancos de dados é através do Apache.
Atualmente, estou pensando em fazer isso com um script que modifique a configuração do Apache para redirecionar todos os acessos para uma página de 'site down', e então:
apache2ctl graceful
systemctl stop mysqld
No entanto, isso não parece ser uma ideia particularmente boa. graceful
não para todos os trabalhadores infantis e, presumivelmente, apache2ctl
retorna imediatamente. Este é um servidor de volume muito baixo e o backup é executado no meio da noite, em um fuso horário, e tenho certeza de que nenhuma solicitação durará mais de um minuto.
Existe uma maneira 'boa' de lidar com isso, em vez de apenas colocar um sleep 60
após o graceful
? Estou pensando que pode ser uma ideia melhor fazer um graceful-stop
e não se preocupar com uma página do site inativa, definida GracefulShutdownTimeout
para 60 e dormir por 60 também.
Os procedimentos de tempo de inatividade são relativamente fáceis quando apenas desligá-lo por uma longa janela é aceitável. Mais ou menos o que você está fazendo.
Antes do tempo de inatividade, enquanto ainda estiver em execução, considere um lembrete no site de que ele está em manutenção. As organizações variam no que esperam para isso, alguns sistemas têm um banner informando que será desativado hoje à noite, alguns têm um calendário de manutenção separado.
Como o servidor web está sendo desligado, não há muita oportunidade de mostrar uma página de manutenção. Provavelmente não se preocupe por agora. Talvez no futuro, isso esteja atrás de um balanceador de carga e isso pode mostrar uma página estática inativa enquanto as conexões estão sendo drenadas.
Quando disponível, use o mesmo gerenciador de serviço para iniciar e parar todos os aplicativos. O uso de uma ferramenta permite relatórios consistentes de status, dependências, manipulação de limpeza de paradas com falha e outros recursos. Confusamente, nem toda distro gosta de usar o programa apachectl, mas tudo bem porque como o httpd para por meio de sinais está bem documentado .
Pare a web e, em seguida, o servidor de banco de dados. Confie no gerenciador de serviços, neste caso, unidades systemd, para fornecer desligamentos relativamente suaves, semelhantes a
apachectl graceful-stop
. Leia as unidades para obter os detalhes de como elas são implementadas.Se você fizer backups copiando os arquivos de banco de dados ao vivo, tome cuidado para que nenhum processo ainda os acesse. A cópia de arquivos que ainda estão sendo gravados tem o risco de as cópias serem corrompidas e de um backup incorreto. Em situações normais, uma parada normal impedirá rapidamente novas solicitações. E sob carga leve, o trabalho de limpeza e desligamento é concluído rapidamente. A parte complicada é garantir que isso seja verdade mesmo em circunstâncias extraordinárias.
Um backup cuidadoso pode verificar se nada tem os arquivos abertos, como
fuser
em um script. Possivelmente também enviando um sinal para quaisquer processos restantes, como um SIGTERM.Exigir tempo de inatividade, além de um pouco de paranóia sobre como garantir que os arquivos sejam fechados, torna esse método de backup de cópia de arquivo não tão fácil quanto pode parecer. Considere métodos de backup on-line alternativos, como usar os métodos integrados do banco de dados para copiar seus dados ou despejar exportações para arquivos.
Para completar, outra opção é consistente, on-line, instantâneos de nível de armazenamento e copiar esses arquivos. Também evita o tempo de inatividade, mas pode ser ainda mais complicado, pois o banco de dados nunca foi encerrado. Fazer isso com segurança significa pausar as gravações e entender como os bancos de dados fazem a recuperação de inicialização.
Restaurações de teste ocasionalmente. Na verdade, restaure os dados para algum banco de dados de preparação em um ambiente de teste, inicie-o e verifique se os dados estão corretos.