puppet10
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á …
