Temos muitos servidores e ainda queremos atualizá-los todos. A maneira real é que qualquer um dos administradores de sistema vá de servidor em servidor e faça um aptitude update && aptitude upgrade
- ainda não é legal.
Estou procurando agora uma solução que seja ainda melhor e muito inteligente. O fantoche pode fazer este trabalho? Como você faz isso?
debian
puppet
update
remote-access
Dennis Wisnia
fonte
fonte
Respostas:
Você pode usar o
exec
tipo como:Para ser sincero, eu não tentei, mas acho que você só precisa criar um novo módulo que inclua essa definição de exec.
O
apt-get upgrade
comando é interativo. Para fazê-lo funcionar silenciosamente, você pode adicionar a opção-q=2
como mostrado acima.fonte
touch
arquivamos no mestre de marionetes.se todos os seus hosts forem debian, você pode tentar o pacote de atualizações autônomas.
http://packages.debian.org/sid/unattended-upgrades
Aqui estamos usando o puppet para gerenciar nossas máquinas virtuais debian, com o puppet somos capazes de habilitar e gerenciar configurações de atualização sem precedentes em todos os servidores.
Recentemente, nossa equipe está testando a ferramenta mcollective para executar comandos em todos os servidores, mas para usar as habilidades de Ruby do mcollective são necessárias.
[s] Guto
fonte
Eu recomendaria ir para Puppet, facter e mCollective.
O mCollective é uma estrutura muito boa, na qual você pode executar comandos em uma série de hosts (em paralelos) usando o filtro como filtro.
Acrescente a isso um proxy / cache local e você estará bem definido para o gerenciamento de servidores.
fonte
Use uma ferramenta feita para executar um único comando em vários servidores. E com isso não quero dizer ter um kazillion de terminais abertos com o Terminator ou o ClusterSSH, mas sim um único terminal para um servidor de gerenciamento executando uma ferramenta adequada para o trabalho.
Eu recomendaria func, Salt ou mCollective neste contexto. Se você já possui o Puppet, escolha o mCollective (ele se integra perfeitamente ao Puppet). Se não, e você tem um Python antigo em suas máquinas, pode desfrutar de func. Se você usa Python de novo, tente o Salt. Todas essas ferramentas executam o comando especificado na linha de comando de forma assíncrona, o que é muito mais divertido do que um loop ssh seqüencial ou mesmo executando os mesmos comandos de aptidão em várias janelas do Terminator em vários servidores.
Você definitivamente vai adorar Salt .
fonte
Então, acho que há muitas coisas que contribuem para uma boa solução:
Largura de banda : Basicamente, duas alternativas para economizar largura de banda vêm à minha mente:
Administração : eu configuraria um shell paralelo como PDSH , PSSH , GNU Parallel e emitiria o comando em todos os clientes, se eu testasse o comando anteriormente em uma máquina de exemplo. Então não é muito provável que possa falhar em todos os outros. Como alternativa, você pode considerar um trabalho cron em todos os clientes, mas ele pode falhar automaticamente, então eu preferiria a primeira solução.
Se você se preocupa com a simultaneidade de atualizações, pode agendar seus comandos com
at
Log : Como com shells paralelos, você tem a possibilidade de redirecionar a saída, eu combinaria stderr e stdout e gravaria em um arquivo de log.
fonte
Meu próprio wrapper ssh paralelo: classh é uma alternativa para as várias ferramentas ssh Parallel e cluster por aí.
Você pode gostar mais ou odiar. Existem apenas três razões pelas quais estou mencionando aqui:
subprocess.communicate()
método Python --- para que você possa obter apenas 64K de stdout e, separadamente, até 64K de stderr, por exemplo; também qualquer processo remoto que tente ler a partir de seu stdin simplesmente travará até que o sub-acesso local do ssh seja eliminado, automaticamente pelo tratamento de tempo limite do classh )É extremamente simples escrever um script personalizado, em Python, para usar o classh.py como módulo. Portanto, é muito fácil escrever algo como:
É tudo o que há para isso. Por exemplo, no loop concluído aninhado, você pode reunir uma lista de todos aqueles que retornaram algum status de saída específico ou verificar mensagens de erro específicas e configurar tarefas de acompanhamento para lidar com elas. (Os trabalhos serão executados simultaneamente, o padrão é de 100 trabalhos a qualquer momento, até que cada um seja concluído; portanto, um comando simples em algumas centenas de hosts geralmente é concluído em alguns segundos e um script de shell muito complexo em uma única cadeia de comandos longa. digamos cinquenta linhas ou mais ... podem concluir mais de alguns milhares de hosts em cerca de 10 minutos ... cerca de 10 mil hosts por hora no meu ambiente, com muitos deles localizados intercontinentalmente).
Portanto, isso pode ser algo que você pode usar como uma medida ad hoc até que sua configuração de marionetes seja implementada e teste bem ... e também é útil para realizar pequenas pesquisas ad hoc de seus hosts para ver quais estão se desviando de seus padrões. várias pequenas maneiras.
fonte
A resposta usando exec é bastante útil.
No entanto, de acordo com o manual do apt-get, não é uma boa ideia usar -q = 2 dessa maneira (embora eu o tenha usado há anos sem problemas)
Eu mesmo tenho usado um script há anos, executando o apt-get da seguinte maneira:
Coisas como fantoches e outras ferramentas que as pessoas mencionaram com certeza podem funcionar, mas parece que é um exagero pelo que basicamente está apenas imitando alguns comandos digitados por um humano. Acredito em usar a ferramenta mais simples para um trabalho específico; nesse caso, um script bash é o mais simples possível sem perder a funcionalidade.
fonte
Por anos, eu estou felizmente atualizando e instalando pacotes usando o apt-dater . É uma ferramenta leve e eficaz para gerenciamento remoto de pacotes. Ele usa
screen
,sudo
essh
.Para gerenciamento de pacotes, o apt-dater pode ser uma solução mais fácil do que as ferramentas de gerenciamento de configuração.
O apt-dater é útil para o gerenciamento centralizado de pacotes em diferentes tipos de GNU / Linux, como Debian e CentOS.
fonte
você pode usar o Fabric . O Fabric é uma biblioteca e ferramenta de linha de comando Python (2.5-2.7) para otimizar o uso do SSH para tarefas de implantação de aplicativos ou administração de sistemas.
fonte
use webmin ,,, e use seu recurso de cluster webmin, no qual você pode adicionar todos os sistemas a um console do webmin e emitir-lhes qualquer comando ou controle de todos eles em um único local.
Ou
Usar Cluster ssh
Ou
PSSH
fonte
Outra solução se todos os seus hosts estiverem executando o Debian (ou derivativos) é usar o pacote cron-apt . Mas, conforme sugerido pela documentação, um pouco de cuidado deve ser tomado.
Atualmente, estou usando o cron-apt em uma dúzia de servidores para executar todas as atualizações de segurança automaticamente e sem supervisão. Para evitar atualizações indesejadas, eu só uso o cron-apt em servidores que executam a distribuição estável Debian e certifico-me de configurar minhas fontes apt para usar o nome da distribuição, wheezy , e não seu apelido (stable).
A configuração específica do cron-apt que eu uso é resumida em um arquivo de ação:
/etc/cron-apt/action.d/5-install
Qualquer outra atualização é feita manualmente, usando a tela ou o que for mais apropriado, pois pode exigir intervenção manual durante a atualização.
fonte