Asumiendo que tenemos instalado los repositorio de puppet y el puppetmaster corriendo, procederemos a instalar PuppetDB:
1. Instalamos puppetdb
[root@master ~]# puppet resource package puppetdb ensure=latest
Notice: /Package[puppetdb]/ensure: created
package { 'puppetdb':
ensure => '1.1.1-1.el6',
}
Dependiendo de la cantidad de nodos, hardware etc, se pueden realizar "tunning" al entorno Java que figuran en acá (sección Java Heap Size) .
PostgresSQL
2. Instalación de repositorio para luego instalar PostgresDB (que es donde almacenaremos la información)
rpm -Uvh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm
yum install postgresql93-server -y
3. Levantamos el servicio de base de datos y lo dejamos por defecto al arranque
service postgresql-9.3 initdb; service postgresql-9.3 start; chkconfig postgresql-9.3 on
4. Configuramos Postgres
[root@master ~]# vim /var/lib/pgsql/9.3/data/postgresql.conf
Y modificamos las siguiente variables quedando así:
listen_addresses = '*' log_line_prefix = '%t %u %d'
5. Creamos la instancia de base de datos y el usuario para acceder a ella
[root@master ~]# sudo -u postgres sh
[root@master ~]$ cd /var/lib/puppetdb
[root@master ~]$ createuser -DRSP puppetdb (ingresamos el passowrd -> puppetdb)
Enter password for new role: <colocamos el password>
[root@master ~]$ createdb -O puppetdb puppetdb
6. Configuramos los accesos a la base de datos
[root@master ~]# vim /var/lib/pgsql/9.3/data/pg_hba.conf
Cometamos la linea
###local all all peer
Y modificamos quedando así:
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
7. Reiniciamos los servicios postgres
[root@master ~]# service postgresql-9.3 restart
Stopping postgresql-9.2 service: [ OK ]
Starting postgresql-9.2 service: [ OK ]
8. Probamos el acceso
[root@master ~]# psql -h 127.0.0.1 puppetdb puppetdb psql (9.2.4) Type "help" for help. puppetdb=>
PuppetDB
9. Configuramos la información de la base de datos creada anteriormente en el archivo /etc/puppetdb/conf.d/database.ini donde tiene que quedar así
[root@master ~]# cat /etc/puppetdb/conf.d/database.ini| grep -v '^#'
[database]
classname = org.postgresql.Driver
subname = //localhost:5432/puppetdb
subprotocol = postgresql
username = puppetdb
password = puppetdb
10. Iniciamos el servicio PuppetDB
sudo puppet resource service puppetdb ensure=running enable=true
11. Instalamos PuppetDB Terminus
sudo puppet resource package puppetdb-terminus ensure=latest
12. Configuramos el puerto de escucha para trabajar con PuppetDB editando el archivo /etc/puppet/puppetdb.conf , quedando así:
[root@master ~]# cat /etc/puppet/puppetdb.conf | grep -v '^#'
[main] server = master.example.com port = 8081
13. Ahora, le diremos a Puppet que trabajará con PuppetDB y Postgres como servidor de base de datos adicionando en la sección [main] las variables
storeconfigs, storeconfigs_backend, dbadapter . Quedando así:
[root@master ~]# cat /etc/puppet/puppet.conf | grep -v '^#' |grep -v ' # ' [main]
logdir = /var/log/puppet rundir = /var/run/puppet ssldir = $vardir/ssl server = master.example.com storeconfigs = true storeconfigs_backend = puppetdb dbadapter = postgresql
[agent] classfile = $vardir/classes.txt localconfig = $vardir/localconfig
14. Creamos elarchivo /etc/puppet/routes.yaml con el siguiente contenido
---
master:
facts:
terminus: puppetdb
cache: yaml
Este archivo es sensible a los espacios de tabulación por lo que si al reiniciar los servicios arroja error de sintaxis puede ser producto de lo mismo
Aug 26 12:22:39 master puppet-master[1960]: Could not configure routes from /etc/puppet/routes.yaml: syntax error on line 3, col 16: ` cache: yaml'
15. Reiniciamos los servicios Puppet y PuppetDB
service puppetdb restart && service puppetmaster restart
Comprobación de servicios
En el servidor Puppet tenemos que tener corriendo los puertos 8080 y 8081 (Referentes a las configuraciones de PuppetDB) y el 5432 (Referente a la configuración de Postgres)
[root@master ~]# netstat -tlpn | egrep '8080|8081|5432'
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 2708/postmaster
tcp 0 0 ::ffff:127.0.0.1:8080 :::* LISTEN 2786/java
tcp 0 0 ::ffff:10.0.0.138:8081 :::* LISTEN 2786/java
tcp 0 0 :::5432 :::* LISTEN 2708/postmaster
[root@master ~]#
Y cuando conectemos un nodo, se creará toda la estructura de la base de datos
[root@master ~]# !psql
psql -h 127.0.0.1 puppetdb puppetdb
psql (9.2.4)
Type "help" for help.
puppetdb=> \d
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | catalog_resources | table | puppetdb
public | catalogs | table | puppetdb
public | certname_catalogs | table | puppetdb
public | certname_facts | table | puppetdb
public | certname_facts_metadata | table | puppetdb
public | certnames | table | puppetdb
public | edges | table | puppetdb
public | reports | table | puppetdb
public | resource_events | table | puppetdb
public | resource_params | table | puppetdb
public | schema_migrations | table | puppetdb
(11 rows)
Y podemos hacer alguna query de lo que tenemos almacenado:
puppetdb=> select * from certname_facts where name = 'operatingsystem';
certname | name | value
-------------------+-----------------+--------
node2.example.com | operatingsystem | CentOS
(1 row)
PuppetDB va dejando la información del facter de la conexión de los nodos en el siguiente log /var/lib/puppetdb/db/db.log
Referencias:
http://docs.puppetlabs.com/puppetdb/latest/connect_puppet_master.html Y otras URL que no me recuerdo.
0 Comentarios