Este documento apresenta uma introdução ao Mcollective, ferramenta de orquestração de servidores em tempo real. O documento discute conceitos de orquestração, instalação e configuração do Mcollective, uso de agentes e clientes, filtros, construção de agentes e clientes personalizados e demonstração prática. O documento também fornece informações sobre suporte e comunidade em torno do Mcollective.
2. <%whoami%>
‣ José Augusto (Guto) Carvalho
‣ Consultor, Instrutor, SysAdmin e DevOp
‣ Blogueiro de TI há mais de 10 anos
‣ RHCSA, RCHE, LPIC3, PCP2, NCLA, FCNSAv5…
‣ 14 anos de experiência como sysadmin Linux
‣ Atuou em diversos projetos de Governo em Brasília
‣ ITI, MINICOM, MDA, MD, EBC, DATAPREV, CAIXA, DETRAN/DF e ANATEL
3. Agenda
‣ Introdução a orquestração
‣ Introdução ao Mcollective
‣ Instalando e configurando
‣ Utilizando agentes e clientes
‣ Plugins e Filtros
‣ Construção de agentes e clientes
‣ Demonstração Mcollective em VMs
‣ Comunidade e suporte
‣ Perguntas
4. Orchestration
Orches tration describes the aut omated
arrangement, coordination, and management of
complex computer systems, middleware, and
services.
http://en.wikipedia.org/wikiOrchestration_(computing)
5. Orquestração
Orquestrar significa invocar ações de forma paralela
ou não, em tempo real, em diversos servidores de
um dat ac enter, f azend o is t o de f o r ma
automatizada, eficiente e controlada.
Definição por Guto Carvalho
7. Exemplo de caso
Vamos supor que por alguma razão você precise
rodar algum comando em todos os seus servidores,
seja para atualizar um pacote, seja para desligar um
serviço, seja para remover um usuário ou aplicar
uma regra de firewall, enfim, por qualquer que seja
a razão, como você fará isto?
8. Exemplo de caso
E se por alguma razão você precise desligar o
puppet, reiniciar o puppet, desativar o puppet
momentaneamente em algum ou em vários nodes
de parque, como você fará isto?
9. O Puppet também precisa de
gerenciamento, ele é um
serviço e necessita de eventual
manutenção.
10. Puppet way
Sabemos que o puppet nos permite
gerenciar nodes, porém, para funcionar
ele depende de uma consulta do agente
ao master, que fornecerá o catálogo a
ser aplicado ao node.
11. Essa consulta pode levar
m i n u t o s o u h o r a s
dependendo do seu setup.
14. Ferramenta mantida pela Puppetlabs que
implementada orquestração de servidores
em tempo real e de forma paralela.
15. Mcollective
‣ Mcollective foi criado por R.I. Piennar
‣ Ele também criou o extlookup e hiera
‣ Linguagem Ruby
‣ Depende de Middleware (ApacheMQ).
‣ Provê orquestração e execução paralela de tarefas
‣ Provê inventário descentralizado (fatos/nodes/classes)
‣ Projeto modular com agentes e plugins
‣ Atualmente na versão 2.5.1
19. Se você quer orquestrar um package, no
servidor de gerência é necessário ter o
mcollective-package-client instalado, e
no node gerenciado é necessário ter o
mcollective-package-agent.
20. Middleware
# yum install activemq
# vim /etc/activemq/activemq.xml
# service activemq start
# tail -f /var/log/activemq/activemq.log
instale apenas no node de gerência
21. Mcollective
# yum install mcollective
# vim /etc/mcollective/server.cfg
# service mcollective start
# tail -f /var/log/mcollective.log
instale em todos os nodes
22. Mcollective Client
# yum install mcollective-client
# vim /etc/mcollective/client.cfg
# mco find
# mco ping
instale apenas no node de gerência
23. Mcollective Agents
‣ mcollective-package-agent
‣ mcollective-service-agent
‣ mcollective-puppet-agent
‣ mcollective-iptables-agent
‣ mcolective-filemgr-agent
‣ mcollective-nettest-agent
instale em todos os nodes
24. Mcollective Clients
instale apenas no node de gerência
‣ mcollective-package-client
‣ mcollective-service-client
‣ mcollective-puppet-client
‣ mcollective-iptables-client
‣ mcolective-filemgr-client
‣ mcollective-nettest-client
25. Data e hora devem estar rigorosamente
sincronizadas em todos os nodes para
que a orequestração funcione, isto é
uma dependência do sistema MQ.
27. mcollective-package-agent
Instalando um pacote em todos os nodes
# mco package htop install
Removendo um pacote de todos os nodes
# mco package htop uninstall
Removendo um pacotes e suas configurações de todos os nodes
# mco package htop purge
Atualuzando um pacote em todos os noses
# mco package htop update
Verificando o status de um pacote em todos os nodes
# mco package htop status
28. mcollective-service-agent
Iniciando um serviço em todos os nodes
# mco service sshd start
Verificando status de um serviço em todos os nodes
# mco service sshd status
Reinicie um serviço em todos os nodes
# mco service sshd restart
Desligando um serviço em todos os nodes
# mco service sshd stop
29. mcollective-puppet-agent
Acionando o puppet agent em todos os nodes
# mco puppet runonce
Acionando o puppet agent em splay em todos os nodes
# mco puppet runonce —-splay —splaylimit 120
Acionando o puppet agent em todos os nodes 10 por vez
# mco puppet runall 10
30. Verificando status dos agentes em todos os nodes
# mco puppet status
Verificando quantos nodes puppet foram encontrados
# mco puppet count
Estatística do puppet de todos os nodes
# mco puppet summary
mcollective-puppet-agent
31. Ativando agent puppet em todos os nodes
# mco puppet enable
Desativando agente puppet em todos os nodes
# mco puppet disable
# mco puppet disable "mensagem"
mcollective-puppet-agent
32. É possível utilizar o RAL para
manipular estados nos nodes
através do mcollective-puppet-
agent, mas é preciso habilitar isto.
33. Você precisa ativar o uso de resource
plugin.puppet.resource_allow_managed_resources = true
Você pode especificar quais recursos podem ser manipulados
!
plugin.puppet.resource_type_whitelist = host,service,user,exec
!
Você pode especificar quais recursos não podem ser manipulados
!
plugin.puppet.resource_type_blacklist = exec
/etc/mcollective/server.cfg
mcollective-puppet-agent
34. Se você especificar whitelist apenas o recursos descritos
serão liberados para uso do mcollective.
Se você especificar blacklist, apenas os recursos listados
estarão bloqueados e o restante estará liberado.
!
Não é possível especificar os dois ao mesmo tempo.
/etc/mcollective/server.cfg
mcollective-puppet-agent
35. Criando uma entrada no /etc/hosts em todos os nodes
# mco puppet resource host teste ip=192.168.0.1
Habilitando o serviço sshd no boot em todos os nodes
# mco puppet resource service sshd enable=true
Especificando que o sshd tem que estar rodando em todos os nodes
# mco puppet resource service sshd ensure=running
Especificando que o usuário gutocarvalho deve existir em todos os nodes
# mco puppet user gutocarvalho ensure=present
Rodando o comando uptime em todos os nodes
# mco puppet exec “/usr/bin/uptime”
mcollective-puppet-agent
36. mcollective-iptables-agent
Bloqueando um IP em todos o nodes
# mco iptables block 192.168.100.1
Verificando se o IP está bloqueado
# mco iptables isblocked 192.168.100.1
Desbloqueando um endereço IP
# mco iptables unblock 192.168.100.1
37. mcollective-filemgr-agent
Verificando o status do arquivo puppet.conf
# mco rpc filemgr status file=/etc/puppet/puppet.conf
Apagando um arquivo no diretório tmp
# mco rpc filemgr delete file=/tmp/file.txt
Aplicando touch em um arquivo
# mco rpc filemgr touch file=/tmp/outro_arquivo.txt
38. mcollective-nettest-agent
Verificando se os nodes conseguem pingar 8.8.8.8
# mco nettest ping 8.8.8.8
Verificando se os nodes conseguem se conectar ao host/porta
# mco nettest connect google.com 80
40. Sysctl data
Pesquisando por todas as máquinas com ip forward ativado
# mco find -S"sysctl('net.ipv4.conf.all.forwarding').value=1"
41. Facter Facts
Verificando se os nodes são VMs
# mco facts is_virtual
Verificando o OS dos nodes
# mco facts operatingsystem
Checando o OS do node7
# mco facts operatingsystem -I node7
42. O plugin facter facts é interessante e útil,
contudo, ele pode ser instável e lento
dependendo do seu setup, prefira o usar o
factersource yalm do mcollective.
48. Compound filter combining facts and classes
-S “fact and class”
-S “fact and not class”
-S “fact and !class"
-S “fact or class”
-S “fact or not class”
-S “fact or !class"
49. Complex compound or select queries
mco ping -S
((customer=governo and domain=local)
or operatingsystem=Debian) and /apache/"
50. exemplos de filtros
Instalando pacote telnet para o node1, node2 e node3.
# mco package install telnet -I node1 -I node2 -I node3
Instalando pacote em nodes com 2 CPUs ou mais
# mco package install telnet -F “physicalprocessorcount>=2"
Verificando status de pacote php em nodes com mcollective-service-agent
# mco package status php -A service
51. Atualizando pacote php em nodes com classe apache declarada
# mco package update openssl -C apache
Removendo pacote htop em nodes com sistema operacional Debian
# mco package uninstall htop -F operatingsystem=Debian
Atualizando pacote em nodes Debian com classse apache declarada para eles
# mco package update openssl -W “/apache/ operatingsystem=Debian"
exemplos de filtros
52. Enviando ping para nodes com OS debian ou Ubuntu
# mco ping -F “operatingsystem=Debian|Ubuntu
Verificando status do serviço em nodes app* utilizando regex
# mco service status sshd -I "/app[0-9]/"
Verificando status do serviço sshd utilizando fatos
# mco service sshd status -S “domain=local or customer=governo”
exemplos de filtros
53. Mesmo filtro utilizando E lógico
# mco service sshd status -S “domain=local and customer=governo”
Mesmo filtro E lógico com negação
# mco service sshd status -S “domain=local and not customer=governo”
# mco service sshd status -S “domain=local or !customer=governo”
exemplos de filtros
54. regex dentro dos filtros
Como usar regex dentro dos filtros?
# mco service status sshd -I “/app[0-9]/“
!
/ / determinam que o conteúdo do filtro é um regex
[0-9] vai casar com app0,app1…app9
57. RPC Agent
module MCollective
module Agent
class Helloworld<RPC::Agent
# Basic echo server
action "echo" do
validate :msg, String
reply[:msg] = request[:msg]
end
end
end
end
59. A orquestração começa aqui, escreva
agentes e clientes para solucionar
demandas de seu dia-a-dia, orquestre
seus deploys e upgrades, assuma o
controle de seu parque.
61. Comunidade Puppet
‣ Documentação oficial docs.puppetlabs.com
‣ Canal #puppet e #mcollective na freenode
‣ Canal #puppet-br na freenode
‣ Comunidade puppet-br.org
‣ Listas no google mcollective-users e puppet-users
‣ Lista no google puppet-users-br.
‣ Blog gutocarvalho.net ;)
62. Precisa de mais ajuda, algo além
da comunidade? Necessita de
suporte avançado?
63. Suporte oficial no Brasil
‣ Profissionais especializados em Puppet & Mcollective
‣ Cursos oficiais, Puppet Enterprise, consultoria e implantação
‣ 1o Parceiro oficial Puppetlabs Brasil
‣ 1o empresa com pessoas certificados PCP na América Latina
‣ Único parceiro com múltiplos profissionais certificados
‣ Acesse http://www.instruct.com.br
66. Contatos
‣ Mande e-mails para gutocarvalho@me.com
‣ Acesse o site/blog/wiki em http://gutocarvalho.net
‣ Acompanhe o twitter @gutocarvalho
‣ Pegue os slides em http://slideshare.com/gutocarvalho
‣ Me procure no canal #puppet-br na freenode