O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Orquestração com Mcollective

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 66 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (19)

Semelhante a Orquestração com Mcollective (20)

Anúncio

Mais recentes (20)

Anúncio

Orquestração com Mcollective

  1. 1. Mcollective Orquestrando o seu parque de servidores
  2. 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. 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. 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. 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
  6. 6. Por que orquestrar se eu já uso Puppet?
  7. 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. 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. 9. O Puppet também precisa de gerenciamento, ele é um serviço e necessita de eventual manutenção.
  10. 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. 11. Essa consulta pode levar m i n u t o s o u h o r a s dependendo do seu setup.
  12. 12. Como fazer em tempo real?
  13. 13. Mcollective
  14. 14. Ferramenta mantida pela Puppetlabs que implementada orquestração de servidores em tempo real e de forma paralela.
  15. 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
  16. 16. Middleware (MQ) ‣ ActiveMQ ‣ RabbitMQ
  17. 17. Arquitetura client middleware nodes request reply
  18. 18. Arquitetura ‣ Servidor de gerência ‣ ActiveMQ, Mcollective Client(s), Mcollective, Mcollective Agent(s) ‣ Servidores que serão orquestrados ‣ Mcollective, Mcollective Agent(s)
  19. 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. 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. 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. 22. Mcollective Client # yum install mcollective-client # vim /etc/mcollective/client.cfg # mco find # mco ping instale apenas no node de gerência
  23. 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. 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. 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.
  26. 26. Mcollective Agents
  27. 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. 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. 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. 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. 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. 32. É possível utilizar o RAL para manipular estados nos nodes através do mcollective-puppet- agent, mas é preciso habilitar isto.
  33. 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. 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. 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. 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. 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. 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
  39. 39. Data plugins
  40. 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. 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. 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.
  43. 43. Use filtros!
  44. 44. Facts filter -F osfamily=RedHat --wf osfamily=RedHat --with-facts osfamily=RedHat
  45. 45. Class filter -C someclass --wc someclass --with-class someclass
  46. 46. Agent filter -A --wa package --with-agent service
  47. 47. Combined classes and facts filter -W “/class/ fact=value”
  48. 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. 49. Complex compound or select queries mco ping -S ((customer=governo and domain=local) or operatingsystem=Debian) and /apache/"
  50. 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. 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. 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. 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. 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
  55. 55. Construa seu agente!
  56. 56. RPC Remote Procedure Call
  57. 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
  58. 58. RPC Client #!/usr/bin/ruby require 'mcollective' include MCollective::RPC mc = rpcclient("helloworld") printrpc mc.echo(:msg => "Welcome to MCollective Simple RPC”) printrpcstats mc.disconnect
  59. 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.
  60. 60. Precisa de ajuda com seu setup?
  61. 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. 62. Precisa de mais ajuda, algo além da comunidade? Necessita de suporte avançado?
  63. 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
  64. 64. Obrigado!
  65. 65. Perguntas?
  66. 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

×