Jira DataCenter: ¿qué es? Como funciona ¿Cómo desplegar?

Introduccion


Con la difusión de la filosofía Agile, los especialistas de TI rusos cada año obtienen cada vez más experiencia y competencias en el campo de la personalización y gestión de productos para equipos de desarrollo, el más popular de los cuales sigue siendo Jira. Sin embargo, trabajar con la versión más antigua, productiva y altamente accesible del mismo, Jira Data Center, aún plantea muchas preguntas. En esta publicación, hablaré sobre algunos de los principios y mecanismos del Jira DataCenter que aplicamos en la práctica. Comenzaré con una historia sobre la estructura del grupo Jira.

¿Qué es un centro de datos Jira?


Jira DataCenter es esencialmente una versión de servidor, pero con la capacidad de usar una base de datos común y un índice compartido.

Es importante comprender que el Jira DataCenter en sí mismo, como producto y como aplicación, NO proporciona tolerancia a fallas y equilibrio de carga. Los módulos y sistemas son responsables de esto, con lo cual el producto Atlassian no tiene relación.

En otras palabras, Atlassian brinda soporte para trabajar en un clúster, pero el clúster en sí se implementa por medios externos, cuya elección es bastante rica.

Las descripciones detalladas de los productos están disponibles en el sitio web de Atlassian .

Hay varias opciones de construcción:

1. En infraestructura propia
2. En Amazon Cloud (AWS)
3. En la nube de MS (Azure)

Este artículo describirá una solución para su propia infraestructura.

¿Qué problemas resuelve el Jira DataCenter?


Jira Data Center lo ayuda a lograr los siguientes objetivos:

  1. Implementación de tolerancia a fallas.
  2. Asegurando una operación estable bajo alta carga. La carga alta se refiere a instancias de gran escala / empresa, de acuerdo con la Guía de dimensionamiento de Jira .
  3. Asegurar una operación continua cuando se necesita mantenimiento. En este punto habitaré por separado. La aplicación a menudo necesita actualizarse y no todas las empresas tienen la capacidad de hacer esto de manera rápida e invisible para los usuarios. Este problema se resuelve agrupando y utilizando el llamado esquema de actualización de Tiempo de inactividad cero .

Estos problemas se abordan mediante clustering y una arquitectura escalable.

¿Cuáles son los componentes de un Jira DataCenter?


Como puede ver en la figura a continuación, el clúster Jira DataCenter es una colección de varias máquinas dedicadas.

imagen
Figura 1. Arquitectura del centro de datos de Jira

  1. Nodos de aplicación (nodos de aplicación o nodos de clúster). Aceptan y procesan todas las cargas de trabajo y solicitudes. El rol de los nodos es desempeñado por servidores ordinarios, con contenido idéntico y aplicación instalada, así como un sistema de archivos compartidos montado.
  2. Sistema de archivos (sistema de archivos compartidos) con características estándar para importar / exportar archivos, complementos, almacenamiento en caché, etc. Un servidor de archivos también es un servidor separado en el que se crea una carpeta o recurso compartido, que se monta en los nodos y se utiliza para los archivos compartidos.
  3. Base de datos compartida El servidor de bases de datos también es, en este caso, un servidor separado y se puede construir en MS SQL, PostgreSQL, MySQL, Oracle.
  4. Balanceador de carga Distribuye las solicitudes de los usuarios y las entrega a los nodos, y si uno de ellos falla, el equilibrador redirige sus solicitudes a otros nodos casi al instante. Gracias a su trabajo, los usuarios ni siquiera notan la falla de un nodo. Hablaremos a continuación sobre el trabajo del equilibrador por separado.

Topología de clúster del centro de datos de Jira


Daré los principios básicos por los cuales se construye un clúster en JDC:

  • Las instancias de Jira comparten una base de datos común;
  • El índice de Lucene se replica en tiempo real y se almacena localmente por instancia;
  • los archivos adjuntos se almacenan en un repositorio común;
  • Las instancias de Jira supervisan la coherencia de la memoria caché;
  • en cualquier momento, varias instancias pueden estar activas al mismo tiempo;
  • las cerraduras del racimo están disponibles;
  • el equilibrador está configurado para redirigir las solicitudes solo a los nodos activos, mientras que no tiene que redirigir las solicitudes a los nodos inactivos, ni puede dirigir todas las sesiones a un nodo.

Todos los nodos se dividen en activos y pasivos. Los nodos activos difieren en que ellos:

  • Procesar solicitudes
  • Realizar procesos y tareas en segundo plano
  • Las tareas programadas se pueden configurar en una o más de ellas.
  • En todos los escenarios prácticos, la situación se verá como el uso de un servidor Jira estándar. En consecuencia, los nodos pasivos no procesan solicitudes y no realizan tareas, pero sirven para asumir una carga de trabajo a corto plazo (por ejemplo, al inicio del sistema, carga de complementos y / o indexación).

La siguiente figura muestra el funcionamiento del clúster Jira

imagen
Figura 2. Un diagrama simplificado de la arquitectura.

Sobre equilibradores de carga


El equilibrador puede ser cualquier servidor con un proxy inverso instalado o un dispositivo físico. Daré los ejemplos más famosos de equilibradores.

1. Balanceadores de hardware:

• Cisco
• enebro
• F5

2. Balanceadores de software:

• mod_proxy (Apache): un servidor proxy para Apache HTTP Server que admite los protocolos más populares y varios algoritmos de equilibrio de carga diferentes.

• Varnish es un servidor proxy HTTP acelerador y acelerador, está diseñado para sitios con mucho tráfico. A diferencia de otros, es solo un servidor proxy y un equilibrador de carga del tráfico HTTP. En particular, Varnish utiliza Wikipedia, NY Times, The Guardian y muchos otros grandes proyectos.

• Nginx: el servidor web número 1 en popularidad entre los equilibradores de carga y las soluciones proxy para sitios con mucho tráfico. Se está desarrollando activamente, el fabricante ofrece una versión gratuita y corporativa. Utilizado en muchos de los sitios más visitados del mundo, por ejemplo, WordPress.com, Zynga, Airbnb, Hulu, MaxCDN.

• Nginx Plus: de hecho, la versión corporativa paga de Nginx mencionada anteriormente.

• HAProxy es una herramienta gratuita de código abierto que proporciona capacidades de equilibrio de carga y proxy para protocolos TCP / HTTP. Es rápido y consume pocos recursos del sistema, compatible con Linux, Solaris, FreeBSD y Windows.

Puede encontrar una buena comparación de servidores proxy aquí en este enlace .

Proxies de avance y retroceso


Los equilibradores de carga pueden funcionar como proxies tanto directos como inversos. La diferencia fue bien descrita por el autor de este comentario en stackoverflow:

1. "Reenviar proxy" (Reenviar proxy). El evento proxy en este caso es que el "proxy directo" recupera datos de otro sitio web en nombre del solicitante original. Como ejemplo, daré una lista de tres computadoras conectadas a Internet.

X = computadora o computadora cliente en Internet
Y = sitio web proxy, proxy.example.org
Z = el sitio web que desea visitar es www.example.net
Por lo general, puede conectarse directamente desde X -> Z. Sin embargo, en algunos escenarios es mejor Y -> Z en nombre de X, que se ve así en una cadena: X -> Y -> Z.

2. "Proxy inverso" (proxy inverso). Imagine la misma situación, solo el sitio Y está configurado con un proxy inverso. Por lo general, puede conectarse directamente desde X -> Z. Sin embargo, en algunos escenarios, el administrador de Z es mejor restringir o prohibir el acceso directo y obligar a los visitantes a pasar primero por Y. Por lo tanto, como antes, obtenemos los datos recibidos por Y -> Z en nombre de X, que es el siguiente: X -> Y -> Z.
Este caso difiere del "proxy directo" en que el usuario X no sabe que está accediendo a Z porque el usuario X ve que está intercambiando datos con Y. El servidor Z es invisible para los clientes, y solo el servidor proxy externo Y es visible externamente . El proxy inverso no requiere configuración del lado del cliente. El cliente X cree que solo está interactuando con Y (X -> Y), pero la realidad es que Y redirige toda la conexión (X -> Y -> Z nuevamente).

A continuación, consideraremos trabajar con un equilibrador de software.

¿Qué software equilibrador elegir?


En nuestra experiencia, Nginx es la mejor opción entre los equilibradores de software porque admite el modo de sesiones Sticky y también es uno de los servidores web más utilizados, lo que implica una buena documentación y suficiente popularidad entre los especialistas de TI.

La sesión fija es un método de equilibrio de carga en el que las solicitudes de los clientes se envían al mismo servidor de grupo. Nginx tiene un método adhesivo que utiliza cookies para equilibrar, pero solo en la versión comercial. Pero hay una forma gratuita: el uso de módulos externos.

El módulo crea una cookie y, por lo tanto, hace que cada navegador sea único. A continuación, se usa una cookie para redirigir las solicitudes al mismo servidor. Si no hay cookies (por ejemplo, en la primera solicitud), el servidor se selecciona aleatoriamente.
Puede leer más sobre el método adhesivo en este enlace , así como en este Habrapost .

Y ahora, pasemos a la parte práctica ...

Instrucciones para crear un clúster de Jira DataCenter


Para la agrupación, puede usar una instancia existente con Jira instalada o una nueva. En nuestro ejemplo, se describirá la instalación de nuevas instancias en diferentes sistemas operativos (para demostrar la versatilidad del sistema).

1. Comencemos con el servidor de la base de datos. Puede usar tanto existentes como crear uno nuevo. Nuevamente, por ejemplo, se seleccionó Windows Server 2016 + PostgreSQL 9.4. Instale el sistema operativo, instale el servidor PG, instale PG Admin, agregue el usuario y la base de datos.

2. Cree el primer nodo en el sistema operativo Ubuntu 16.04 LTS. Instale los paquetes necesarios, actualizaciones de repositorio.

3. Descargue e instale el Jira DataCenter, inicie, configure la base de datos (por si acaso, Atlassian tiene una guía detallada).

4. Apague Jira, apague el nodo.
servicio jira parada

5. Para futuras manipulaciones, es mejor deshabilitar temporalmente la ejecución automática de Jira:
update-rc.d -f jira eliminar

6. Clonamos el nodo apagado.

7. Inicie el primer nodo, apague Jira (de forma predeterminada, Jira después de la instalación está configurada en ejecución automática).

8. Ejecute el segundo nodo, apague Jira.

9. Cree una instancia separada para el equilibrador. Elegí Ubuntu 16.04 porque es bastante rápido, simple y no requiere costos adicionales en forma de licencias.

10. Instale nginx (el ejemplo utilizó la versión 1.13.4).

11. Descargue y descomprima nginx-sticky-module-ng:
git clone bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git

12. Prepare nginx para volver a compilar y agregar un módulo.

13. Compile nginx con el módulo nginx-sticky-module-ng. En mi caso, la línea de compilación resultó así:
./configure --prefix = / etc / nginx --sbin-path = / usr / sbin / nginx --modules-path = / usr / lib / nginx / modules --conf-path = / etc / nginx / nginx. conf --error-log-path = / var / log / nginx / error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx. pid --lock-path = / var / run / nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx --group = nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module - -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_sl_mle_module -with-http_sub_module --with-ht tp_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt = '- g -O2 -fstack-protector - param = ssp-buffer-size = 4 -Wformat -Werror = format-security -Wp, -D_FORTIFY_SOURCE = 2 -fPIC '--with-ld-opt =' - Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, ahora -Wl, - según sea necesario -pie '--add-module = / usr / local / src / nginx-sticky-module-ng

14. Busque el archivo /etc/nginx/nginx.conf, cópielo en .bak, configure nginx para invertir el modo proxy.

15. Luego, necesitamos un servidor de archivos (preferiblemente también tolerante a fallas). Por ejemplo, elegí un servidor de Windows, donde creé una bola NFS.

16. En cada nodo instalamos paquetes para soporte NFS:
apt-get install nfs-common

17. Cree la carpeta / media / jira y ejecute:
chmod -R 0777 / media / Jira

18. Monte la bola NFS como una compartida (es necesario montarla no en la carpeta raíz, sino, por ejemplo, en / media / jira) - CADA NODO

19.1 Además, es posible realizar el montaje manual (individual):
sudo mount -t nfs -O uid = 1000, iocharset = utf-8 xx.xx.xx.xx: / jira / media / jira
donde xx.xx.xx.xx es la dirección IP del servidor con la bola NFS

19.2 O montaje automático de inmediato (al inicio del sistema operativo):
mcedit / etc / fstab
Al final necesitas agregar la línea:
192.168.7.239:/jira / media / jira nfs user, rw 0 0
Luego guardar y salir.

20. Asignar ID: el primer nodo nodo1, en el segundo nodo nodo2, y así sucesivamente.
# Este ID debe ser único en todo el clúster
jira.node.id = node1
# La ubicación del directorio de inicio compartido para todos los nodos de Jira
jira.shared.home = / media / jira

21. Ejecute la jira en el primer nodo
servicio jira inicio
comprobar:
vaya al sistema -> información del sistema -> busque el clúster activado y el número de nodo.

22. Configurar el equilibrio nginx

23. Desde anteriormente deshabilitamos el inicio automático de Jira en los nodos, luego podemos habilitarlo con el comando:
update-rc.d -f jira enable

24. Verificamos el funcionamiento del clúster y agregamos nodos según sea necesario.

Orden de inicio de clúster


1. Habilite el servidor del sistema de archivos compartido
2. Habilitar equilibrador de carga
3. Habilitar nodo1
4. Habilitar nodo2
5. ...

Orden de detención de clúster


1. Detenga Jira en ambos nodos con el comando de servicio Jira stop
2. Apague el nodo 2
3. Apague el nodo 1
4. Apague el balanceador de carga
5. Apague el servidor del sistema de archivos

Eso es todo ...


Por supuesto, el método descrito no es el único verdadero. Esta es solo una forma de implementación.

Expreso mi gratitud a mis colegas por su ayuda en la preparación del material.
Comente, haga preguntas y gracias por su atención.

Source: https://habr.com/ru/post/es433904/


All Articles