Como minimizar as reinicializações do servidor Linux

7

Na semana passada houve alguns comentários sobre um artigo do slashdot sobre se as máquinas Unix (ou Linux) precisam ser reinicializadas. Mais do que alguns dos comentadores mencionaram ter máquinas com uptimes de vários anos.

Pelo que entendi, as caixas de Linux precisam ser reinicializadas com bastante frequência para aplicar patches de kernel, especialmente aqueles relacionados à segurança (como o ac1db1tch3z explorar . Executar uname -r depois de um 'yum update kernel' parece mostrar que o kernel antigo não está carregado até a reinicialização.

A minha pergunta é: como é que estas caixas alcançam uptime de vários anos? Algumas soluções possíveis que pensei em

  1. As máquinas não são produzidas e / ou expostas aos usuários, portanto, as correções de segurança não são tão preocupantes.
  2. Todos os pôsteres estão usando serviços de correção ao vivo, como Ksplice
  3. Os patches de segurança do kernel podem ser aplicados recarregando módulos em vez do kernel inteiro.
  4. uname -r está refletindo informações incorretas após um patch de kernel, e o kernel atualizado é carregado depois de tudo.

Alguma dessas explicações é razoável ou há algo que me falta no meu entendimento? Existe outra maneira de minimizar as duas dúzias de reinicializações necessárias nos últimos dois anos?

    
por Beerey 04.03.2011 / 03:30

7 respostas

2

Eu acho que a única vez que alguém precisa reiniciar a máquina Linux é substituir o kernel. Eu tenho várias máquinas funcionando por mais de 2 anos, mas eu as mantenho com base no princípio "Se não está quebrado, não conserte" e é assim que eu alcanço o tempo de atividade. É claro que, se seus servidores forem expostos a ameaças externas, você precisará aplicar correções de segurança periodicamente, e algumas delas exigirão um novo kernel. Eu não estou ciente de qualquer maneira de fazê-lo de forma confiável sem reiniciar a máquina. Pode haver alguns truques aqui, mas há uma boa chance de comprometer a estabilidade no processo e você precisará levar a máquina para um modo de usuário único. Tecnicamente, você alcançará o tempo de atividade, mas a máquina não estará disponível para os usuários finais durante esse tempo, então qual é o objetivo?

Se o tempo de atividade for realmente crítico para você, talvez você esteja interessado em alguma forma de solução de armazenamento em cluster / HA quando você puder reinicializar um nó de um cluster sem afetar a disponibilidade de todo o sistema. Caso contrário, basta reiniciar.

    
por 04.03.2011 / 04:03
9

Uma solução é usar o ksplice.

Se você usa kernels do Ubuntu ou do CentOS, pode se inscrever no serviço ksplice.com, onde por uma pequena taxa eles fornecerão imagens especiais do kernel que podem ser usadas para corrigir um kernel em execução. As reinicializações não são necessárias para a maioria das atualizações. Muito fácil de usar e configurar.

Se você é particularmente habilidoso, você pode usar os patches do ksplice para construir seus próprios kernels habilitados sem se inscrever no serviço, ou para kernels não-padrão.

    
por 04.03.2011 / 04:19
8

Eu tenho servidores com mais de 1 ano de atividade. Não é a melhor prática porque, do ponto de vista da segurança, o servidor ... alguns desses servidores eram mestres de banco de dados e não podíamos ter tempo de inatividade.

Acho que a segurança deve ser a principal preocupação, mas há algumas limitações do mundo real. Se você tiver o patch de luxo e reiniciá-lo, se necessário. Não se preocupe com o tempo de atividade, é melhor prevenir do que remediar.

Eu sugiro sempre reinicializar um servidor após uma grande atualização para garantir que ele volte, você não quer ser pego em uma situação após uma reinicialização inesperada.

    
por 04.03.2011 / 03:48
3

Nossa loja tem uma política muito boa sobre correção / reinicialização. A importância de se manter seguro supera a estatística de tempo de atividade. Nós temos uma rotina regular de correção que funciona para garantir que não estamos sendo pegos em uma situação de Bad Things Happen.

Nossa mudança para a computação em cluster ajudou a garantir que as coisas importantes se mantenham atualizadas e que o trabalho para obter a configuração tenha valido a pena.

Se o tempo de funcionamento for importante para manter o serviço para os clientes, então você deve estar olhando para o balanceamento de carga e clustering. Você pode manter um ambiente seguro e redundante, bem como o tempo de atividade do serviço.

Se você está sacrificando a segurança por direitos de bracing, provavelmente está fazendo um desserviço aos seus clientes.

    
por 04.03.2011 / 05:04
2

Minimizar o tempo de inatividade é mais importante do que minimizar as reinicializações. Como Sameer disse, não acompanhar seus patches do kernel é Uma Coisa Má. Tenho o luxo de ter balanceadores de carga (principalmente porque muitas das coisas que meu empregador faz é na nuvem), por isso fazemos atualizações contínuas - o que me permite atualizar o AppServer-1, retirá-lo do balanceador de carga, reinicializar, fazer Certifique-se de que tudo está OK, diga ao LB, "OK cara AS-1 está de volta!", então continue com o resto das máquinas.

    
por 04.03.2011 / 04:04
1

Quanto menos coisas você instalou, menor a probabilidade de precisar de algo corrigido. Minimizar sua instalação (ou como eu gosto de pensar sobre isso: a superfície de ataque), pode ir longe. Isto não é apenas para pacotes, mas também para configurações de kernel. Atualmente, a maioria das distros é compilada com todos os módulos possíveis, o que está longe de ser ideal. Os kernels personalizados podem ser difíceis de manter, mas também podem compensar, pois você sabe exatamente o que está lá e reduz ainda mais a probabilidade de precisar de patches.

    
por 04.03.2011 / 15:00
1

(Divulgação: trabalho para a Canonical)

Para o Ubuntu especificamente, a Canonical agora oferece correção de kernel ao vivo no 16.04.

Isso usa a tecnologia de atualização ao vivo no kernel do Linux desde que o 4.0 foi lançado.

    
por 20.10.2016 / 18:58