Usar um balanceador de carga é uma boa ideia. Se o site for importante o suficiente para se preocupar com alguns segundos de inatividade, é importante se preocupar com a tolerância a falhas.
Além disso, se estiver em um sistema UNIX, você pode colocar o Apache em espera durante a renomeação (ou atualização de link simbólico, etc.):
killall -STOP httpd # Pause all httpd processes
mv public_html public_html_orig
mv public_html_new public_html
killall -CONT httpd # Resume all httpd processes
Isso impedirá que o Apache aceite novas solicitações durante a renomeação. Se você prefere links simbólicos ou alguma outra abordagem, a mesma ideia pode ser usada:
killall -STOP httpd # Pause all httpd processes
rm /var/www/html
ln -s /var/www/version/03 /var/www/html
killall -CONT httpd # Resume all httpd processes
Observe que qualquer conexão ou pacote pendente entrará na fila no sistema operacional. Para um site extremamente ocupado, considere ajustar o ListenBacklog, se apropriado para o tipo de trabalhador httpd, e verifique as configurações do sistema operacional relacionadas ao backlog de escuta do TCP.
Você também pode alterar o DocumentRoot no httpd.conf e fazer uma reinicialização normal ( apachectl graceful
). A desvantagem aqui é o aumento do risco de erros, já que você teria que atualizar qualquer configuração Directory
.