Archivo

Entradas Etiquetadas ‘mongrel’

puppet10

Miércoles, 21 de julio de 2010

Puppet(X): Mejora del rendimiento de Puppet con Mongrel

Al ir añadiendo clientes a nuestro servidor Puppet nos podemos encontrar que de vez en cuando se producen errores en los clientes a la hora de obtener del servidor los ficheros que tienen que ser gestionados.

Entre otras causas esto puede ser debido a que Puppet viene de serie con un servidor web (Webrick) que no está pensado para un gran número de clientes simultáneos. Desde la propia web de Puppet se nos comenta esta situación y vienen instrucciones de como sustituir este servidor web por otro como Mongrel que es capaz de atender más peticiones simultáneas.

En la dirección http://projects.reductivelabs.com/projects/puppet/wiki/Using_Mongrel_On_Enterprise_Linux es donde podemos encontrar la información de como configurar Puppet para usar Mongrel.

Lo que vamos a configurar es 4 instancias del servidor Mongrel y delante de ellas un Apache 2.2 con el mod_proxy_balancer repartiendo las peticiones de los clientes entre estas 4 instancias.

Teniendo configurado el repositorio EPEL, se han seguido los siguientes pasos para la instalación de Puppet con Mongrel:

# yum install rubygem-mongrel  mod_ssl
# service puppetmaster stop

Editamos el fichero /etc/sysconfig/puppetmaster y descomentamos la línea:

PUPPETMASTER_PORTS=(  18140 18141 18142 18143 )
# service puppetmaster  start

Ahora configuramos el Apache y para ello nos creamos un nuevo fichero /etc/httpd/conf.d/puppet.conf con el siguiente contenido:

Listen 8140

<Proxy  balancer://puppetmaster>
 BalancerMember  http://127.0.0.1:18140
 BalancerMember http://127.0.0.1:18141
 BalancerMember http://127.0.0.1:18142
 BalancerMember  http://127.0.0.1:18143
</Proxy>

<VirtualHost  *:8140>
 SSLEngine On
 SSLCipherSuite  SSLv2:-LOW:-EXPORT:RC4+RSA
 SSLCertificateFile  /var/lib/puppet/ssl/certs/puppetserver.pem
 SSLCertificateKeyFile  /var/lib/puppet/ssl/private_keys/puppetserver.pem
 SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
 SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
 SSLVerifyClient optional
 SSLVerifyDepth 1
 SSLOptions +StdEnvVars

 RequestHeader set X-Client-DN  %{SSL_CLIENT_S_DN}e
 RequestHeader set X-Client-Verify  %{SSL_CLIENT_VERIFY}e

 <Location />
 SetHandler balancer-manager
 Order allow,deny
 Allow from all
 </Location>

 ProxyPass /  balancer://puppetmaster/
 ProxyPassReverse /  balancer://puppetmaster/
 ProxyPreserveHost On

 ErrorLog /var/log/httpd/balancer_error_log
 CustomLog  /var/log/httpd/balancer_access_log combined
 CustomLog  /var/log/httpd/balancer_ssl_requests "%t %h %{SSL_PROTOCOL}x  %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Si tenemos activado SELinux, hemos de configurarlo para permitir que está infraestructura funcione. Para ello ejecutamos estos dos comandos:

# semanage port -a -t http_port_t -p tcp 8140
# setsebool -P httpd_can_network_connect = 1

Este último comando no se referencia en las instrucciones de la web de Puppet, pero en mi caso ha sido necesario para que Puppet funcionara.

Reiniciamos Apache y ya está:

# service httpd restart

… Continuará …

Linux , ,