Escolar Documentos
Profissional Documentos
Cultura Documentos
www.4linux.com.br
Projetos na sua empresa
com a qualidade dos treinamentos
i
Conteúdo 4Linux – www.4linux.com.br
Introdução a Gerência de
Configurações + Instalação do
Puppet
1
2.1 Introdução teórica 4Linux – www.4linux.com.br
Veja alguns exemplos de demandas comuns que devem ser aplicadas em pratica-
mente todos os servidores de sua rede:
Veja que em um ambiente como este, provavelmente os scripts utilizados não vão
conseguir prever as exceções e tratar todas as diferenças entre os diferentes sis-
temas operacionais, com isto, a equipe de sysadmins terá de investir muitas horas
na manutenção desses scripts e provavelmente terá de criar scripts para cada tipo
de sistema operacional. Isto será cansativo e demorado, por esta razão é natural
que algumas equipes partam para administração usando SSH em Loop com auxílio
de programas como o ClusterSSH, deixando então os scripts de lado. Neste caso,
a equipe provavelmente vai separar os servidores em grupos ou contextos como
RHEL, Debian, FreeBSD, OpenBSD, a partir daí acessará e executará comandos em
Loop.
No entanto — mesmo utilizando SSH em Loop — esse tipo de demanda leva tempo
e nem sempre o resultado obtido é o mesmo o que fora planejado pela equipe de
sysadmins, normalmente vários ajustes precisam ser executados no meio do cami-
nho para que a equipe consiga atingir o objetivo desejado — fazendo o tratamento
de exceções, as vezes é até preciso alocar vários analistas de foma simultânea para
resolver este tipo de tarefa repetitiva dentro do prazo estipulado.
Em algum momento a equipe que administra este parque vai perceber que as téc-
nicas que antes os ajudavam na resolução de demandas, não funcionam a medida
que mais e mais servidores são criados. Isto significa que eles não conseguem dar
vazão as demandas e provavelmente vão se tornar o gargalo de muitos processos
na empresa em que trabalham.
Avaliando este cenário, podemos dizer que a administração manual não escala, e
além de não escalar, gera uma grande sobrecarga em cima de sua equipe e princi-
palmente nos membros mais experientes. Isto tende a aumentar o custo necessário
para manter seu ambiente, afinal sobrecarga significa hora extra a noite, de madru-
gada, nos finais de semana e feriados, com isto, você será forçado a ampliar sua
equipe — e seus custos — para dar conta das tarefas, tentando assim cumprir suas
metas.
• Você percebe que fica mais difícil encontrar problemas em seu parque;
• Você percebe que é quase impossível manter todos os seus sistemas operaci-
onais “Padronizados”;
• Você percebe que sua produtividade diminui a medida que o ambiente cresce;
• Você percebe que a medida que sua produtividade diminui, você não conse-
gue mais documentar, planejar e entregar o que seu cliente solicita no tempo
acordado;
• Você pode levar dias ou duas semanas para instalar um novo programa ou
serviço em todas as instâncias/VM’s de seu parque (ex.: Um novo agente de
monitoramento).
Estas são as percepções mais comuns em ambientes que ainda utilizam metologia
artesanal de administração de servidores e serviços.
• Configurações de DNS;
• Configurações de Rota;
• Configurações de Hosts;
• Configuração do Hostname;
• Configurações de LOGROTATE;
• Configurações de SYSLOG/RSYSLOG;
• Tuning de Kernel;
• Hardening do OS;
Algumas destas configurações não parecem ser questões tão sérias, mas se avaliar-
mos com mais cuidado, vamos entender que são na verdade questões críticas. Veja
abaixo as causas e os efeitos em 4 exemplos:
1. Se a sua data/hora estão erradas, isto pode gerar uma parada de alguns sistemas
ou mesmo arruinar uma tentativa de auditoria nos logs de um ou vários servidores,
além disto pode gerar dados incorretos em coletas de informações e gráficos de
monitoramento.
4. Um logrotate mal configurado pode fazer seu disco encher rapidamente parando
aplicações e serviços de seus clientes;
Veja que a falta de um ambiente padronizado pode ser uma grande dor de cabeça
para a equipe de Sysadmins, e normalmente por negligência ou devido a sobrecarga,
é comum ter parte dos servidores padronizados e parte fora dos mínimos padrões.
Nós já falamos de padronização e agora vamos entender o que são demandas repe-
titivas, para isto, vamos utilizar alguns exemplos bastante comuns.
Talvez um dos problemas mais básicos que afligem Sysadmins que administram
grandes parques seja a gestão de contas de usuários nestes servidores.
Imagine que você tenha um parque com 450 Servidores, agora vamos supor que no
início da semana sua equipe recebe um novo administrador de sistemas.
Pense no trabalho que você vai ter para criar o usuário do novo colaborador em todos
os servidores do parque, para isto você precisa de pelo menos 5 passos, são eles:
• Se tornar root
• Criar o usuário
Se você gastar 5 minutos por servidor isso dará um total de 2250 minutos ou 37.5
horas de trabalho repetitivo, desgastante e contínuo.
Isto é certeza de muito trabalho, no entanto, sabemos que as coisas não acontecem
desta forma, o mais comum é criar o usuário do novo colaborador sob demanda nos
servidores em que ele precisa de acesso, conforme os problemas e as necessidades
vão surgindo durante o expediente de trabalho.
Outra coisa muito comum que encontramos em ambientes como este são contas de
colaboradores que já saíram da empresa há muito tempo, estas contas além de exis-
tirem podem e normalmente estão ativas, algo que é um grave risco de segurança.
Normalmente estas contas ainda existem pois da mesma forma que é difícil criar, é
igualmente difícil e trabalhoso removê-las mesmo se formos usar SSH em Loop.
A parte da troca de senhas cai no mesmo problema, as vezes as senhas dos Syad-
mins são aquelas temporárias como “mudar123”, e uma troca de senha em 450
máquinas é virtualmente inviável e desmotiva qualquer iniciativa ou voluntário para
fazê-lo.
É claro que pode podemos configurar autenticação LDAP para os servidores LINUX,
mesmo assim você vai ter que configurar arquivos referentes a PAM/NSSWITCH/NS-
SLDAP/LDAP em todos os 450 servidores.
E mesmo que você tenha previsto esta configuração na IMAGEM padrão dos servi-
dores LINUX, se por ventura alguma configuração do LDAP muda, você terá cerca
de 450 servidores para executar mudanças, e nestes casos as vezes só precisamos
ajustar uma única linha com o IP de um novo servidor ou uma BASEDN LDAP.
Veja que não há como garantir um padrão trabalhando deste jeito. Logo podemos
entender que configurar serviços desta forma resulta em:
São 4.500 ações que devem ser executadas em 450 servidores, levando em conta
que você gaste 10 minutos por servidor, serão 4500 minutos ou 75 horas de trabalho
repetitivo, desgastante e contínuo para terminar esta demanda.
Veja que você vai dedicar cerca de 75 horas de um Sysadmin para executar uma
tarefa repetitiva, e isto pode inclusive desmotivar o profissional aumentando a rotati-
vidade de sua equipe.
No caso de trabalhar em um ambiente deste tipo, você vai ter que estudar o ser-
viço, os arquivos de configuração e mapear todo o ambiente afim de entender como
tudo funciona, só assim poderá planejar e executar algum tipo de manutenção mi-
nimizando os riscos de sua mudança gerar um incidente nos serviços e sistemas
envolvidos.
Se houvesse uma documentação bem-feita, seria muito mais simples planejar e exe-
cutar manutenções neste tipo de local, porém, já vimos que em ambientes com
administração artesanal é muito difícil sobrar tempo para documentar ou planejar
mudanças uma vez que as equipes responsáveis estão sempre sobrecarregadas
executando tarefas repetitivas.
• Re-trabalho;
• Equipe desmotivada;
• Equipe sobrecarregada;
A boa notícia é que existe uma solução que — se bem aplicada — poderá tornar
seu ambiente confiável e sua administração mais simples e eficiente, esta solução
se chama Puppet.
• É extensível em Ruby
• É Idempotente
• Fatos
• Manifests
• Resource Types
• Parâmetros
• Meta-parâmetros
• Funções
• Classes
• Templates
• Definições
• Módulos
• Gentoo Linux
• ArchLinux
• HP-UX
2.8 Puppetlabs
• Puppet
• Facter
• Puppet Dashboard
• Puppet Enterprise
• PuppetDB
• Hiera
• Razor
• Mcollective
No puppet utilizamos uma linguagem declarativa com sintaxe simples e prática para
declarar quais as configurações cada node (servidor) gerenciado pelo Puppet deve
ter. A sintaxe é natural para sysadmins e não é programação, algumas partes da
sintaxe se aproxima muito de linguagens de script como bash script – principalmente
no tratamento de exceções usando expressões condicionais.
Cada recurso em sua essência é similar a uma classe com seus atributos. Um ar-
quivo por exemplo, tem um caminho no filesystem (path), um dono (owner), um grupo
grupo dono (group) e permissões (mode), já um usuário tem nome (username), iden-
tificador do usuário (uid), identificador de grupo (gid), tipo de interpretador de coman-
dos (shell) e diretório pessoal (home).
Observe que temos recursos com contextos similares, portanto pela lógica podería-
mos agrupá-los por tipos, indo além, podemos observar que os atributos de alguns
tipos são conceitualmente idênticos em alguns sistemas operacionais, tais como UID
ou PATH, e mesmo em implementações diferentes seu funcionamento e objetivo não
muda, com isto, podemos entender que a descrição de um recurso no Puppet sofre
uma abstração quanto a sua forma de implementação. Essas duas características
(agrupar e abstrair) formam no Puppet o que podemos chamar de camada de abs-
tração de recursos (Resource Abstraction Layer) ou RAL.
No Puppet você não precisa se preocupar com a camada mais baixa de execução de
comandos, você simplesmente fala para ele “Instale um pacote” e o puppet vai veri-
ficar qual é o sistema operacional, quais os gerenciadores de pacotes disponíveis e
vai então instalar o pacote para você. Em outros sistemas de gerência de configura-
ção normalmente teríamos que nos preocupar com isto e declarar de forma explícita
o comando, graças ao RAL isso não é necessário no Puppet.
O Puppet usa o RAL tanto para ler quanto para modificar o estado dos recursos em
um sistema.
Pode parecer complicado mas não é, vamos dar um exemplo simples, imagine que
você deseja instalar o pacote HTOP em dois servidores, um deles é um Debian o ou-
2.12 Idempotência
A melhor forma de aprender a utilizar o Puppet é praticar, por isso, vamos colocar a
mão na massa a partir de agora.
Para ministrar este curso, foi criada uma infraestrutura utilizando o VirtualBox como
gerenciador das máquinas virtuais como mostra a figura abaixo:
• Firewall – Debian 7
• Gateway – CentOS 6
Sugerimos o uso do VirtualBox para importação destas VMs, prefira sempre a arqui-
tetura 64 bits.
É imprescindível que todas as VM’s sejam importadas e estejam prontas para inici-
armos o próximo passo.
Considerando que estamos trabalhando com Debian Wheezy, siga os passos abaixo
para instalar o Puppet utilizando o repositório oficial da Puppetlabs.
4 - Para terminar comente a diretiva templatedir que está obsoleta nesta versão do
Puppet.
Repita a instalação do Puppet nas máquinas DMZ Server e Web Server, que
utilizam a distribuição Debian!
Considerando que estamos trabalhando com Ubuntu versão 12.04 (Precise), siga os
passos abaixo para instalar o Puppet utilizando o repositório oficial da Puppetlabs.
4 - Para terminar comente a diretiva templatedir que está obsoleta nesta versão do
Puppet.
Considerando que estamos trabalhando com CentOS versão 6, siga os passos abaixo
para instalar o Puppet utilizando o repositório oficial da Puppetlabs.
4 - Para terminar comente a diretiva templatedir que está obsoleta nesta versão do
Puppet.
Considerando que estamos trabalhando com OpenSuSE versão 13.1, siga os passos
abaixo para instalar o Puppet utilizando o repositório oficial da Puppetlabs.
3 - Para terminar comente a diretiva templatedir que está obsoleta nesta versão do
Puppet.
Siga os passos abaixo para instalar o Puppet disponível no Oracle Solaris 11.2.
1 aluno@unixserver :~ $ su -
Agora que o Puppet esta instalado vamos conhecer algumas opções do comando
puppet
O resultado indica que o Puppet esta instalado e seus arquivos de configuração estão
localizados no diretório /etc/puppet
1 vardir
2 rundir
3 ssldir
4 ca_server
5 server
O comando exibe uma lista de todos os subcomandos com uma rápida des-
crição.