Administração remota/em massa do Linux

Administração remota/em massa do Linux

Além de nossa infraestrutura interna de TI, temos cerca de 500 máquinas Linux hospedando nossos serviços para o mundo online. Eles são agrupados em vários clusters como Banco de Dados An, Produto An, NFS, Backoffice e assim por diante. Além disso, são administrados por um fornecedor externo, de acordo com as nossas especificações e requisitos.

No entanto, enfrentamos muitos problemas durante o desenvolvimento, implementação e implantação de software (web) - especialmente porque os ambientes de desenvolvimento e teste não têm quase nada em comum com os sistemas ativos (poupo os detalhes desagradáveis..) .

Assim, tentei criar máquinas virtuais, copiei os vários sistemas ativos tão exatamente quanto possível e preparei-os para se conectarem, por exemplo, aos bancos de dados de desenvolvimento em vez dos "reais" de forma transparente para os desenvolvedores (eles não são root). Isso funciona muito bem, mas...

Fiquei me perguntando como alguém poderia administrar esses sistemas remotamente ea granel? Existe alguma família de software que eu não conheço? Ou, pelo menos, algumas técnicas ou princípios com os quais devemos estar familiarizados?

Forneceríamos a cada desenvolvedor um monte de imagens para serem executadas localmente (VirtualBox). O departamento de controle de qualidade. obteria clusters virtuais (XEN ou Hyper-V). Se eu precisar fornecer um módulo de servidor adicional, redirecionar uma nova conexão de banco de dados ou apenas quiser atualizar tudo fornecido pelo gerenciador de pacotes... como eu poderia fazer isso sem ser forçado a fazer logon em todos os sistemas e/ou pedir aos meus colegas para baixar e executar algum script de fixture?

Acredito que existem muitas soluções. Bem, de alguma forma sou estúpido demais para inserir as palavras-chave corretas nos motores de busca... Ou esse problema não é tão trivial quanto parece?

Para registro:

  • Quase todos os sistemas estão rodando Debian GNU/Linux 6.x "squeeze"
  • Nenhum desenvolvedor é forçado a usar um sistema operacional específico em sua estação de trabalho
  • O orçamento é limitado, claro, mas não pequeno demais para comprar software proprietário
  • É preferível uma solução que envolva o nosso fornecedor acima mencionado

Responder1

Depende exatamente do que você precisa e do que procura. Mas em geral existem múltiplas soluções para "gerenciamento de configuraçõescomo:

  1. fantoche
  2. chefe de cozinha
  3. cfengine
  4. ansible
  5. sal

etc. Eu pessoalmente recomendaria o Puppet, pois ele tem uma grande comunidade e muitas receitas externas fornecidas. Isso permite configurar e gerenciar sistemas automaticamente. Se você combinar isso com repositórios próprios e atualizações automatizadas via, por exemplounattended-upgradesvocê pode atualizar automaticamente o sistema.

Outra solução é apenas fornecer seus próprios pacotes como company-baseetc. que dependem automaticamente do software necessário e podem configurar seu sistema automaticamente.

Você também deve analisar implantações automatizadas (barebone e virtualizadas). Se você combinar isso com o gerenciamento de configuração ou com seu próprio repositório, poderá automatizar e reinstalar facilmente seus sistemas. Se você quiser começar com a instalação automatizada, dê uma olhada emo formanque suporta libvirt, bem como instalações básicas e possui suporte integrado a fantoches. Se você quiser fazer você mesmo, você pode dar uma olhadapontapé inicial (redhat et. al.) ou "pré-configuração" para configurar automaticamente seu sistema. Para Debian você também pode usar algo comodebootstrapou um wrapper chamadogrml-debootstrapsuporte a imagens virtualizadas.

Para ajudar a fornecer as imagens do VirtualBox para o seu desenvolvedor, dê uma olhada emvagabundoele permite automatizar a criação de sistemas virtualizados com o VirtualBox suportando scripts chef, puppet e shell para personalizar seu ambiente virtual.

Se você quiser usar a solução do seu provedor existente, pergunte como eles gerenciam seus sistemas, mas provavelmente será algum tipo de gerenciamento de configuração. Pode ser possível executar o agente deles em seus sistemas se você puder acessar o servidor de configuração.

Para palavras-chave do Google , procure devops, e .configuration managementit automationserver orchestration

Resumindo, automatize o máximo possível e nem pense em fazer as coisas manualmente.

Responder2

Ulrich já deu a resposta sobre implantação de software e configuração automatizada de servidores.

Os princípios por trás disso são

  • Defina a aparência dos seus servidores - isso inclui software comum instalado por padrão, o esquema de particionamento e o layout do sistema de arquivos
  • Os servidores de produção, teste, teste e desenvolvimento não devem diferir em relação a esses padrões básicos (caso contrário, você terá problemas mais tarde - como aconteceu)
  • Use um gerenciamento de alterações adequado para documentar TODAS as alterações que você fez (incluindo pequenas alterações de uma linha em qualquer configuração)
  • Você sempre muda primeiro no teste, depois no desenvolvimento, depois na preparação e por último na produção

Você pediu uma ferramenta útil para gerenciar grandes quantidades de servidores - meu favorito é cluster-ssh ( cssh). Digite uma vez e faça alterações em vários servidores simultaneamente.

Se você descobrir um problema e tiver uma solução que o elimine:

  1. Aplique a correção em Test/Dev/Staging/Prod (veja acima) se realmente funcionar
  2. Aplique a correção aos seus modelos virtuais para que futuros clones de VM não tenham esse bug
  3. Aplique a correção ao seu processo de instalação física (kickstart/autoyast/qualquer)
  4. Aplique a correção a TODOS os servidores

Se você estiver enfrentando muitos servidores para consertar, este é um processo que deve ser bem documentado e no final uma equipe diferente deve verificar se a correção foi completamente aplicada.

Empregamos Mantis (código aberto, PHP) para esse propósito.

Responder3

Gerencio cerca de 30 produtos e algumas centenas de servidores em vários países. Sou o gerente de configuração do software, portanto não tenho acesso root (por design), não mexo nos bancos de dados ou em seus servidores (novamente, por design) e tenho que pular muitos obstáculos por causa da segurança corporativa. Mas eu gerencio as configurações de teste, preparação e produção, incluindo links e alterações de banco de dados. Eu tenho vários scripts que vão para servidores usando combinações de sshe pythonscripts de shell.

As principais coisas a se pensar são:

  1. Que tipos de interações você terá com seus servidores? Apenas uploads de arquivos? Executando programas de linha de comando? Executando clientes X remotos?
  2. Qual nível de segurança é necessário para acessar esses servidores? Firewalls, redes seguras, VPN? É sshsuficiente e de um local central seguro?
  3. Quanto pode ser automatizado em cada servidor? Você pode instalar um programa em cada servidor e executá-lo ou precisa transmitir o programa por meio de algo como sshexecutá-lo remotamente? Você pode criar um script expectou apenas uma invocação de linha de comando?

O VirtualBox oferece muitas ferramentas de linha de comando que você pode administrar apenas por meio sshde sistemas puppetcomo Ulrich menciona.

Responder4

Nos últimos dois anos, surgiu um novo conjunto de sistemas minimalistas que se concentram na capacidade de construir uma configuração usando scripts. Por serem estruturas para escrever scripts, eles tendem a se destacar em tarefas que exigem sequenciamento.

pyinfra

pyinfra automatiza a infraestrutura super rápido em grande escala. Ele pode ser usado para execução de comandos ad-hoc, implantação de serviços, gerenciamento de configuração e muito mais

http://pyinfra.com/

Judo

Orquestração simples e gerenciamento de configuração

http://github.com/rollcat/judo

rset(1):pln(5)

Configure sistemas usando qualquer linguagem de script

http://scriptedconfiguration.org/

informação relacionada