implantação automatizada de linux e gerenciamento de configurações em pequena escala - vale a pena?

24

Estou prestes a implantar ~ 25 servidores executando o Debian . As máquinas terão funções diferentes - servidores web, servidores de aplicativos Java, proxies, caixas MySQL. O ambiente provavelmente não crescerá muito no futuro - talvez 2-5 servidores a mais nos próximos 2 anos.

Provavelmente usarei o fai na instalação do sistema, mas não tenho certeza se vale a pena adicionar também o cfengine ou o fantoche de gerenciamento de configuração centralizado para uma escala tão pequena.

O gerenciamento de configuração faz sentido para um ambiente desse tamanho?

pQd
fonte

Respostas:

29

Eu recomendaria o uso de uma mistura de pré-propagação Debian, em que você fornece ao instalador um arquivo de texto que responde a todas as perguntas que ele faria e ao Puppet.

A razão para usar a pré-configuração, em vez da FAI, é que você não precisa configurar uma imagem primeiro e lidar com mantê-la atualizada. Você terminará com uma instalação muito semelhante à que teria se os fizesse todos manualmente. Quando você instalar uma nova versão, precisará atualizar um arquivo de configuração com as alterações, em vez de precisar reconstruir uma nova imagem.

Uma ferramenta de gerenciamento de configuração é particularmente útil quando você tem vários servidores executando a mesma função e deseja que eles sejam idênticos, por exemplo, cluster de servidores da web. No entanto, eles também podem ser úteis para configurar a instalação base de todos os servidores. Você vai querer instalar pacotes específicos em todos os seus servidores, como ntpd e um MTA. Você deseja alterar um arquivo de configuração em todos os seus servidores. Um benefício adicional é que você pode manter seus manifestos em algo como subversão e manter um registro do que mudou em um servidor, quem fez e por quê. O gerenciamento de configuração também pode salvar vidas em caso de falha do servidor e você precisa reconstruí-lo rapidamente. Instale o sistema operacional (usando FAI ou pré-configuração), instale o fantoche e vá embora, construído de volta exatamente como era antes. Obviamente, você precisará manter backups de dados.

O gerenciamento de configuração requer dedicação para garantir que você faça apenas alterações e terá um custo inicial para definir as coisas, mas depois de ter uma configuração funcional, você não se arrependerá.

Puppet é a mais moderna das duas ferramentas que você mencionou. Eu realmente recomendo a ninguém. A configuração é uma linguagem declarativa e é fácil criar construções de nível superior. Também existe uma comunidade muito grande e sempre há pessoas bem-vindas para ajudar na lista de discussão ou no canal de IRC.

David Pashley
fonte
obrigado pela dica sobre pré-semeadura. Estou analisando os documentos sobre isso no momento.
# PQd #
FAI é um skool antigo; Eu definitivamente não recomendaria. Preseeding + Puppet ftw.
Womble
Usamos FAI e cfengine, temos cerca de 1000 máquinas e funciona muito bem. Vale a pena notar que você pode fazer o ssh na máquina à medida que ela se constrói, para facilitar a gravação dos microsscripts.
James
FAI velho scool? NÃO! A FAI é sólida e possui mais de 10 anos de experiência. Ter um olhar para a longa lista de usuários da FAI em fai-project.org/reports
Thomas Lange
Bons conselhos, usamos uma abordagem semelhante e funciona bem. No entanto, eu não descartaria a FAI. A FAI não usa imagens para instalação (o SystemImager faz isso). É necessário configurar um diretório raiz nfs mínimo usado para executar o instalador da FAI. O processo de instalação é automatizado com arquivos de configuração e executando vários ganchos definidos pelo usuário. A vantagem sobre a pré-configuração é que o conceito de classes FAI facilita o manuseio de vários servidores (e até estações de trabalho) com funções diferentes.
JooMing
10

Eu recomendaria o CFengine para qualquer ambiente com mais de 2 a 3 caixas e onde você tenha algum conceito de 'modelos' ou servidores que executam funções específicas.

Por quê? Simplificando, reduz erros, você tem uma ferramenta que garante que as permissões de arquivo / diretório estejam corretas em todos os lugares do ambiente e, quando você lança mais servidores, a ferramenta lida com absolutamente tudo e nunca comete erros.

Compare com até mesmo um administrador de sistema habilitado a implantar um servidor Web no final de um turno de doze horas, quando as coisas já deram errado ... Eles provavelmente se lembrarão daquele pequeno e desagradável arquivo de configuração que precisa entrar em / etc / random / location / foo / bar, caso contrário, o aplicativo silenciosamente deixará de fazer algo bastante importante, como faturar clientes? :)

Ferramentas como CFengine também são uma ótima maneira de executar atualizações de segurança em todo o ambiente. Soltar uma configuração do Nagios (NRPE) em todas as caixas também é um doddle. Se você está lidando com cinco caixas ou cinco centenas de caixas que você vai economizar tempo com CFengine.

Provavelmente vale a pena notar que meu ambiente é um pouco maior, no entanto, também implantei o CFengine para ambientes menores do que você observa, daí a recomendação!

Provavelmente sua próxima pergunta será CFengine vs Puppet? Essa é uma decisão mais difícil, e eu sempre fui ao CFengine devido a (nos primeiros dias) alguma imaturidade do Puppet, principalmente em relação ao registro de erros ... atualmente, não tenho certeza - hoje em dia? Olhando para os meus problemas específicos com o Puppet, eles estavam relacionados ao certificado SSL, ainda lembro dolorosamente o tempo que passei 3 horas diagnosticando problemas de conectividade do servidor com o cliente em irc.freenode.net/#puppet com alguns pesados ​​RTFM e RTFS apenas para encontrar um erro, não sendo registrado, e Luke disse: "Ah, isso é realmente difícil de corrigir" e nunca o fez. :(

nixgeek
fonte
bom ponto. o problema é que, no meu caso, as coisas serão altamente especializadas; o número de modelos [por causa da redundância] provavelmente será em torno de n / 2 [onde n é o número total de servidores].
pQd
1
Isso não é ruim, a maioria dos meus clusters da WWW é n + 2, se não n / 2, e você pode ser bastante flexível com o CFengine na implantação de nós atrás de seus balanceadores de carga, como o HAproxy. É perfeitamente viável gerenciar o IPVS e o material de manutenção permanente :-) Mesmo com requisitos de redundância n / 2, eu apostaria que você tem muitos arquivos de configuração idênticos ou semelhantes em seu ambiente? Lembre-se de que, com o CFengine, você tem a ferramenta 'editfiles' para fazer coisas como um arquivo de configuração "modelado" contendo algo como IP e, em tempo de execução, encontrar e substituir pelas informações corretas. ;)
nixgeek
@astinus obrigado por seus comentários. Também estou com um pouco de medo de diminuir minha produção estragando a configuração central. o que você acha de desativar a pesquisa automática de configuração e o log em cada uma das máquinas e forçá-la a atualizar e verificar manualmente se tudo está bem? [sim, também terei nagios / monitoramento personalizado ... mas ainda].
# PQd #
1
Eu acho que a confiança nas suas técnicas de gerenciamento de configuração vem com o tempo, mas, nesse meio tempo, apenas desative a pesquisa automática de caixas e use 'cssh' para fazer login em cada classe de caixas para executar 'cfagent -qv' (ou qualquer outra coisa!) Quando você deseja enviar atualizações. Se você deseja uma dica superior para aumentar a confiança, implante uma máquina virtual como um ambiente de 'teste' e garanta que todas as alterações passem por isso primeiro. Muito fácil se você mantiver sua configuração de CFengine ou Puppet no Subversion, basta usar branches e tags.
Nixgeek 28/06/09
Também recomendarei o uso do SLACK para simplificar ridiculamente a (re) instalação de sistemas, gerenciamento de configurações. Está disponível aqui: sundell.net/~alan/projects/slack
HK_
5

Além de cfengine e fantoche, também há chef . Eu sugeriria fortemente o uso de uma dessas ferramentas, pois as coisas sempre crescerão em direções inesperadas. Isso ajuda a gerenciar as coisas em um local centralizado.

O importante a reconhecer é que as chances são de que você não conseguirá tudo, mas se conseguir pelo menos 90% de lá, é um começo. Além disso, é divertido e facilitará sua vida a longo prazo. Por fim, é uma boa habilidade seguir adiante.

Jauder Ho
fonte
chef é uma entrada recente no cenário de gerenciamento de configurações. Ele foi projetado para ser configurado escrevendo ruby ​​para fazer o que você deseja, em oposição à linguagem declarativa personalizada do boneco. O tempo dirá qual método funciona bem. Atualmente, estou no acampamento de marionetes.
David Pashley
3

Estou usando o cfengine há 5 anos para instalar o debian (do woody ao lenny hoje em dia). Com o etch, construo um debian-installer personalizado. Graças ao preseed, surge uma única pergunta: "qual é o nome do host". Depois que este cfengine configura o servidor inteiro (dns + dhcp com usuários e senhas dnssec, samba, ntpd, default (Samba), ssh, openvpn, apache vHosts, backup com rsnapshot no LVM, módulos de web personalizados, etc.).

Mesmo quando instalo apenas um servidor, uso cfengine-scripts da minha caixa de ferramentas como esta:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Eu gosto do cfengine, porque os scripts cf2 são um tanto legíveis por humanos.

então vale a pena trabalhar com ferramentas para gerenciamento automático de configuração.

/ thorsten

ThorstenS
fonte
2

Vale a pena mesmo para um site pequeno. É tudo sobre consistência à medida que você cresce. E você sabe que seu site vai crescer. Melhor começar enquanto você ainda é pequeno. Cfengine é incrível. Especialmente a versão 3, que pode lidar com todos os gerenciadores de pacotes em todo o campo, e é realmente leve e segura e "simplesmente funciona". O fantoche simplesmente não entregou o que reivindicou. Não tentei Chef.

A vantagem do cfengine sobre os outros é que ele é ultraleve, mas na verdade tem mais recursos. Sua segurança é como ssh, em vez dos certificados da web usados ​​pelo fantoche. Quando contei a meu chefe sobre cfengine, ele pensava que era ficção científica :) Se você está procurando algo futurista, tente ler alguns dos trabalhos de pesquisa de Marc Burgess. Coisas legais.

SAnnukka
fonte
1

A ferramenta número um que eu gostaria de ter ao executar um site pequeno é a criação de botões. Isso facilita a aplicação de patches, atualizações e recriações, o que pode resolver uma infinidade de outros problemas no futuro.

Nenhum ssh instalado corretamente em todas as caixas? nenhum curl / wget / vim também? e as outras ferramentas internas que você gostaria de ter em cada caixa?

Ter o gerenciamento central de seus servidores é uma das primeiras ferramentas que você deve ter trabalhando para facilitar os esforços futuros.

ericslaw
fonte
1

Concordo com todos os presentes. Você deve começar a aprender e configurar uma infraestrutura de trabalho quando não for grande. Porque então você está preparado quando crescer.

Dependendo do que você deseja executar, eu usaria o FAI, cfengine e pré-propagação para o Debian / Ubuntu. A FAI pode trabalhar com muitas ferramentas diferentes, por isso é um bom começo para qualquer distribuição semelhante ao Debian. Com a configuração controlada por classe FAI (e cfengine), você pode dividir facilmente suas instalações em pequenos módulos, que podem ser selecionados para usar em cada máquina. Dessa forma, será útil mesmo se você tiver muitas máquinas diferentes. Na verdade, é mais útil, pois você documentará sua instalação com esses scripts. E quando você instala em uma nova máquina, não esquece nada.

Sim, você DEVE ter algumas máquinas para testar antes de implantar suas alterações em uma instalação ao vivo. Mas com um script de configuração como este, você não esquecerá de executar nenhuma etapa na instalação ao vivo.

Anders
fonte