Com que frequência devo reinicializar os servidores Linux?

29

Tenho muitos servidores Linux (SUSE 9 e 10) usados para executar serviços da Web que fornecem dados para grandes grades de cálculo. Recentemente tivemos algumas dificuldades em explicar as interrupções (ou seja, os logs de hardware e software não estão mostrando nenhum erro óbvio) e estamos começando a nos perguntar se o longo tempo de atividade (normalmente 200-300 dias) é o problema. Como esses servidores são muito utilizados, devo considerar um ciclo de reinicialização regular?

    
por John Channing 30.05.2009 / 21:29

11 respostas

45

Você deve reinicializar após uma atualização do kernel (a menos que esteja usando o KSplice), qualquer outra coisa é opcional. Pessoalmente eu reinicio em um ciclo mensal durante uma janela de manutenção para garantir que o servidor e todos os serviços voltem como esperado. Dessa forma, posso estar razoavelmente seguro de que tenho que fazer uma reinicialização fora do agendamento (ou seja, atualização crítica do kernel) para que o sistema volte a funcionar corretamente. O monitoramento automatizado de servidores e serviços (por exemplo, o Nagios) também ajuda muito nesse processo (reinicialize, observe as luzes ficarem vermelhas e esperamos que tudo fique verde).

P.S. se você fizer a reinicialização regularmente, você precisará certificar-se de ajustar suas verificações de fsck (ou seja, contagem máxima de monitores entre as verificações apropriadamente, caso contrário, uma reinicialização rápida de 2 minutos pode levar 30 minutos se o servidor iniciar alguns terabytes de dados. normalmente defino minha contagem de montagens como 0 (tune2fs -c 0) e o intervalo entre as verificações para 6 meses ou mais e, em seguida, force manualmente um fsck de vez em quando e redefina a contagem.

    
por 30.05.2009 / 21:33
11

Na verdade, eu reinicio meus servidores regularmente, sempre que grandes alterações de configuração são feitas. É importante saber que, em caso de emergência, o software do servidor surgirá sem problemas. A última coisa que você quer é estar em uma posição em que você está tentando se recuperar de uma interrupção, mas está tendo que mexer na configuração do seu servidor, porque você não a testou completamente quando a configurou.

    
por 30.05.2009 / 23:34
6

Os servidores Linux nunca precisam ser reinicializados a menos que você absolutamente precise alterar a versão do kernel em execução. A maioria dos problemas pode ser resolvida alterando um arquivo de configuração e reiniciando um serviço com um script de inicialização.

Você precisa estar atento a reinicializações ... se você alterou qualquer coisa "on the fly" sem refletir suas alterações no arquivo de configuração de um serviço, essas alterações não serão aplicadas após a reinicialização.

Eu normalmente reinicio depois de atualizações agendadas do sistema. Geralmente não é necessário, mas eu faço quando ninguém está no escritório, então porque não? Muitas vezes há atualizações do kernel quando eu faço a atualização, de qualquer forma.

    
por 31.05.2009 / 00:08
4

Não é realmente necessário, o manuseio de memória do Linux é excelente. Mas se você está tendo uptimes desse tamanho, provavelmente você está executando kernels que têm vulnerabilidades conhecidas - você pode querer ver isso.

    
por 30.05.2009 / 21:32
4

Eu acho que você deve reiniciar se tiver havido uma atualização do kernel recente ou uma atualização da libc. Muitas coisas estão ligadas à libc e não é realmente possível descarregar essa lib da memória completamente e substituí-la pela nova versão, a menos que você faça uma reinicialização.

Por exemplo, mesmo coisas básicas como / bin / ls e outras coisas em / bin usam libc. Se você está apenas rodando um console e usando o bash, você está usando o libc.

$ ldd /bin/bash
        linux-gate.so.1 =>  (0xffffe000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0xb8029000)
        libdl.so.2 => /lib/libdl.so.2 (0xb8025000)
        libc.so.6 => /lib/libc.so.6 (0xb7ed9000)
        /lib/ld-linux.so.2 (0xb804b000)

$ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/librt.so.1 (0xb7f3a000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f33000)
        libc.so.6 => /lib/libc.so.6 (0xb7de7000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd0000)
        /lib/ld-linux.so.2 (0xb7f61000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7dcc000)

E sim, se você alterar arquivos em /etc/init.d que afetam a inicialização de alguma forma, eu recomendaria uma reinicialização. Você não quer descobrir que cometeu um pequeno erro em um arquivo de inicialização quando precisa que as coisas voltem a funcionar rapidamente.

Se um servidor passou muitos dias sem uma reinicialização, na verdade significa que não há como ter certeza de que ele voltará a funcionar corretamente. Mais uma vez, isso ocorre porque muitos arquivos de configuração podem ter sido alterados, e ninguém o reinicializou por um longo tempo para ter certeza de que ele será ativado. Além disso, se o servidor tiver muitas atualizações e você não tiver reiniciado por um longo tempo, reinicialize antes para aplicar as atualizações, caso contrário, se houver algum problema, não foi causado por um erro de configuração há muito tempo ou pelas novas atualizações que você aplicou.

Por fim, se você reinicializar um servidor crítico após um tempo muito longo, o fsck pode significar que você terá que esperar muito tempo para que ele volte. Você pode usar o tune2fs para evitar isso, mas é uma boa ideia verificar isso regularmente, suponho. É por isso que você não deve estar em uma posição em que você depende apenas de 1 servidor e, se isso acontecer, todo o seu site desaparecerá. Você deve ter outro em standby.

    
por 31.05.2009 / 12:12
2

Outra coisa que deve ser procurada durante esse tempo de inatividade inesperado é observar exatamente como a memória e o processador estão sendo usados e por quais programas.   top deve ser capaz de determinar quais processos são os culpados pela perda de recursos e, em seguida, ser capaz de gerenciá-los diretamente. Outra ideia seria inicializar um cronjob para encerrar e reiniciar seus processos em uma programação específica.

    
por 30.05.2009 / 23:22
2

Não é uma má idéia reiniciar se tiver sido esse tempo, então você pode executar uma verificação de disco (fsck) na partição raiz. Seu argumento pode ser que isso ajuda a garantir a integridade dos dados.

    
por 31.05.2009 / 02:33
1

Um servidor Linux corretamente executado só precisa ser reinicializado para atualizações do kernel. O mesmo nem sempre pode ser dito para alguns dos softwares - por exemplo, às vezes tenho que reiniciar o apache2 ou o mailman.

    
por 30.05.2009 / 21:32
0

Minha infra-estrutura tem dois sites de dados, o alfa (onde as operações ocorrem diariamente) e o beta (o site de backup, no caso de as coisas correrem mal em alfa). Embora esse não seja o caso atualmente, estou pressionando para ter o tempo de inatividade programado no site alfa a cada 6 meses, para que possamos executar todos os serviços do beta.

Isso irá realizar duas coisas. Primeiro, isso provará que o nosso site de recuperação de desastres é completamente viável. Em segundo lugar, ele me dará uma semana inteira de tempo para remover o lixo acumulado em alfa.

Como está, não reinicio meus servidores com a frequência que deveria. Eu concordo com os outros pôsteres que disseram que é importante saber que seus servidores voltarão quando você precisar deles. Você não quer "pensar" que eles vão, apenas para descobrir que você mudou alguma coisa e não fez isso corretamente, ou não documentou.

    
por 31.05.2009 / 12:53
0

Você também pode escrever alguns scripts que verificarão (na medida do possível) se o estado atual da sua máquina será o estado da máquina após a reinicialização.

O que quero dizer com isso é ...

  • %código%
    • Verifique se todos os serviços em execução no momento estão marcados para iniciar na inicialização
    • Verifique se todos os serviços que não estão sendo executados estão sinalizados para não iniciar na inicialização
  • %código%
    • Verifique se todos os sistemas de arquivos montados (por exemplo, /etc/init.d/* ) têm uma entrada correspondente em /etc/fstab
    • Verifique se todos os sistemas de arquivos especificados para serem montados na inicialização em /etc/mtab também estão atualmente montados.

Esta não é uma verificação completa, mas reduz o risco de problemas após a reinicialização.

Além disso, você deve (imo) definir uma política para atualizações de pacotes do servidor, em alguma ordem sensata, digamos 1 grupo por semana ...

  • Crash & Gravar Servidores
  • Servidores de desenvolvimento, servidores de treinamento
  • Servidores de teste
  • Servidores de pré-produção
  • Servidores de produção

Tenha também um plano geral, como "Todos os servidores passarão por uma atualização completa do sistema operacional a cada 6 meses".

    
por 31.05.2009 / 13:45
0

Depende das tarefas em execução no servidor. Para alguns servidores virtuais, muitas vezes usamos a reinicialização em vez de reiniciar o apachectl e demora apenas de 5 a 10 segundos a mais. Mas algumas máquinas pesadas são reiniciadas várias vezes por ano, com toda uma equipe de administração monitorando o processo.

    
por 31.05.2009 / 22:42