• Nenhum resultado encontrado

Mcollective. Orquestrando o seu parque de servidores

N/A
N/A
Protected

Academic year: 2021

Share "Mcollective. Orquestrando o seu parque de servidores"

Copied!
66
0
0

Texto

(1)

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

(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

(4)

Orchestration

O r c h e s t r a t i o n d e s c r i b e s t h e a u t o m a t e d

arrangement, coordination, and management of

complex computer systems, middleware, and

services.

(5)

Orquestração

Orquestrar significa invocar ações de forma paralela

ou não, em tempo real, em diversos servidores de

u m d a t a c e n t e r , f a z e n d o i s t o d e f o r m a

automatizada, eficiente e controlada.

(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

gerenciament o, 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)
(13)
(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

(16)

Middleware (MQ)

ActiveMQ

RabbitMQ

(17)

Arquitetura

client middleware nodes

request

(18)

Arquitetura

Servidor de gerência

ActiveMQ, Mcollective Client(s), Mcollective, Mcollective Agent(s)

Servidores que serão orquestrados

(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

(21)

Mcollective

# yum install mcollective

# vim /etc/mcollective/server.cfg

# service mcollective start

# tail -f /var/log/mcollective.log

(22)

Mcollective Client

# yum install mcollective-client

# vim /etc/mcollective/client.cfg

# mco find

# mco ping

(23)

Mcollective Agents

mcollective-package-agent

mcollective-service-agent

mcollective-puppet-agent

mcollective-iptables-agent

mcolective-filemgr-agent

mcollective-nettest-agent

(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.

(26)
(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

(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

(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"

(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

(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

(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”

(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


(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

(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

(39)
(40)

Sysctl data

Pesquisando por todas as máquinas com ip forward ativado

(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


(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)
(44)

Facts filter

-F osfamily=RedHat

--wf osfamily=RedHat

(45)

Class filter

-C someclass

--wc someclass

(46)

Agent filter

-A

--wa package

(47)

Combined classes and facts filter

(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)\

(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"

(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”

(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)
(56)

RPC

(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

(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)
(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.

(62)

Precisa de mais ajuda, algo além

da comunidade? Necessita de

(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

(64)
(65)
(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

Referências

Documentos relacionados

II. A exposição da Companhia decorre do financiamento do FINEP, corrigido pela TJLP, e das aplicações financeiras que são atualizadas pelo CDI. A variação desfavorável na taxa

• Bilhete trem “regionale”, 2° classe, sem reserva de assento, ida e volta, Roma Termini – Área das Colinas Romanas; • Van/Minibus com motorista para transfer

Conforme vem do referencial anterior, tal possibilidade pressupõe a necessidade de uma conceptualização e organização curriculares integradas, quer para facilitar a mobilidade

É nesse sentido que, cada vez mais, temos de fazer um esforço enorme para tentar perceber quais são os saberes estruturantes e aqueles que sem terem um nível de importância

É esta condição de cosmopolitismo social e cultural, que pressupõe como finalidade última (e primeira!) para a educação, para a escola e para os professores o desenvolvimento de

Verifica-se um certo nível de utilização, mais ou menos clara, dos novos conceitos, sem ainda se terem traduzido em práticas consistentes de ensino e avaliação, o que indicia que

Vejo sempre saber como saber em uso que é um pouco como vem no currículo nacional, o conceito de competência, mas a pergunta que lhes queria fazer, para ligar à discussão

[r]