Introducción
En esta entrada se explica cómo instalar un entorno del servidor de integración continua Jenkins en HA, de forma que se tengan preparados dos Jenkins Master.
La configuración descrita es de tipo activo-pasivo y utiliza la tecnología HAproxy.
La configuración descrita es de tipo activo-pasivo y utiliza la tecnología HAproxy.
Para ello se van a necesitar 3 máquinas.
- Máquina haproxy:
- Sistema operativo CentOS 6.5
- Software necesarios:
- haproxy
- IP: 192.168.1.50
- Máquina jenkins1:
- Sistema operativo CentOS 6.5
- Software necesario:
- jenkins.
- java 7 oracle.
- Máquina jenkins2: (Igual que la máquina jenkins1)
Instalación de jenkins
Las máquina jenkins1 y jenkins2 deben tener instalado Java7 de oracle, para este punto se puede seguir cualquiera de los tutoriales que se pueden encontrar por internet, por ejemplo este.
Para la instalación de Jenkins se puede seguir los pasos descritos en la propia página de Jenkins. (En la página instalan jdk6, es preferible instalar jdk7).
Los pasos descritos básicamente consisten en ejecutar estos 3 comandos:
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
Una vez instalado se puede especificar que se inicie el servicio al arrancar la máquina y arrancar el servicio:
chkconfig jenkins on
service jenkins start
Si no se le especifica lo contrario la home de jenkins está en el directorio /var/lib/jenkins .
Instalación y configuración HAproxy
HAproxy está dentro de los repositorios de CentOS con lo cuál su instalación es muy sencilla, simplemente consistes en ejecutar la siguiente instrucción:
yum install haproxy
El fichero de configuración de haproxy es el fichero /etc/haproxy/haproxy.cfg , se recomienda hacer una copia del fichero original:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig
Y sustituir el contenido de este por:
global
log 127.0.0.1 alert
log 127.0.0.1 alert debug
maxconn 4096
defaults
log global
mode http
option httplog
option dontlognull
option redispatch
retries 3
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
####################################
#
# loadbalancer
# 192.168.1.50:8555
# / \
# Jenkins1 Jenkins2
# 192.168.1.51:8080 192.168.1.52:8080
# (active) (passive)
#
####################################
listen jenkinsfarm 192.168.1.50:8555
mode http
stats enable
balance roundrobin
option httpclose
option forwardfor
option httplog
option httpchk GET /
server Jenkins1 192.168.1.51:8080 check inter 5000 downinter 500 # active node
server Jenkins2 192.168.1.52:8080 check inter 5000 backup # passive node
Como se puede ver, con la configuración realizada en haproxy, la máquina 192.168.1.50 (haproxy), hace de balanceador entre los dos máquinas jenkins, de forma que, si desde un navegador se va a http://192.168.1.50:8555 , haproxy ira contra jenkins1, si esta no responde realizará la petición al server backup, que es jenkins2.
Para poder realizar la prueba solo es necesario iniciar el servicio de haproxy:
service haproxy start
Y activarlo al iniciar la máquina:
chkconfig haproxy on
Configuración de los discos
Jenkins guarda toda la información de las construcciones en disco, este punto es muy importante, porque con la configuración descrita, cada jenkins master tiene su propia información de las construcciones, en un directorio local de cada máquina "/var/lib/jenkins"
Para solucionar este problema, se debe especificar una variable JENKIS_HOME que apunte a un directorio compartido entre los dos jenkins. Por ejemplo un NFS distribuido.
Una solución menos elegante, es ir sincronizando los directorios home de la dos máquinas.
Visualizar el estado de los servidores
HAproxy dispone de una página donde se muestra el estado de los servidores, la URL para este ejemplo es http://192.168.1.50:8555/haproxy?stats
En el caso de que jenkins1 este iniciado y jenkins2 parado, se vería algo así:
Solución empresarial Jenkins HA
Una solución empresarial para disponer de Jenkins en alta disponibilidad, es la que ofrece ClouBees, con su plugin High Availability Plugin.
Destacar que CloudBees ofrece muchas funcionalidades en su versión empresarial de Jenkins.
Destacar que CloudBees ofrece muchas funcionalidades en su versión empresarial de Jenkins.
Referencias
- https://www.thekua.com/atwork/2009/04/active-passive-load-balancer-configuration-for-haproxy/
- https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions
- https://www.cloudbees.com/products/jenkins-enterprise
- http://jenkins-enterprise.cloudbees.com/docs/user-guide-bundle/ha.html#