Instalando ActiveMQ 5.9 para Mcollective 2.8.2 do Puppet Agent 1.2.2 no CentOS 7 (v1.0)
1. Mcollective no Puppet 4
O Puppet Agent 1.2.2 do Puppet 4.2 já traz o Mcollective embutido, se você instalou o agente do puppet você também instalou o Mcollective. Neste post vou mostrar como instalar o ActiveMQ e como configurar o Mcollective do Puppet Agent 1.2.2 do Puppet 4 para falar com o ActiveMQ.
Este post é resultado de um dia de hacklab que fiz com o Miguel Filho (@mciurcio).
2. Dependências
Instalar o Puppet Agent e Server do Puppet 4.2 conforme o post anterior é pré-requisito, vamos usar a mesma VM para rodar o ActiveMQ e utilizar o Mcollective.
2.1 Cenário
Vagrant+Virtualbox rodando VM com CentOS 7
Puppet Agent 1.2.2 (Puppet 4.2)
Mcollective 2.8.2 embutido no puppet-agent 1.2.2 (Puppet 4.2)
ActiveMQ 5.9
3. Apache ActiveMQ 5.9
O ActiveMQ é o serviço de fila utilizado pelo Mcollective.
3.2 Instalando Repositório
Para instalar o ActiveMQ é necessário utilizar pacotes do Puppet 3.x pois ele ainda não está no repositório PC1 do Puppet 4.2.
[root@puppetserver4 ~]# yum install http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm -y
3.1 Instalando ActiveMQ
[root@puppetserver4 ~]# yum install activemq -y
3.2 Configurando ActiveMQ
Edite o arquivo de configuração do Mcollective Server
[root@puppetserver4 ~]# vim /etc/activemq/activemq.xml
Apague o conteúdo anteriror, adicione o conteúdo abaixo ao arquivo
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="puppetserver4.hacklab" useJmx="true">
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<plugins>
<statisticsBrokerPlugin/>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="mcollective" password="marionette" groups="mcollective,everyone"/>
<authenticationUser username="admin" password="admin" groups="mcollective,admins,everyone"/>
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<authorizationEntry queue="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="everyone" write="everyone" admin="everyone"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="20 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb" name="foo"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
<transportConnector name="stomp+nio" uri="stomp://0.0.0.0:61613"/>
</transportConnectors>
</broker>
</beans>
Salve
:wq
Crie o link simbólico do diretório data
[root@puppetserver4 ~]# ln -s /usr/share/activemq/data /usr/share/activemq/activemq-data
Há um issue aberto para corrigir essa questão do link, vote pela correção!
https://github.com/puppetlabs/puppetlabs-activemq/pull/38
3.3 Iniciando ActiveMQ
Inicie o serviço com o comando abaixo
[root@puppetserver4 ~]# systemctl start activemq
3.4 Verificando Serviço
Verifique no arquivo de log do serviço se ele subiu
[root@puppetserver4 ~]# tail -f /var/log/activemq/activemq.log
Uma linha similar a esta deve estar presente nas últimas linhas
2015-08-21 19:50:40,791 [main ] INFO BrokerService - Apache ActiveMQ 5.9.1 (puppetserver4.hacklab, ID:puppetserver4.hacklab-52815-1440186640199-0:1) started
Verifique se a porta 61613 TCP está em modo LISTEN
[root@puppetserver4 activemq]# netstat -ntpl|grep 61613
tcp6 0 0 :::61613 :::* LISTEN 19183/java
Se teve todas essas saídas seu ActiveMQ está ok!
4. Mcollective 2.8.2
O Mcollective é o oquestrador do Puppet, o principal objetivo dele é invocar o agente do puppet de forma direta e paralela caso necessário, fazendo isto em todos os nodes do seu parque - quando for preciso fazê-lo.
4.1 Configurando Mcollective Server
Edite o arquivo abaixo server.cfg do mcollective
[root@puppetserver4 ~]# vim /etc/puppetlabs/mcollective/server.cfg
Apague o conteúdo anteriror, adicione o conteúdo abaixo ao arquivo
main_collective = mcollective
collectives = mcollective
libdir = /opt/puppetlabs/puppet/lib/ruby/vendor_ruby:/opt/puppetlabs/mcollective/plugins
logfile = /var/log/mcollective.log
loglevel = info
identity = puppetserver4.hacklab
daemonize = 1
direct_addressing = 0
# Plugins
securityprovider = psk
plugin.psk = hacklab
connector = activemq
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = puppetserver4.hacklab
plugin.activemq.pool.1.port = 61613
plugin.activemq.pool.1.user = mcollective
plugin.activemq.pool.1.password = marionette
plugin.activemq.pool.1.ssl = false
plugin.package.provider = puppet
plugin.puppetca.cadir = /srv/puppetca/ca/
# Facts
factsource = yaml
plugin.yaml = /etc/puppetlabs/mcollective/facts.yaml
classesfile = /var/lib/puppet/state/classes.txt
# Registration
registerinterval = 300
registration = Agentlist
Reinicie o Mcollective.
[root@puppetserver4 ~]# systemctl restart mcollective
4.1.1 Verificando Mcollective Server
Verifique no log se o mcollective se conectou ao activeMQ
[root@puppetserver4 mcollective]# tail -f /var/log/mcollective.log
Você verá uma mensagem similar a esta
[2015-08-21T19:50:53.749595 #20554] INFO -- : activemq.rb:119:in `on_connected' Connected to stomp://mcollective@puppetserver4.hacklab:61613
Se recebeu uma linha similar, seu Mcollective Server está Ok
4.2 Configurando Mcollective Client
Edite o arquivo de configuração do Mcollective Client
[root@puppetserver4 ~]# vim /etc/activemq/activemq.xml
Adicione o conteúdo abaixo ao arquivo
main_collective = mcollective
collectives = mcollective
libdir = /opt/puppetlabs/puppet/lib/ruby/vendor_ruby:/opt/puppetlabs/mcollective/plugins
logfile = /dev/null
loglevel = info
direct_addressing = 0
# Plugins
securityprovider = psk
plugin.psk = hacklab
plugin.package.provider = puppet
connector = activemq
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = puppetserver4.hacklab
plugin.activemq.pool.1.port = 61613
plugin.activemq.pool.1.user = mcollective
plugin.activemq.pool.1.password = marionette
plugin.activemq.pool.1.ssl = false
# Facts
factsource = yaml
plugin.yaml = /etc/puppetlabs/mcollective/facts.yaml
default_discovery_method = mc
4.3 Testando Mcollective
Buscando nodes com serviço mcollective rodando
[root@puppetserver4 mcollective]# mco find
puppetserver4.hacklab
Enviando ping para verificar tempo de resposta dos nodes
[root@puppetserver4 mcollective]# mco ping
puppetserver4.hacklab time=18.49 ms
5. Amarrando as pontas
Apesar das mudanças em Paths o Mcollective continua o mesmo. No momento ainda não existem pacotes com os plugins para manipular seviços, pacotes e o próprio Puppet, é necessário instalar os plugins manualmente, vou tratar da instalação destes plugins no próximo post.
[s]
Guto