SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
Mcollective
Orquestrando o seu parque de servidores
<%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
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
Orchestration
Orches tration describes the aut omated
arrangement, coordination, and management of
complex computer systems, middleware, and
services.



http://en.wikipedia.org/wikiOrchestration_(computing)
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
Por que orquestrar se
eu já uso Puppet?
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?
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?
O Puppet também precisa de
gerenciamento, ele é um
serviço e necessita de eventual
manutenção.
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.
Essa consulta pode levar
m i n u t o s o u h o r a s
dependendo do seu setup.
Como fazer em tempo real?
Mcollective
Ferramenta mantida pela Puppetlabs que
implementada orquestração de servidores
em tempo real e de forma paralela.
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
Middleware (MQ)
‣ ActiveMQ
‣ RabbitMQ
Arquitetura
client middleware nodes
request
reply
Arquitetura
‣ Servidor de gerência
‣ ActiveMQ, Mcollective Client(s), Mcollective, Mcollective Agent(s)
‣ Servidores que serão orquestrados
‣ Mcollective, Mcollective Agent(s)
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.
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
Mcollective
# yum install mcollective
# vim /etc/mcollective/server.cfg
# service mcollective start
# tail -f /var/log/mcollective.log
instale em todos os nodes
Mcollective Client
# yum install mcollective-client
# vim /etc/mcollective/client.cfg
# mco find
# mco ping
instale apenas no node de gerência
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
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
Data e hora devem estar rigorosamente
sincronizadas em todos os nodes para
que a orequestração funcione, isto é
uma dependência do sistema MQ.
Mcollective Agents
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
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
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
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
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
É possível utilizar o RAL para
manipular estados nos nodes
através do mcollective-puppet-
agent, mas é preciso habilitar isto.
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
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
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
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
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
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
Data plugins
Sysctl data
Pesquisando por todas as máquinas com ip forward ativado
# mco find -S"sysctl('net.ipv4.conf.all.forwarding').value=1"
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
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.
Use filtros!
Facts filter
-F osfamily=RedHat
--wf osfamily=RedHat
--with-facts osfamily=RedHat
Class filter
-C someclass
--wc someclass
--with-class someclass
Agent filter
-A
--wa package
--with-agent service
Combined classes and facts filter
-W “/class/ fact=value”
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"
Complex compound or select queries
mco ping -S 
((customer=governo and domain=local)
or operatingsystem=Debian) and /apache/"
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
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
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
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
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
Construa seu agente!
RPC
Remote Procedure Call
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
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
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.
Precisa de ajuda com seu setup?
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 ;)
Precisa de mais ajuda, algo além
da comunidade? Necessita de
suporte avançado?
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
Obrigado!
Perguntas?
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

Contenu connexe

Tendances

Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...Samuel Sampaio
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppetElton Simões
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetRoberto Scudeller
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxElton Minetto
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosEduardo Legatti
 
Automação de Ambientes com Puppet
Automação de Ambientes com Puppet Automação de Ambientes com Puppet
Automação de Ambientes com Puppet 4LinuxCursos
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula IntroduçãoLuís Eduardo
 
Escalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQEscalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQMatheus Fidelis
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Iuri Andreazza
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppetDaniel Sobral
 

Tendances (19)

Trabalhando com Módulos no Puppet
Trabalhando com Módulos no PuppetTrabalhando com Módulos no Puppet
Trabalhando com Módulos no Puppet
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
Automação de Ambientes com Puppet
Automação de Ambientes com Puppet Automação de Ambientes com Puppet
Automação de Ambientes com Puppet
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula Introdução
 
Escalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQEscalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQ
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
 

Similaire à Orquestração com Mcollective

Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Um novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoUm novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoinstructbr
 
Project HA
Project HAProject HA
Project HAKarpv
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppetpericles_junior
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Felipe Blini
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univemevandrovv
 
Docker em Produção com Kubernetes
Docker em Produção com Kubernetes Docker em Produção com Kubernetes
Docker em Produção com Kubernetes Fernando Ruaro
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Wallison Marra
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Chef, Nginx e Capistrano: Como usar!
Chef, Nginx e Capistrano: Como usar!Chef, Nginx e Capistrano: Como usar!
Chef, Nginx e Capistrano: Como usar!Felipe Navas
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters) iG - Internet Group do Brasil S/A
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppetRamon Mota
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cactiIsraelCunha
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 

Similaire à Orquestração com Mcollective (20)

Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Um novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governoUm novo modelo de implantação do SEI no governo
Um novo modelo de implantação do SEI no governo
 
Project HA
Project HAProject HA
Project HA
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppet
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univem
 
Docker em Produção com Kubernetes
Docker em Produção com Kubernetes Docker em Produção com Kubernetes
Docker em Produção com Kubernetes
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Chef, Nginx e Capistrano: Como usar!
Chef, Nginx e Capistrano: Como usar!Chef, Nginx e Capistrano: Como usar!
Chef, Nginx e Capistrano: Como usar!
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cacti
 
Capistrano 3
Capistrano 3Capistrano 3
Capistrano 3
 
Puppet vs ansible
Puppet vs ansiblePuppet vs ansible
Puppet vs ansible
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 

Plus de Jose Augusto Carvalho

Plus de Jose Augusto Carvalho (9)

Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e devel
 
Cultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e develCultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e devel
 
Conhecendo o Wordpress
Conhecendo o WordpressConhecendo o Wordpress
Conhecendo o Wordpress
 
Monitoração avançada com Zabbix 2
Monitoração avançada com Zabbix 2Monitoração avançada com Zabbix 2
Monitoração avançada com Zabbix 2
 
O que é DevOps afinal?
O que é DevOps afinal?O que é DevOps afinal?
O que é DevOps afinal?
 
Palestra Puppet Hora Livre
Palestra Puppet Hora LivrePalestra Puppet Hora Livre
Palestra Puppet Hora Livre
 
Oficina Puppet latinoware
Oficina Puppet latinowareOficina Puppet latinoware
Oficina Puppet latinoware
 
Puppet Cloud IaaS
Puppet Cloud IaaSPuppet Cloud IaaS
Puppet Cloud IaaS
 
Documentando de forma Ágil (usando dokuwiki)
Documentando de forma Ágil (usando dokuwiki)Documentando de forma Ágil (usando dokuwiki)
Documentando de forma Ágil (usando dokuwiki)
 

Dernier

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Dernier (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Orquestração com Mcollective

  • 1. Mcollective Orquestrando o seu parque de servidores
  • 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
  • 6. Por que orquestrar se eu já uso Puppet?
  • 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.
  • 12. Como fazer em tempo real?
  • 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
  • 18. Arquitetura ‣ Servidor de gerência ‣ ActiveMQ, Mcollective Client(s), Mcollective, Mcollective Agent(s) ‣ Servidores que serão orquestrados ‣ Mcollective, Mcollective Agent(s)
  • 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.
  • 44. Facts filter -F osfamily=RedHat --wf osfamily=RedHat --with-facts osfamily=RedHat
  • 45. Class filter -C someclass --wc someclass --with-class someclass
  • 47. Combined classes and facts filter -W “/class/ fact=value”
  • 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
  • 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. 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. Precisa de ajuda com seu setup?
  • 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