Administração remota / em massa do Linux


10

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

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

Assim, tentei criar máquinas virtuais, copiei os vários sistemas ativos da maneira mais exata possível e os preparei para conectar-se, 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 ...

Eu queria saber como alguém poderia administrar esses sistemas remotamente e em massa ? Existe alguma família de software de que 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, redirecione uma nova conexão de banco de dados ou apenas deseje atualizar tudo o que é 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 fixação?

Eu acredito que existem muitas soluções. Bem, de alguma forma eu sou burra demais para inserir as palavras-chave corretas nos mecanismos de pesquisa ... Ou esse problema não é tão trivial quanto parece?

Para o registro:

  • Quase todos os sistemas estão executando o 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 muito pequeno para comprar software proprietário
  • É preferível uma solução que envolva nosso provedor mencionado acima

Respostas:


15

Depende exatamente do que você precisa e do que está procurando. Mas, em geral, existem várias soluções para " gerenciamento de configurações como:

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

etc. Eu, pessoalmente, recomendaria o fantoche, 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 automáticas via, por exemplo, unattended-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 as implantações automatizadas (barebone e virtualizada). Se você combinar isso com o gerenciamento de configuração ou seu próprio repositório, poderá automatizar e reinstalar seus sistemas com facilidade. Se você deseja iniciar a instalação automatizada, dê uma olhada no informador, que suporta a libvirt, bem como as instalações bare bone e possui suporte integrado ao fantoche. Se você quiser fazer isso por conta própria, pode consultar o kickstart (redhat et. Al.) Ou "preseeding" para configurar automaticamente o seu sistema. Para o Debian, você também pode usar algo como debootstrap ou um wrapper chamado grml-debootstrap, que suporta imagens virtualizadas.

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

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

Para o Google palavras-chave olhar para devops, configuration management, it automatione server orchestration.

Em resumo, automatize o máximo possível e nem pense em fazer coisas manuais.


1
Obrigado! É muita coisa para ler, mas parece bastante promissor.
Mjhennig

@ mjhennig Acabei de adicionar mais algumas informações também re. desdobramento, desenvolvimento. Existem muitos recursos disponíveis, mas o mais importante é que você realmente não deve fazer coisas por conta própria através de shells distribuídos pelo ssh / mas ter algum tipo de sistema para isso.
Ulrich Dangel

2
Não há nada de errado em fazer as coisas por conta própria, especialmente se as ferramentas disponíveis não se ajustarem ao objetivo. Sistemas como o Puppet são, em grande parte, ferramentas de administração do sistema, e não gerenciamento de configuração. A grande maioria dos sistemas que eu uso nem sequer é acessível a partir de um servidor central, mas a partir dos laptops dos usuários sobre o VPN (de todas as coisas) - tenta mudar isso há três anos. Nosso departamento de TI é dividido por regiões porque cada região não pode acessar a outra corretamente. Scripts domésticos são necessários em algumas situações. É também aí que a inovação começa.
Arcege

3
@Arcege Acabei de votar em seu comentário, são necessários scripts e você não precisa converter toda a sua infraestrutura de uma só vez. A parte mais importante é automatizar as coisas e torná-las repetíveis. Mas a natureza descritiva do boneco e do chef tem alguns aspectos únicos, por exemplo, você pode testar e verificar as aulas de boneco cucumber-puppet. É claro que você pode desenvolver / aumentar sua própria estrutura reutilizando componentes existentes, mas parecia que o OP não tem nada atualmente e, se você começar do zero, acho melhor usar uma estrutura existente.
precisa

Sim, concordo com operações automatizadas / repetíveis. Eu tenho vários scripts internos automatizados ou com botão de pressão para fazer a interface entre sistemas existentes, como a integração com Jenkins / Oc4j e Subversion / Bugzilla. Eu simplesmente não concordo (fortemente) com o seu comentário "você realmente não deve fazer coisas por conta própria". Às vezes, as estruturas existentes não são aplicáveis, como na minha situação que descrevi.
Arcege

3

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

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

  • Defina a aparência dos 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, preparo, 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 fez)
  • 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 massas de servidores - o meu favorito é cluster-ssh ( cssh). Digite uma vez e faça alterações em muitos servidores simultaneamente.

Se você descobrir um problema e tiver uma correção para removê-lo:

  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 que seja)
  4. Aplique a correção a TODOS os servidores

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

Empregamos o Mantis (código aberto, PHP) para esse fim.


2

Gerencio cerca de 30 produtos e algumas centenas de servidores em vários países. Sou o gerente de configuração de software, por isso não tenho acesso root (por design), não toco 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 em teste, preparo e produção, incluindo links e alterações no banco de dados. Eu tenho um número de scripts que saem para servidores usando combinações de ssh, pythone Shell scripts.

As principais coisas para se pensar são:

  1. Que tipo de interação 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 através de algo como sshexecutá-lo remotamente? Você pode criar um script com expectou apenas uma chamada de linha de comando?

O VirtualBox oferece muitas ferramentas de linha de comando que você pode administrar através de sshsistemas justos ou puppetcomo Ulrich menciona.


2
Apenas uma pequena sugestão re. virtualbox, dê uma olhada no vagrantup.com, ele pode simplificar e automatizar a criação de imagens virtuais.
precisa

Infelizmente, mesmo o acesso simples à rede entre ambientes de teste remoto é quase impossível. Configurar um farm de caixas virtuais seria ainda mais difícil. Tenho problemas em solicitar à TI que atualize o software padrão com o que está desatualizado há mais de um ano, porque não faz parte dos repositórios 'RedHat padrão'.
Arcege

O que ajudou na minha experiência com o software desatualizado é mostrar que o software é EOL ou que há problemas de segurança. A configuração / conexões de rede geralmente são muito mais difíceis de alcançar, talvez tente enfatizar como a conexão dos diferentes ambientes de teste ajuda a economizar dinheiro, simplificar processos, economizar tempo de controle de qualidade ou tornar o ambiente de teste mais realista. Também pode ajudar se você levar pessoas de diferentes ramos a bordo.
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.