Atualizando a produção O Ubuntu encaixa e desativa

25

De vez em quando eu faço login nas caixas web / db / tools de produção e vejo a mensagem típica:

30 pacotes podem ser atualizados. 16 atualizações são atualizações de segurança.

Minha pergunta é: como todos vocês lidam com atualizações nas caixas de produção do Ubuntu? Você automatiza essas atualizações? Você define o tempo de inatividade para eles? O problema é que você nunca sabe quando uma atualização quebrará algo, como talvez um arquivo de configuração existente etc.

A outra parte desse problema é que acompanhar os patches é uma coisa boa, mas os patches são lançados quase diariamente. Quantas interrupções programadas são necessárias se houver um novo patch de segurança disponível todos os dias?

Eu acho que uma discussão sobre respostas sobre como você gerencia suas atualizações seria muito útil.

imaginativo
fonte

Respostas:

13

Não há nada de especial em corrigir o Ubuntu vs. Windows, RHEL, CentOS, SuSE, debian, etc.

O estado de espírito básico em que você precisa estar ao projetar seu procedimento de correção é assumir que algo irá quebrar.

Algumas das diretrizes básicas que costumo usar ao projetar uma configuração de patch são:

  • Sempre use um sistema local para centralizar internamente na sua rede onde os patches estão instalados

Isso pode incluir o uso do WSUS ou espelhos <your_os_here>em uma máquina interna de gerenciamento de patches. Preferível, que pode consultar centralmente e informar o status dos patches instalados em suas máquinas individuais.

  • Pré-prepare as instalações - quando possível - nas máquinas.

Quando possível, quando os patches são lançados, o servidor central os copia para as máquinas individuais. Isso é realmente uma economia de tempo, para que você não precise esperar o download e a instalação, basta iniciar a instalação durante a janela do patch.

  • Obtenha uma janela de interrupção para instalar os patches, talvez seja necessário reiniciar e algo provavelmente irá quebrar. Verifique se as partes interessadas para esses sistemas estão cientes de que há patches sendo implantados. Esteja preparado para o "isso" não funciona.

De acordo com minha teoria básica de que os patches quebram as coisas, verifique se você tem uma janela de interrupção para aplicar patches por tempo suficiente para solucionar problemas críticos e, possivelmente, reverter o patch. Você não precisa necessariamente ter pessoas sentadas lá testando após os patches. Pessoalmente, confio muito nos meus sistemas de monitoramento para me informar que tudo está funcionando no nível mínimo possível. Mas também esteja preparado para pequenos problemas incômodos a serem chamados quando as pessoas começarem a trabalhar. Você deve sempre ter alguém programado para estar lá pronto para atender o telefone - preferencialmente não o cara que estava acordado até as três da manhã remendando as caixas.

  • automatizar o máximo possível

Como tudo o mais em TI, script, script e depois script um pouco mais. Faça o script do download do pacote, o início da instalação, o espelho. Basicamente, você deseja transformar janelas de correção em uma tarefa de babá que só precisa de um humano lá, caso as coisas quebrem.

  • Tenha várias janelas por mês

Isso permite que você não conserte alguns servidores se, por qualquer motivo, não puderem ser consertados na "noite marcada". Se você não puder executá-los na noite 1, exija que eles sejam gratuitos na noite 2. Também permite manter o número de servidores corrigidos ao mesmo tempo.

O mais importante é acompanhar os patches! Caso contrário, você terá que fazer janelas de correção de mais de 10 horas apenas para voltar ao ponto em que é pego. Introduzindo ainda mais pontos em que as coisas podem dar errado e tornando mais difícil encontrar qual patch causou e causou problemas.


A outra parte desse problema é que acompanhar os patches é uma coisa boa, mas os patches são lançados quase diariamente. Quantas interrupções programadas são necessárias se houver um novo patch de segurança disponível todos os dias?

A correção de um servidor uma vez por mês ou a cada dois meses é - IMHO - uma meta muito viável e aceitável. Mais do que isso, e bem, você estará constantemente aplicando patches nos servidores, muito menos e começa a entrar em situações nas quais possui centenas de patches que precisam ser aplicados por servidor.

Até quantas janelas você precisa por mês? Isso depende do seu ambiente. Quantos servidores você tem? Qual é o tempo necessário para os seus servidores?

Ambientes menores 9x5 provavelmente podem sair com uma janela de correção por mês. Grandes lojas 24x7 podem precisar de duas. Um tamanho muito grande de 24x7x365 pode precisar de uma janela sem interrupção a cada semana para que um conjunto diferente de servidores seja corrigido a cada semana.

Encontre uma frequência que funcione para você e seu ambiente.

Uma coisa a ter em mente é que 100% atualizado é uma meta impossível de alcançar - não deixe seu departamento de segurança dizer o contrário. Faça o seu melhor, não fique muito para trás.

Zypher
fonte
Você diz que automatiza o início da instalação, embora isso contradiga a premissa original da mensagem para obter uma janela de interrupção. Você pode esclarecer melhor a parte 'automatizar o início da instalação' da sua resposta?
imaginativo
você automatizar o início da instalação quando seus interrupção começa - Parar a necessidade de entrar em cada caixa para começar as instalações ... Vou tentar pensar em alguma formulação melhor
Zypher
6

Coisas para fazer:

  1. Faça um backup
  2. Verifique se é um backup restaurável (embora esses dois sejam pontos gerais)
  3. Tente direcionar o tráfego para longe da caixa de produção enquanto você atualiza.
  4. Tente ter um método de acesso fora de banda, caso tudo dê errado, KVM, console serial, acesso local ou mãos remotas.
  5. Teste em um servidor e verifique se tudo funciona antes de implantar atualizações em mais servidores
  6. Use fantoche, se puder, para garantir que os números de versão sejam os mesmos em vários servidores. (Você também pode usá-lo para forçar atualizações)
  7. Em um servidor de teste, diferencie as versões dos arquivos de configuração dos novos (atualização instalada) e verifique se nada vai prejudicar seriamente as coisas. Eu me lembro do dpkg perguntando antes de instalar novas versões diferentes das atualmente instaladas.

Coisas a evitar:

  1. Fazendo atualizações no meio do dia, ou 09:00 de segunda-feira de manhã ou 17:00 de sexta-feira à tarde! (obrigado @ 3influence!)
  2. Atualizando o MySQL em servidores de banco de dados realmente grandes (a reinicialização pode demorar muito)
  3. Fazendo todos os seus servidores de uma só vez (especialmente kernels)
  4. Fazendo qualquer coisa que possa mudar o / etc / networks (porque você pode perder a conectividade)
  5. Atualizações automatizadas que podem fazer o acima sem que você esteja lá para verificar se está tudo bem.
Tom O'Connor
fonte
4
você esqueceu ... nunca fazem-los em uma sexta-feira no final de um dia a menos que você não valoriza o seu fim de semana :)
3dinfluence
4

Outro ponto que vale a pena destacar: se você está acostumado ao Windows, ficará surpreso que a maioria das atualizações do Linux não exige tempo de inatividade ou reinicialização. Alguns o fazem, como atualizações do kernel. Porém, as atualizações que exigem reinicialização ou tempo de inatividade geralmente são sinalizadas como tal e podem ser tratadas em um agendamento separado.

mpez0
fonte
lembre-se de que uma atualização de um serviço em execução exigirá que o serviço seja interrompido em algum momento para que você obtenha o novo. Ainda assim, você não começa a irritantes alerta a cada 10 minutos :)
gbjbaanb
O utilitário debian / ubuntu checkrestarté muito útil para determinar quais processos foram atualizados, mas ainda precisam ser interrompidos e reiniciados para obter o novo código.
thomasrutter
4

Todas as nossas máquinas Ubuntu executam versões LTS.

Apenas instalamos automaticamente todas as atualizações - com certeza não é uma "prática recomendada", mas somos uma loja relativamente pequena e não temos um ambiente de teste / desenvolvimento / produção para cada serviço. As atualizações do LTS são geralmente bem testadas e minimamente invasivas.

A atualização para uma nova versão é obviamente um pouco mais envolvida.

James
fonte
2

Lidamos com as atualizações da seguinte maneira para os sistemas ubuntu LTS:

  1. Mantenha um conjunto de testes de aceitação que verificam todos os caminhos críticos em nosso software
  2. Instale atualizações de segurança autônoma às 4h todas as manhãs e execute imediatamente os testes de aceitação. Se algo falhar, um engenheiro é chamado por paginação e tem tempo de sobra para consertar as coisas ou reverter antes das 9h. Até agora, isso aconteceu apenas duas vezes em cinco anos - o LTS é bem testado e estável.
  3. Reimplantamos automaticamente toda a nossa infraestrutura toda semana (no digitalocean) com implantações azul / verde, que mantêm todos os pacotes nas versões mais recentes. Se uma nova implantação falhar nos testes de aceitação, ela ficará em espera até que um engenheiro possa depurar o problema.

O próximo passo lógico para nós é eliminar as informações da sessão na memória, para que possamos simplesmente reimplementar a infraestrutura todos os dias ou mesmo várias vezes ao dia sem impactar os clientes e eliminar o passo (2).

Essa abordagem é de baixa manutenção e evita completamente as janelas de manutenção.

jazmit
fonte
Eu trabalhei em uma empresa que fez um processo semelhante; nossa empresa-mãe tinha um "sistema completo e desenvolvido profissionalmente". Quando a vulnerabilidade "sincera" foi anunciada, tínhamos centenas de servidores corrigidos na manhã seguinte. Os processos "seguros" da empresa-mãe acabaram com várias centenas de servidores e deixaram o grupo de TI para corrigir manualmente cada máquina ao longo de uma semana. A complexidade é o inimigo de segurança e confiabilidade :-)
Tom Harrison Jr
0

Uma coisa que eu recomendo é lidar com reversões de pacotes. Veja Transações e Reversão com o Debian para uma sugestão de como fazê-lo, pois às vezes você precisa de uma solução rápida para uma atualização que quebra algo.

gbjbaanb
fonte