Fundamentos de Payara Server Parte 3 - Creando un Cluster Sencillo

Photo of Michael Ranaldo by Michael Ranaldo

Continuando con nuestra serie de introducción, este blog va a demostrar como configurar un cluster sencillo de dos instancias mediante Hazelcast.

See here for the original version in English language. 

 

A diferencia de un entorno de desarrollo, donde un sólo servidor es necesario para servir de "prueba de concepto", en producción es normalmente necesario buscar la forma más confiable de hospedar tu aplicación a través de múltiples máquinas redundantes para garantizar la confiabilidad del servicio y permitir la escalabilidad en el futuro. Con Payara Server, es posible crear fácilmente y añadir instancias a clusters utilizando Hazelcast, haciendo muy fácil la configuración de una aplicación distribuida.

 

Requisitos

Para seguir este tutorial vas a necesitar:

  • Una máquina Ubuntu con Payara Server ya instalado.
  • Una máquina Ubuntu con JDK 8 instalada, instalaremos Payara Server más tarde.
  • La aplicación de ejemplo rest-jcache de nuestro Repositorio de Ejemplos de Payara.

Nuestro primer paso es crear un nodo SSH. Para más detalles sobre qué es un nodo SSH, y porque vamos a usarlo aquí, lee este blog.

 

Configurar e instalar un nodo SSH con Payara Server

Una vez se han cumplido los requisitos, nuestro primer paso para crear un cluster será configurar nuestra segunda máquina Ubuntu ('computer2') con su propia instalación de Payara Server y la forma de comunicar con nuestra máquina Ubuntu original ('computer'). Como ambas máquinas funcionan con un sistema operativo GNU/Linux, y requerimos control total de la segunda máquina, vamos a crear un nodo SSH en la máquina computer2. Como parte de la creación del nodo, vamos a utilizar una característica muy útil de Payara Server, su habilidad para crear un archivo zip de sí mismo e instalarlo en un nodo remoto (lo que nos garantiza que ambas instalaciones son iguales y nos ahorra tiempo).

 

A alto nivel, los pasos para configurar computer2 son los siguientes:

  • Configurar computer2 para que acepte tráfico SSH
  • Crear un nuevo nodo SSH en el DAS
  • Instalar Payara Server en el nodo SSH

Instalando un servidor SSH

Para recibir tráfico SSH, computer2 necesita tener un servidor SSH escuchando. La máquina virtual Ubuntu que voy a utilizar no tiene un servidor SSH instalado por defecto, por lo que vamos a instalar un servidor OpenSSH de los repositorios de Ubuntu con el siguiente comando:

 

sudp apt install openssh-server

 

Para versiones de Ubuntu anteriores a 16.04, el comando será 'apt-get install'

Después de instalar el servidor OpenSSH, este debería iniciarse automáticamente. Ejecutando 'netstat -lnt | grep 22' se debería mostrar que el puerto 22, el puerto por defecto para SSH, está ahora abierto y escuchando tráfic

 

1 - payara basics - creating a simple cluster.png

 

Creando un nuevo nodo SSH en Payara Server

Ahora que tenemos SSH configurado en la segunda máquina Ubuntu podemos crear de forma segura el nuevo nodo. En la vista de Nodos de la consola de administración, clicar en el botón Nuevo 'New'.

 

2 - payara basics - creating a simple cluster.png

 

Ahora tenemos que rellenar las propiedades del nuevo nodo:

  • Nombre: Proporciona a tu nodo un nombre único y descriptivo para ayudarte a identificarlo más tarde. Yo elijo computer2.
  • Tipo: Selecciona SSH de la lista desplegable para que podamos configurar el acceso remoto
  • Máquina del Nodo: Introducir la dirección IP de computer2.
  • Installar Payara Server: Habilitarlo para que Payara Server se instale automáticamente en computer2. Payara Server creará un archivo zip de la instalación local y la copiara al nodo remoto. La ubicación de la instalación se puede modificar cambiando 'Directorio de Instalación' (que por defecto es la misma ruta en la que se encuentra en la máquina actual).
  • Puerto SSH: Debe ser configurado al puerto SSH de la máquina computer2, que por defecto es 22.
  • Nombre de usuario de SSH: Debe ser configurado con el nombre de usuario de la máquina computer2.
  • Autenticación de usuario por SSH: Para este ejemplo, vamos a utilizar la autenticación por contraseña, pero con SSH también puedes utilizar un archivo de claves privadas o un alias a una contraseña almacenada en otro lugar.
  • Contraseña de usuario SSH: Debe ser configurado con la contraseña de la máquina computer2.

Con el formulario completado, pulsa el botón OK. No te preocupes si ves un aviso diciendo "Se ha detectado un proceso de larga duración", hay una pequeña pausa mientras se realiza una copia de tu instalación de Payara Server y la instala en la segunda máquina Ubuntu.

 

3 - payara basics - creating a simple cluster.png

 

Una vez que la instalación de Payara Server ha sido transferida de forma segura, y el nodo ha sido creado, serás devuelto a la vista de Nodos.

 

Creando nuevas instancias locales

Con nuestro nodo remoto configurado, tenemos la base. Ahora vamos a configurar dos instancias, una en cada nodod, las cuales alojarán nuestra aplicación desplegada. Vamos a hacer el cluster con nuestras instancias utilizando Hazelcast en lugar del cluster basado en Shoal heredado, lo que quiere decir que vamos a necesitar crear dos instancias 'locales' que compartirán la misma configuración. Primero necesitaremos crear una nueva configuración que ambas van a referenciar para que, como en un cluster heredado, podamos hacer una sóla vez los cambios y afecten a ambas instancias.

 

Creando una nueva configuración

Para crear una nueva configuración para nuestro cluster Hazelcast, hacer clic en el elemento 'Configuraciones' en el menú del lateral izquierdo para ir a la página Configuraciones, en ella hacer clic en el botón 'Nuevo...' para crear una configuración nueva para nuestro cluster.

 

4 - payara basics - creating a simple cluster.png

 

En toda instalación de Payara Server exisitirán dos configuraciónes:

  • server-config es la configuración utilizada por el Servidor de Administración (llamado 'server'). Los cambios realizados aquí afectarán al DAS.
  • default-cofig es proporcionada para ser utilizada como una plantilla, a partir de la cual se puedan crear otras configuraciones, Se puede utilizar directamente, lo cual NO es aconsejable.

Como no queremos añadir modificaciones accidentalmente en la configuración del DAS, vamos a copiar la default-config y renombrarla como cluster-config.

 

5 - payara basics - creating a simple cluster.png

Aceptar la configuración por defecto seleccionada y guardar la nueva configuración.

 

Creando una instancia local

Ahora, vamos a crear instancias que utilizaran nuestra configuración. Para crear una instancia en la máquina local, clicar en 'Nuevo' en la página Instancias del Servidor Locales,

 

6 - payara basics - creating a simple cluster.png

 

On the New Standalone Server Instance page, create the instance as shown below:

 

7 - payara basics - creating a simple cluster.png

 

  • Nombre de la Instancia: He llamado mi instancia 'local-instance' para que esté claro que es la instancia ubicada localmente en la máquina que contiene el DAS.
  • Nodo: El nodo localhost-domain1 es el nodo por defecto que está ubicado localmente en la máquina que contiene el DAS.
  • Configuración: Aquí utilizaremos la configuración creada anteriormente, cluster-config, por lo que debemos estar seguros de referenciarla.

Pulsar 'OK' para terminar de crear nuestra primera instancia.

 

Creando una instancia remota

Podemos repetir el mismo proceso anterior para crear una instancia en el nodo remoto simplemente referenciando a la máquina remota de la siguiente manera:

 

8 - payara basics - creating a simple cluster.png

 

Pulsar 'OK' para crear nuestra segunda y última instancia y volver a la página de Instancias Locales. Ahora deberías tener dos instancias marcadas como 'Detenida'. Selecciona ambas utilizando las cajas de selección a su izquierda e inícialas.

 

9 - payara basics - creating a simple cluster.png

 

Habilitando Hazelcat

Con nuestras instancias iniciadas y referenciando a la misma configuración, cualquier cambio en cluster-config será aplicado en ambas instancias, así como cualquier otra instancia que creemos referenciando a la configuración cluster-config.

Para habilitar Hazelcast en cluster-config, navegar hacia abajo en el árbol del menú 'Configuraciones' y expandir 'cluster-config'.

 

10 - payara basics - creating a simple cluster.png

 

Hacer clic en la pestaña Hazelcast, marcar la caja de selección 'Habilitado' y guardar los cambios.

 

11 - payara basics - creating a simple cluster.png

 

Podemos dejar el resto de las configuraciones en los valores por defecto, aunque esto depende de que la comunicación de multidifusión UDP sea posible en nuestra red. Si tienes algún problema con el descubrimiento automático de Hazelcast, la multidifusión UDP es una de las cosas a verificar.

 

Ver los miembros de un Cluster Hazelcast

Si has habilitado Hazelcast con la opción Dinámico habilitado, deberías ver los mensajes de registro mostrando la inicialización de Hazelcast y los dos miembros descubriéndose unos a otros. Para ver tu cluster Hazelcast, selecciona "Dominio" en el árbol de páginas, y selecciona la pestaña "Hazelcast" y finalmente la subpestaña "Miembros del Cluster" para ver la pestaña Miembros del Cluster Hazelcast. Aquí puedes ver todos los miembros del cluster, junto con las aplicaciones desplegadas en ellos.

 

12 - payara basics - creating a simple cluster.png

 

Ahora tenemos nuestras instancias configuradas, y Hazelcast indica que están enlazadas correctamente en cluster, los que significa que podemos probarlo!

 

Demostrando la replicación de caché

Preparando la aplicación de ejemplo de Payara

 

El repositorio de Ejemplos de Payara en Github está repleto de proyectos que demuestran características específicas disponibles para Payara Server. Nosotros utilizaremos la aplicación rest-jcache para demostrar como Hazelcast distribuye fácilmente los datos, pero primero, tenemos que descargarla y prepararla.

  1. Para descargar y construir el repositorio necesitarás Git y Maven instalados. Ambos están disponibles en los repositorios de Ubuntu y se pueden instalar con el siguiente comando:

    sudo apt install git maven
  2. Clonar el repositorio de Ejemplos de Payara en la primera máquina Ubuntu con el siguiente comando:

    git clone https://github.com/Payara/Payara-Examples
  3. Vamos a construir el ejemplo rest-jcache, por lo que una vez descargado el repositorio, cambiar al directorio "<payara_examples_directory>/rest-examples/rest-jcache". Una vez aquí, puedes ejecutar el comando "mvn clean install" para utilizar Maven para construir el projecto.

13 - payara basics - creating a simple cluster.png

 

 Maven descargará automáticamente las dependencias del proyecto y lo construirá: la aplicación web compilada será almacenada como un fichero WAR dentro del directorio target:

 

14 - payara basics - creating a simple cluster.png

 

Ahora que tenemos nuestra aplicación de prueba preparada, podemos desplegarla!

 

Desplegando la aplicación de ejemplo de Payara

Para probar la habilidad de caché distribuida de nuestro cluster, desplegaremos la aplicación en toda las instancias del cluster y añadiremos algunos datos para demostrar como podemos modificar los datos dentro de todo el cluster al mismo tiempo editando los valores en la caché de una sola instancia local.

Primero, seleccionar la página "Aplicaciones" en el árbol de páginas y hacer clic en "Desplegar...".

 

15 - payara basics - creating a simple cluster.png

 

Después, subir la aplicación construida utilizando el botón "Buscar..., asegurándote de que añades ambas instancias del cluster en el listado de "Destinos Seleccionados":

 

16 - payara basics - creating a simple cluster.png

 

Payara Server se encargará de distribuir la aplicación a las instancias que hayamos seleccionado como destinos.

 

Probando el cluster con la aplicación de ejemplo de Payara

La aplicación rest-jcache utiliza las anotaciones de la API JCache en los métodos REST JAX-RS y escucha en el extremo de la "caché". Todas las peticiones GET, PUT y DELETE están soportadas:

  • GET
    El método getJSON() tiene la anotación @GET, por lo que será llamado con cada petición GET para "cachear" el recurso.  La anotación @CacheResult es una anotación de JCache que realiza una búsqueda en la memoria caché nombrada y devuelve el valor almacenado en la cache de existir uno previamente, de lo contrario ejecuta el cuerpo del método. Si el valor no existe, el cuerpo del método se ejecutará y la cadena de texto "helloworld" será devuelta. En una aplicación real, esto podría ser una búsqueda en la base de datos.
  • PUT
    El método putJSON() tiene la anotación @PUT, por lo que puede ser ejecutado con una petición PUT HTTP. La anotación @CachePut es utilizada junto con las anotaciones @CacheKey y @CacheValue en la declaración del método para poner el valor proporcionado en la caché nombrada. Hemos utilizado el mismo nombre de caché que en el método GET, por lo que cualquier clave que actualicemos con una petición PUT, se verá reflejada en una petición GET posterior.
  • DELETE
    De la misma manera que en con los otros métodos, hemos utilizado una anotación JAX-RS (@DELETE) junto con la anotación JCache (@CacheRemove) para que cuando se reciba una petición DELETE HTTP, el valor con el que la clave proporcionada coincida será borrado de la caché.

Primero demostraremos como la secunda máquina Ubuntu tiene el valor por defecto "helloworld" para, editando el valor almacenado dentro de la primera máquina Ubuntu, mostrar cómo Hazelcast hará disponible automáticamente la entrada de caché para todos los miembros del cluster.

  1. Recuperando el valor por defecto para la clave "payara"
    Nuestros datos están almacenados dentro de la aplicación en un formato JSON como pares de clave-valor. Recuperar una clave cuyo valor no existe en la cache retornara el valor por defecto "helloworld", el cual recibiremos en la segunda instancia Ubuntu cuando enviemos el siguiente comando desde nuestra primera instancia Ubuntu:

  curl "http://<IP_Remota>:<Puerto_de_Instancia_Remota>/rest-jcache-1.0-SNAPSHOT/webresources/cache?key=payara"

17 - payara basics - creating a simple cluster.png

 

Como puedes ver, actualmente no hay valor almacenado para "payara" por lo que obtenemos el valor por defecto en respuesta desde la segunda instancia.


2. Añadir un nuevo valor para la clave "payara" en la instancia local
Podemos añadir un valor para la clave "payara" desde nuestra primera instancia con el siguiente comando:

curl -H "Accept: application/json" -H "Content-Type: application/json" -X PUT -d "badassfish" "http://<IP_Local>:<Puerto_de_Instancia_Local>/rest-jcache-1.0-SNAPSHOT/webresources/cache?key=payara"

 

18 - payara basics - creating a simple cluster.pngGracias a la cache de Hazelcast, este par clave-valor actualizado será distribuido inmediatamente a todas las instancias de nuestro cluster.

 

3. Recupera el nuevo valor de la instancia remota
Seremos capaces de ver este nuevo valor inmediatamente cuando volvamos a ejecutar nuestro comando inicial en la segunda instancia:

curl "http://<IP_Remota>:<Puerto_de_Instancia_Remota>/rest-jcache-1.0-SNAPSHOT/webresources/cache?key=payara"

19 - payara basics - creating a simple cluster.png

 

Y aquí lo tenemos, un cluster funcionando con Payara Server, potenciado por Hazelcast! Ahora tenemos nuestro cluster listo, podemos empezar a desplegar nuestras aplicaciones y aprovechando al máximo nuestra nueva escalabilidad, así como configurando nuestro cluster para realizar balanceo de carga y manejar apropiadamente las sesiones que se tratarán en próximos blogs.

 

 See here for the original version in English language.

 

Payara Server Basics  Articles Series

 

 

 

Comments