User Tools

Site Tools


instalando:centos_mcollective_activemq

objetivo

Demonstrar a instalação do orquestrador Mcollective em ambiente CentOS 6 utilizando o ActiveMQ como sistema de mensageria.

mcollective

O Mcollective é um framework que te permite trabalhar com orquestração de servidores ou execução paralela de tarefas em seus nodes. Em essência, orquestração significa invocar ações em paralelo em todo o seu parque de servidores de uma forma direta, eficiente e além disto em tempo real.

activemq

O Mcollective (MCO) depende de algum sistema de mensageria, é possível utilizar tanto o Apache ActiveMQ quanto o RabbitMQ, ambos tem suporte ao protocolo STOMP, necessário para o funcionamento do orquestrador. Apesar de ambos funcionarem, o desenvolvedor e fundador do projeto recomenda o uso do ActiveMQ, justificando que algumas funcionalidades só vão rodar nele.

requisitos

Estou partindo da ideia de que você vai instalar na mesma maquina do puppetmaster.

Só prossiga se você já fez a instalação do puppetmaster e depois fez a integração com o passenger.

Essa wiki é uma continuação destas últimas duas wikis, apesar do Mcollective não depender do Puppet, a ideia é utilizá-lo para interagir e disparar os agentes puppet no momento que você desejar, também poderemos buscar fatos dos nodes gerenciados.

ntp

Para o uso de um sistema de mensageria é importantíssimo que a data e hora de seus servidores estejam corretas e sincronizadas, portanto instale o NTP em seus servidores e aponte para uma mesma origem.

yum install ntp
chkconfig ntp on
service ntp start

Se seus servidores estiverem com data e hora incorretas e fora de sincronia, o mcollective pode não encontrar todos os nodes e não irá funcionar corretamente, fica a dica.

legendas

nomedescrição
serverreferência ao servidor puppetmaster
masterreferência ao servidor puppetmaster
agentreferência a um servidor gerenciado pelo puppetmaster
nodereferência a um servidor gerenciado pelo puppetmaster

instalando

Vamos instalar os serviços do ActiveMQ e Mcollective.

Vamos instalar alguns clientes do Mcollective (mcollective-client, mcollective-puppet-client) e os agentes para manipular o Puppet (mcollective-puppet-agent).

puppetmaster

Instale os pacotes abaixo

[root@puppet ~]# yum install activemq mcollective mcollective-client mcollective-puppet-agent mcollective-puppet-client

nodes

[root@agent ~]# yum install mcollective mcollective-puppet-agent

sobre os pacotes

nomedescriçãovai no node?vai no master?
mcollectiveserviço do mcollectiveokok
mcollective-clientcliente para manipular o mcollectivenook
mcollective-puppet-clientcliente para manipular agentes puppetnook
mcollective-puppet-agentagente que roda o puppet no nodeokok

Entenda que os clientes só precisam ser instalados no master.

Os agentes precisam estar instalados nos nodes, eles serão acionados pelo respectivo client no master.

configurando

puppetmaster

activemq

Edite o aquivo /etc/activemq/activemq.xml

[root@puppet ~]# vim /etc/activemq/activemq.xml

Altere a senha do usuário mcollective na linha 109 para hacklab.

<authenticationUser username="mcollective" password="hacklab" groups="mcollective,admins,everyone"/>

mcollective

Edite o arquivo /etc/mcollective/server.cfg

[root@puppet ~]# vim  /etc/mcollective/server.cfg

Apague o conteúdo atual e coloque conteúdo abaixo:

#
# /etc/mcollective/server.cfg
#

# Connector settings (required):
# -----------------------------

connector = activemq
direct_addressing = 1

# ActiveMQ connector settings:
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = 192.168.200.1
plugin.activemq.pool.1.port = 61613
plugin.activemq.pool.1.user = mcollective
plugin.activemq.pool.1.password = hacklab
#plugin.activemq.pool.1.ssl = 1
#plugin.activemq.pool.1.ssl.ca = /var/lib/puppet/ssl/certs/ca.pem
#plugin.activemq.pool.1.ssl.cert = /var/lib/puppet/ssl/certs/web01.example.com.pem
#plugin.activemq.pool.1.ssl.key = /var/lib/puppet/ssl/private_keys/web01.example.com.pem
#plugin.activemq.pool.1.ssl.fallback = 0


# Security plugin settings (required):
# -----------------------------------

#securityprovider = ssl

# SSL plugin settings:
#plugin.ssl_client_cert_dir = /etc/mcollective.d/clients
#plugin.ssl_server_private = /etc/mcollective.d/server_private.pem
#plugin.ssl_server_public = /etc/mcollective.d/server_public.pem

# PSK plugin settings:
plugin.psk = hacklab

# Facts, identity, and classes (recommended):
# ------------------------------------------

factsource = yaml
plugin.yaml = /etc/mcollective/facts.yaml

#identity = web01.example.com

classesfile = /var/lib/puppet/state/classes.txt

# Registration (recommended):
# -----------------------

#registerinterval = 600
#registration = agentlist
#registration_collective = mcollective

# Subcollectives (optional):
# -------------------------

collectives = mcollective
main_collective = mcollective

# Auditing (optional):
# -------------------

#rpcaudit = 1
#rpcauditprovider = logfile
#plugin.rpcaudit.logfile = /var/log/mcollective-audit.log

# Authorization (optional):
# ------------------------

#rpcauthorization = 1
#rpcauthprovider = action_policy

# Logging:
# -------

logger_type = file
loglevel = info
logfile = /var/log/mcollective.log
keeplogs = 5
max_log_size = 2097152
logfacility = user

# Platform defaults:
# -----------------

daemonize = 1
libdir = /usr/libexec/mcollective
#ssl_cipher = aes-256-cbc

Esse arquivo leva em consideração que estamos utilizando o ActiveMQ, senha hacklab para o usuário mcollective, fila mcollective no ActiveMQ, ip 192.168.200.1 para conexão no servidor ActiveMQ conforme configurações dos tutoriais anteriores, portanto, caso tenha modificado algo por favor faça os devidos ajustes.

mcollective-client

O arquivo do mcollective-client é igual ao do mcollective, logo faremos apenas uma cópia deste

[root@puppet ~] cd /etc/mcollective
[root@puppet mcollective] cp server.cfg client.cfg

nodes

mcollective

Copie o arquivo /etc/mcollective/server.cfg do puppetmaster para seus agentes e reinicie o servico.

[root@puppet ~] scp /etc/mcollective/server.cfg root@agent.hacklab:

Copie o arquivo de configuração

[root@agent ~] cp /root/server.cfg /etc/mcollective

iniciando

puppetmaster

activemq

ative no boot

[root@puppet ~]# chkconfig activemq on

inicie o servico

[root@puppet ~]# service activemq start

verifique se iniciou

[root@puppet ~]# tail -f /var/log/activemq/activemq.log

veja a saída, será similar a esta

...
2013-12-24 23:59:20,210 [erSimpleAppMain] INFO  WebAppContext                  - ActiveMQ Console at http://0.0.0.0:8161/admin
2013-12-24 23:59:20,234 [erSimpleAppMain] INFO  ContextHandler                 - started o.e.j.w.WebAppContext{/camel,file:/var/lib/activemq/webapps/camel}
2013-12-24 23:59:20,243 [erSimpleAppMain] INFO  WebAppContext                  - WebApp@2092447388 at http://0.0.0.0:8161/camel
2013-12-24 23:59:20,269 [erSimpleAppMain] INFO  ContextHandler                 - started o.e.j.w.WebAppContext{/demo,file:/var/lib/activemq/webapps/demo}
2013-12-24 23:59:20,278 [erSimpleAppMain] INFO  WebAppContext                  - WebApp@2092447388 at http://0.0.0.0:8161/demo
2013-12-24 23:59:20,301 [erSimpleAppMain] INFO  ContextHandler                 - started o.e.j.w.WebAppContext{/fileserver,file:/var/lib/activemq/webapps/fileserver}
2013-12-24 23:59:20,326 [erSimpleAppMain] INFO  WebAppContext                  - WebApp@2092447388 at http://0.0.0.0:8161/fileserver
2013-12-24 23:59:20,383 [erSimpleAppMain] INFO  AbstractConnector              - Started 
SelectChannelConnector@0.0.0.0:8161
...

Se você está vendo algo parecido com isto, o activeMQ subiu corretamente, você pode inclusive acessar o painel web do activemq para visualizar os dados das filas disponíveis.

http://ip-da-vm-puppetmaster:8161/admin/

mcollective

ative no boot

[root@puppet ~]# chkconfig mcollective on

inicie o servico

[root@puppet ~]# service mcollective on

verifique no log se o mcollective se conectou no activemq

[root@puppet ~]# tail -f /var/log/mcollective.log

a saída será parecida com esta

...
I, [2013-12-25T00:32:27.512786 #38751]  INFO -- : mcollectived:35 The Marionette Collective 2.2.4 started logging at info level
I, [2013-12-25T00:32:27.552998 #38754]  INFO -- : activemq.rb:96:in `on_connecting' TCP Connection attempt 0 to stomp://mcollective@192.168.200.1:61613
I, [2013-12-25T00:32:27.574791 #38754]  INFO -- : activemq.rb:101:in `on_connected' Conncted to stomp://mcollective@192.168.200.1:61613
...

se aparecer connected no log a conexão funcionou.

nodes

mcollective

ative no boot

[root@agent ~]# chkconfig mcollective on

inicie o serviço

[root@agent ~]# service mcollective on

verifique no log se conectou

[root@agent ~]# tail -f /var/log/mcollective.log

a saída será parecida com esta

I, [2013-12-24T23:40:01.302209 #28106]  INFO -- : mcollectived:35 The Marionette Collective 2.2.4 started logging at info level
I, [2013-12-24T23:40:01.353918 #28109]  INFO -- : activemq.rb:96:in `on_connecting' TCP Connection attempt 0 to stomp://mcollective@192.168.200.1:61613
I, [2013-12-24T23:40:01.373954 #28109]  INFO -- : activemq.rb:101:in `on_connected' Conncted to stomp://mcollective@192.168.200.1:61613

se aparecer connected no log a conexão funcionou.

manipulando

Agora vamos manipular os nodes via mcollective, temos alguns recursos nativos que iremos abordar e agente puppet.

find

buscando nodes com mcollective ativo

[root@puppet ~]# mco find

veja a saída

agent.hacklab
puppet.hacklab

ping

pingando nodes com mcollective ativo

[root@puppet ~]# mco ping

veja a saída

agent.hacklab                            time=111.70 ms
puppet.hacklab                           time=150.60 ms
---- ping statistics ----
2 replies max: 150.60 min: 111.70 avg: 131.15

puppet

solicitando a execução do puppet em todos os nodes

[root@puppet ~]# mco puppet runonce

veja a saída

 * [ ============================================================> ] 2 / 2




Finished processing 2 / 2 hosts in 61.62 ms

solicitando a execução do puppet em todos os nodes (verbose mode)

[root@puppet ~]# mco puppet runonce -v

veja a saída

Discovering hosts using the mc method for 2 second(s) .... 2

 * [ ============================================================> ] 2 / 2


agent.hacklab                           : OK
    {:summary=>"Signalled the running Puppet Daemon"}

puppet.hacklab                          : OK
    {:summary=>"Signalled the running Puppet Daemon"}



---- rpc stats ----
           Nodes: 2 / 2
     Pass / Fail: 2 / 0
      Start Time: Wed Dec 25 01:22:18 -0200 2013
  Discovery Time: 2003.94ms
      Agent Time: 2092.84ms
      Total Time: 4096.78ms

solicitando execução do puppet em apenas um host

[root@puppet ~]# mco puppet runonce -I agent.hacklab

veja a saída

 * [ ============================================================> ] 1 / 1




Finished processing 1 / 1 hosts in 394.29 ms

solicitando execução do puppet em todos os hosts, rodando em grupos de 10 nodes por vez

[root@puppet ~]# mco puppet runall 10

veja a saída

2013-12-25 01:25:40: Running all nodes with a concurrency of 10
2013-12-25 01:25:40: Discovering enabled Puppet nodes to manage
2013-12-25 01:25:43: Found 2 enabled nodes
2013-12-25 01:25:47: agent.hacklab schedule status: Signalled the running Puppet Daemon
2013-12-25 01:25:47: puppet.hacklab schedule status: Signalled the running Puppet Daemon

referências

instalando/centos_mcollective_activemq.txt · Last modified: 2015/01/28 15:25 by gutocarvalho