Agrupamiento en clústeres de Looker

En este instructivo, se explica el método recomendado para crear una configuración agrupada de Looker en instancias alojadas por el cliente.

Descripción general

Las implementaciones de Looker alojadas por el cliente pueden ejecutar un solo nodo o agrupadas en clústeres:

  • Una aplicación de Looker de un solo nodo, que es la configuración predeterminada, tiene todos los servicios que conforman la aplicación de Looker que se ejecuta en un solo servidor.
  • Una configuración agrupada de Looker es una configuración más compleja que, por lo general, involucra servidores de bases de datos, balanceadores de cargas y varios servidores que ejecutan la aplicación de Looker. Cada nodo de una aplicación de Looker agrupada en clústeres es un servidor que ejecuta una sola instancia de Looker.

Hay dos motivos principales por los que una organización querría ejecutar Looker como un clúster:

  • Balanceo de cargas
  • Disponibilidad y conmutación por error mejoradas

Según los problemas de escalamiento, es posible que un clúster de Looker no proporcione la solución. Por ejemplo, si una pequeña cantidad de consultas grandes está consumiendo la memoria del sistema, la única solución es aumentar la memoria disponible para el proceso de Looker.

Alternativas de balanceo de cargas

Antes de realizar el balanceo de cargas de Looker, considera aumentar la memoria y, posiblemente, la cantidad de CPU de un solo servidor que ejecute Looker. Looker recomienda configurar una supervisión de rendimiento detallada para el uso de memoria y CPU a fin de garantizar que el servidor de Looker tenga el tamaño adecuado para su carga de trabajo.

Las consultas grandes necesitan más memoria para lograr un mejor rendimiento. El agrupamiento en clústeres puede mejorar el rendimiento cuando muchos usuarios ejecutan consultas pequeñas.

Para configuraciones con hasta 50 usuarios que usan poco Looker, Looker recomienda ejecutar un solo servidor en el equivalente a una instancia EC2 de AWS de tamaño grande (M4.large: 8 GB de RAM, 2 núcleos de CPU). Para configuraciones con más usuarios o muchos power users activos, observa si la CPU aumenta repentinamente o si los usuarios notan lentitud en la aplicación. Si es así, mueve Looker a un servidor más grande o ejecuta una configuración de Looker en clústeres.

Disponibilidad/conmutación por error mejorada

Ejecutar Looker en un entorno agrupado en clústeres puede mitigar el tiempo de inactividad en caso de interrupciones. La alta disponibilidad es especialmente importante si la API de Looker se usa en sistemas empresariales principales o si Looker está incorporado en los productos para clientes.

En una configuración agrupada de Looker en clústeres, un servidor proxy o balanceador de cargas redirigirá el tráfico cuando determine que un nodo está inactivo. Looker controla automáticamente los nodos que salen del clúster y se unen a él.

Componentes obligatorios

Los siguientes componentes son obligatorios para una configuración agrupada de Looker en clústeres:

  • Base de datos de aplicaciones MySQL
  • Nodos de Looker (servidores que ejecutan el proceso de Java de Looker)
  • Balanceador de cargas
  • Sistema de archivos compartido
  • Versión adecuada de los archivos JAR de la aplicación de Looker

En el siguiente diagrama, se ilustra cómo interactúan los componentes. En un nivel alto, un balanceador de cargas distribuye el tráfico de red entre los nodos de Looker agrupados. Cada uno de los nodos se comunica con una base de datos de aplicación MySQL compartida, un directorio de almacenamiento compartido y los servidores Git para cada proyecto de LookML.

Base de datos de aplicaciones MySQL

Looker usa una base de datos de aplicaciones (a menudo denominada base de datos interna) para conservar los datos de la aplicación. Cuando Looker se ejecuta como una aplicación de un solo nodo, por lo general, usa una base de datos HyperSQL en la memoria.

En una configuración de Looker agrupada en clústeres, la instancia de Looker de cada nodo debe apuntar a una base de datos transaccional compartida (la aplicación compartida o la base de datos interna). La compatibilidad de la base de datos de la aplicación para Looker en clústeres es la siguiente:

  • Solo MySQL es compatible con la base de datos de la aplicación para las instancias de Looker agrupadas. No se admiten Amazon Aurora ni MariaDB.
  • Se admiten las versiones 5.7 y 8.0 o posteriores de MySQL.
  • No se admiten bases de datos agrupadas, como Galera.

Looker no administra el mantenimiento ni las copias de seguridad de esa base de datos. Sin embargo, dado que la base de datos aloja casi todos los datos de configuración de la aplicación de Looker, debe aprovisionarse como una base de datos de alta disponibilidad y crear una copia de seguridad al menos una vez al día.

Nodos de Looker

Cada nodo es un servidor con el proceso de Java de Looker en ejecución. Los servidores del clúster de Looker deben poder comunicarse entre sí y con la base de datos de la aplicación de Looker. Los puertos predeterminados se enumeran en Abre los puertos para que los nodos se comuniquen en esta página.

Balanceador de cargas

Para equilibrar la carga o redireccionar las solicitudes a los nodos disponibles, se necesita un balanceador de cargas o un servidor proxy (por ejemplo, NGINX o AWS ELB) para dirigir el tráfico a cada nodo de Looker. El balanceador de cargas maneja las verificaciones de estado. Si un nodo falla, el balanceador de cargas debe configurarse para redirigir el tráfico a los nodos en buen estado restantes.

Cuando elijas y configures el balanceador de cargas, asegúrate de que se pueda configurar para que funcione solo como capa 4. Amazon Classic ELB es un ejemplo de esto. Además, el balanceador de cargas debe tener un tiempo de espera prolongado (3,600 segundos) para evitar que se cierren las consultas.

Sistema de archivos compartido

Debes usar un sistema de archivos compartidos que cumpla con POSIX (como NFS, AWS EFS, Gluster, BeeGFS, Lustre y muchos otros). Looker usa el sistema de archivos compartidos como repositorio para diversos datos que usan todos los nodos del clúster.

Aplicación de Looker (ejecutable de JAR)

Debes usar un archivo JAR de la aplicación de Looker que sea Looker 3.56 o posterior.

Looker recomienda que cada nodo de un clúster ejecute la misma actualización y versión de parche de Looker, como se explica en Inicia Looker en los nodos en esta página.

Configura el clúster

Se requieren las siguientes tareas:

  1. Instala Looker
  2. Configura una base de datos de aplicación MySQL
  3. Configura el sistema de archivos compartidos
  4. Comparte el repositorio de claves SSH (según tu situación).
  5. Abre los puertos para que se comuniquen los nodos
  6. Inicia Looker en los nodos

Instalando Looker

Asegúrate de tener Looker instalado en cada nodo. Para ello, usa los archivos JAR de la aplicación de Looker y las instrucciones en la página de documentación Pasos de instalación alojados por el cliente.

Configura una base de datos de aplicación de MySQL

Para una configuración agrupada de Looker en clústeres, la base de datos de la aplicación debe ser una base de datos de MySQL. Si tienes una instancia existente de Looker no agrupada en clústeres que usa HyperSQL para la base de datos de la aplicación, debes migrar los datos de la aplicación de los datos de HyperSQL a tu nueva base de datos de aplicaciones MySQL compartida.

Consulta la página de documentación Migra a MySQL para obtener información sobre cómo crear una copia de seguridad de Looker y, luego, migrar la base de datos de la aplicación de HyperSQL a MySQL.

Cómo configurar el sistema de archivos compartidos

Solo tipos de archivos específicos (archivos de modelo, claves de implementación, complementos y, potencialmente, archivos de manifiesto de la aplicación) pertenecen al sistema de archivos compartidos. Para configurar el sistema de archivos compartidos, haz lo siguiente:

  1. En el servidor que almacenará el sistema de archivos compartidos, verifica que tengas acceso a otra cuenta que pueda su a la cuenta de usuario de Looker.
  2. En el servidor del sistema de archivos compartidos, accede a la cuenta de usuario de Looker.
  3. Si Looker está en ejecución, desactiva la configuración de Looker.
  4. Si antes usabas secuencias de comandos de inotify de Linux para agrupar en clústeres, detén esas secuencias de comandos, quítalas de cron y bórralas.
  5. Crear un recurso compartido de red y activarlo en cada nodo del clúster Asegúrate de que esté configurada para la activación automática en cada nodo y de que el usuario de Looker tenga la capacidad de leer y escribir en él. En el siguiente ejemplo, el recurso compartido de red se llama /mnt/looker-share.
  6. En un nodo, copia tus claves de implementación y mueve tus complementos y los directorios looker/models y looker/models-user-*, que almacenan tus archivos del modelo, al recurso compartido de red. Por ejemplo:

    mv looker/models /mnt/looker-share/
    mv looker/models-user-* /mnt/looker-share/
    
  7. Para cada nodo, agrega el parámetro de configuración --shared-storage-dir a LOOKERARGS. Especifica la red compartida, como se muestra en este ejemplo:

    --shared-storage-dir /mnt/looker-share
    

    Debes agregar LOOKERARGS a $HOME/looker/lookerstart.cfg para que las actualizaciones no afecten la configuración. Si tus LOOKERARGS no aparecen en ese archivo, es posible que alguien las haya agregado directamente a la secuencia de comandos de shell $HOME/looker/looker.

    Cada nodo del clúster debe escribir en un directorio /log único o, al menos, en un archivo de registro único.

Comparte el repositorio de claves SSH

  • Estás creando un clúster de sistema de archivos compartidos a partir de una configuración existente de Looker.
  • Tienes proyectos que se crearon en Looker 4.6 o en versiones anteriores.

Configura el repositorio de claves SSH que se compartirá:

  1. En el servidor de archivos compartidos, crea un directorio llamado ssh-share. Por ejemplo: /mnt/looker-share/ssh-share.

    Asegúrate de que el usuario de Looker sea el propietario del directorio ssh-share y de que los permisos sean 700. Además, asegúrate de que los directorios superiores al directorio ssh-share (como /mnt y /mnt/looker-share) no admitan escritura pública ni en grupo.

  2. En un nodo, copia el contenido de $HOME/.ssh en el nuevo directorio ssh-share. Por ejemplo:

    cp $HOME/.ssh/* /mnt/looker-share/ssh-share

  3. Para cada nodo, haz una copia de seguridad del archivo SSH existente y crea un symlink al directorio ssh-share. Por ejemplo:

    cd $HOME
    mv .ssh .ssh_bak
    ln -s /mnt/looker-share/ssh-share .ssh
    

    Asegúrate de realizar este paso para cada nodo.

Apertura de los puertos para que se comuniquen los nodos

Los nodos agrupados de Looker se comunican entre sí a través de HTTPS con certificados autofirmados y un esquema de autenticación adicional basado en la rotación de secretos en la base de datos de la aplicación.

Los puertos predeterminados que deben estar abiertos entre los nodos del clúster son 1551 y 61616. Estos puertos se pueden configurar mediante las marcas de inicio que se indican aquí. Recomendamos restringir el acceso de red a estos puertos para permitir el tráfico solo entre los hosts del clúster.

Inicia Looker en los nodos

Reinicia el servidor en cada nodo con las marcas de inicio necesarias.

Marcas de inicio disponibles

En la siguiente tabla, se muestran las marcas de inicio disponibles, incluidas las necesarias para iniciar o unirse a un clúster:

Marca ¿Es obligatorio? Valores Objetivo
--clustered Agrega una marca para especificar que este nodo se ejecuta en modo agrupado en clústeres.
-H o --hostname 10.10.10.10 El nombre de host que usan otros nodos para comunicarse con este nodo, como la dirección IP del nodo o el nombre de host del sistema. Debe ser diferente de los nombres de host de todos los demás nodos del clúster.
-n No 1551 El puerto para la comunicación entre nodos. El valor predeterminado es 1551. Todos los nodos deben usar el mismo número de puerto para la comunicación entre nodos.
-q No 61616 El puerto para poner en cola eventos de todo el clúster. El valor predeterminado es 61616.
-d /path/to/looker-db.yml La ruta al archivo que contiene las credenciales de la base de datos de la aplicación de Looker.
--shared-storage-dir /path/to/mounted/shared/storage La opción debe apuntar a la configuración del directorio compartido antes de esta página que contiene los directorios looker/model y looker/models-user-*.

Ejemplo de LOOKERARGS y especifica las credenciales de la base de datos

Coloca las marcas de inicio de Looker en un archivo lookerstart.cfg, ubicado en el mismo directorio que los archivos JAR de Looker.

Por ejemplo, puedes indicarle a Looker lo siguiente:

  • Si deseas usar el archivo llamado looker-db.yml para las credenciales de su base de datos, haz lo siguiente:
  • que es un nodo agrupado en clústeres
  • que los otros nodos del clúster se comuniquen con este host en la dirección IP 10.10.10.10.

Debes especificar lo siguiente:

LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"

El archivo looker-db.yml contendrá las credenciales de la base de datos, como las siguientes:

host: your.db.hostname.com
username: db_user
database: looker
dialect: mysql
port: 3306
password: secretPassword

Si tu base de datos de MySQL requiere una conexión SSL, el archivo looker-db.yml también requiere lo siguiente:

ssl: true

Si no quieres almacenar la configuración en el archivo looker-db.yml del disco, puedes configurar la variable de entorno LOOKER_DB para que contenga una lista de claves y valores para cada línea del archivo looker-db.yml. Por ejemplo:

export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"

Busca tus claves de implementación SSH de Git

La ubicación en la que Looker almacena las claves de implementación SSH de Git depende de la versión en la que se creó el proyecto:

  • Para los proyectos creados antes de Looker 4.8, las claves de implementación se almacenan en el directorio SSH integrado del servidor, ~/.ssh.
  • En el caso de los proyectos creados en Looker 4.8 o versiones posteriores, las claves de implementación se almacenan en un directorio controlado por Looker, ~/looker/deploy_keys/PROJECT_NAME.

Modifica un clúster de Looker

Después de crear un clúster de Looker, puedes agregar o quitar nodos sin hacer cambios en los otros nodos agrupados en clústeres.

Actualiza un clúster a una versión nueva de Looker

Es posible que las actualizaciones incluyan cambios de esquema en la base de datos interna de Looker que no sean compatibles con versiones anteriores de Looker. Existen dos métodos para actualizar Looker.

Método más seguro

  1. Crear una copia de seguridad de la base de datos de la aplicación
  2. Detén todos los nodos del clúster.
  3. Reemplaza los archivos JAR de cada servidor.
  4. Inicia un nodo a la vez.

Método más rápido

Para actualizar con este método más rápido, pero menos completo, haz lo siguiente:

  1. Crear una réplica de la base de datos de la aplicación de Looker
  2. Inicia un clúster nuevo que apunte a la réplica.
  3. Apuntar el servidor proxy o el balanceador de cargas a los nodos nuevos, después de lo cual podrás detener los nodos antiguos.