En este instructivo, se explica el método recomendado para crear una configuración de Looker agrupada para instancias alojadas por el cliente.
Descripción general
Las implementaciones de Looker alojadas por el cliente se pueden ejecutar en un solo nodo o en un clúster:
- Una aplicación de Looker de un solo nodo, la configuración predeterminada, tiene todos los servicios que conforman la aplicación de Looker ejecutándose en un solo servidor.
- Una configuración de Looker en clústeres es una configuración más compleja, que suele incluir 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 es un servidor que ejecuta una sola instancia de Looker.
Existen 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 Looker agrupado no proporcione la solución. Por ejemplo, si una pequeña cantidad de consultas grandes agota 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 balancear la carga de Looker, considera aumentar la memoria y, posiblemente, el recuento de CPU de un solo servidor que ejecute Looker. Looker recomienda configurar una supervisión de rendimiento detallada para el uso de la CPU y la memoria para garantizar que el servidor de Looker tenga el tamaño adecuado para su carga de trabajo.
Las consultas grandes necesitan más memoria para mejorar el rendimiento. El agrupamiento en clústeres puede proporcionar mejoras de rendimiento cuando muchos usuarios ejecutan consultas pequeñas.
Para configuraciones con hasta 50 usuarios que usan Looker de forma moderada, Looker recomienda ejecutar un solo servidor con el equivalente a una instancia de AWS EC2 de gran tamaño (M4.large: 8 GB de RAM, 2 núcleos de CPU). En el caso de las configuraciones con más usuarios o muchos usuarios avanzados activos, observa si la CPU tiene picos 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 agrupada.
Disponibilidad o conmutación por error mejorada
Ejecutar Looker en un entorno de clústeres puede mitigar el tiempo de inactividad en caso de una interrupción. La alta disponibilidad es especialmente importante si la API de Looker se usa en sistemas empresariales principales o si Looker está incorporado en productos para clientes.
En una configuración de Looker en clústeres, un servidor proxy o un balanceador de cargas redireccionará el tráfico cuando determine que un nodo está inactivo. Looker controla automáticamente los nodos que abandonan el clúster y se unen a él.
Componentes obligatorios
Los siguientes componentes son obligatorios para una configuración de Looker agrupada:
- Base de datos de la aplicación de MySQL
- Nodos de Looker (servidores que ejecutan el proceso de Java de Looker)
- Balanceador de cargas
- Sistema de archivos compartido
- La versión correcta de los archivos JAR de la aplicación de Looker
En el siguiente diagrama, se muestra cómo interactúan los componentes. A nivel general, un balanceador de cargas distribuye el tráfico de red entre los nodos de Looker agrupados. Cada nodo se comunica con una base de datos de aplicación MySQL compartida, un directorio de almacenamiento compartido y los servidores de Git de cada proyecto de LookML.
Base de datos de la aplicación de MySQL
Looker usa una base de datos de la aplicación (a menudo llamada base de datos interna) para almacenar 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 memoria.
En una configuración de Looker agrupada, 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 con la base de datos de la aplicación para Looker agrupado es la siguiente:
- Solo se admite MySQL para la base de datos de la aplicación de las instancias de Looker agrupadas. No se admiten Amazon Aurora ni MariaDB.
- Se admiten las versiones 5.7 y posteriores, y 8.0 y 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, como la base de datos aloja casi todos los datos de configuración de la aplicación de Looker, se debe aprovisionar como una base de datos de alta disponibilidad y se debe crear una copia de seguridad al menos a diario.
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 indican 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 requiere 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 controla las verificaciones de estado. En caso de falla de un nodo, el balanceador de cargas debe configurarse para redirigir el tráfico a los nodos restantes en buen estado.
Cuando elijas y configures el balanceador de cargas, asegúrate de que se pueda configurar para que funcione solo como capa 4. El ELB clásico de Amazon es un ejemplo de esto. Además, el balanceador de cargas debe tener un tiempo de espera largo (3,600 segundos) para evitar que se cancelen 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 compartido como un repositorio para varios datos que usan todos los nodos del clúster.
Aplicación de Looker (JAR ejecutable)
Debes usar un archivo JAR de la aplicación de Looker que sea Looker 3.56 o una versión posterior.
Looker recomienda que cada nodo de un clúster ejecute la misma versión de Looker y el mismo parche, como se explica en Cómo iniciar Looker en los nodos en esta página.
Configura el clúster
Se requieren las siguientes tareas:
- Instala Looker
- Configura una base de datos de aplicaciones de MySQL
- Cómo configurar el sistema de archivos compartido
- Compartir el repositorio de claves SSH (según tu situación)
- Abre los puertos para que los nodos se comuniquen
- Inicia Looker en los nodos
Instala Looker
Asegúrate de tener instalado Looker en cada nodo con los archivos JAR de la aplicación de Looker y las instrucciones de la página de documentación Pasos de instalación alojados por el cliente.
Cómo configurar una base de datos de aplicación de MySQL
Para una configuración 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 de Looker existente no agrupada 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 aplicación compartida de MySQL.
Consulta la página de documentación Cómo migrar 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 compartido
Solo los tipos de archivos específicos (archivos de modelos, claves de implementación, complementos y, posiblemente, archivos de manifiesto de la aplicación) pertenecen al sistema de archivos compartido. Para configurar el sistema de archivos compartido, sigue estos pasos:
- En el servidor que almacenará el sistema de archivos compartido, verifica que tengas acceso a otra cuenta que pueda
su
a la cuenta de usuario de Looker. - En el servidor del sistema de archivos compartidos, accede a la cuenta de usuario de Looker.
- Si Looker está en ejecución, cierra la configuración de Looker.
- Si antes creabas clústeres con secuencias de comandos de inotify de Linux, detén esas secuencias de comandos, quítalas de cron y bórralas.
- Crea un recurso compartido de red y actívalo en cada nodo del clúster. Asegúrate de que esté configurado para activarse automáticamente en cada nodo y de que el usuario de Looker pueda leer y escribir en él. En el siguiente ejemplo, el recurso compartido de red se llama
/mnt/looker-share
. En un nodo, copia tus claves de implementación y mueve los complementos y los directorios
looker/models
ylooker/models-user-*
, que almacenan tus archivos de modelos, al recurso compartido de red. Por ejemplo:mv looker/models /mnt/looker-share/ mv looker/models-user-* /mnt/looker-share/
Para cada nodo, agrega el parámetro de configuración
--shared-storage-dir
aLOOKERARGS
. Especifica el recurso compartido de red, como se muestra en este ejemplo:--shared-storage-dir /mnt/looker-share
Se debe agregar
LOOKERARGS
a$HOME/looker/lookerstart.cfg
para que la configuración no se vea afectada por las actualizaciones. Si tusLOOKERARGS
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.
Cómo compartir el repositorio de claves SSH
- Crearás 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 versiones anteriores.
Configura el repositorio de claves SSH que se compartirá:
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 que se encuentran por encima del directoriossh-share
(como/mnt
y/mnt/looker-share
) no admitan la escritura pública ni grupal.En un nodo, copia el contenido de
$HOME/.ssh
en el nuevo directoriossh-share
. Por ejemplo:cp $HOME/.ssh/* /mnt/looker-share/ssh-share
Para cada nodo, crea 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.
Abrir los puertos para que los nodos se comuniquen
Los nodos de Looker agrupados se comunican entre sí a través de HTTPS con certificados autofirmados y un esquema de autenticación adicional basado en secretos rotativos 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 con las marcas de inicio que se indican aquí. Te recomendamos restringir el acceso de red a estos puertos para permitir el tráfico solo entre los hosts del clúster.
Cómo iniciar Looker en los nodos
Reinicia el servidor en cada nodo con las marcas de inicio requeridas.
Marcas de inicio disponibles
En la siguiente tabla, se muestran las marcas de inicio disponibles, incluidas las que se requieren para iniciar o unirse a un clúster:
Marcar | ¿Es obligatorio? | Valores | Objetivo |
---|---|---|---|
--clustered |
Sí | Agrega una marca para especificar que este nodo se ejecuta en modo de clúster. | |
-H o --hostname |
Sí | 10.10.10.10 |
Es el nombre de host que otros nodos usan para comunicarse con este, como su dirección IP o su 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 |
Es 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 |
Es el puerto para poner en cola eventos en todo el clúster. El valor predeterminado es 61616. |
-d |
Sí | /path/to/looker-db.yml |
Es la ruta de acceso al archivo que contiene las credenciales de la base de datos de la aplicación de Looker. |
--shared-storage-dir |
Sí | /path/to/mounted/shared/storage |
La opción debe apuntar a la configuración de directorios compartidos que se mencionó anteriormente en esta página y que contiene los directorios looker/model y looker/models-user-* . |
Ejemplo de LOOKERARGS
y especificación de 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, podrías decirle a Looker lo siguiente:
- Para usar el archivo llamado
looker-db.yml
para sus credenciales de base de datos, - que es un nodo agrupado
- que los otros nodos del clúster deben comunicarse con este host en la dirección IP 10.10.10.10.
Especificarías 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
Además, 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
en el 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"
Cómo encontrar tus claves de implementación de SSH de Git
El lugar en el que Looker almacena las claves de implementación de SSH de Git depende de la versión en la que se creó el proyecto:
- En el caso de 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
.
Cómo modificar un clúster de Looker
Después de crear un clúster de Looker, puedes agregar o quitar nodos sin realizar cambios en los otros nodos agrupados.
Actualiza un clúster a una nueva versión de Looker
Las actualizaciones pueden implicar cambios de esquema en la base de datos interna de Looker que no serían compatibles con versiones anteriores de Looker. Existen dos métodos para actualizar Looker.
Método más seguro
- Crea una copia de seguridad de la base de datos de la aplicación.
- Detén todos los nodos del clúster.
- Reemplaza los archivos JAR en cada servidor.
- Inicia cada nodo de a uno.
Método más rápido
Para actualizar con este método más rápido, pero menos completo, haz lo siguiente:
- Crea una réplica de la base de datos de la aplicación de Looker.
- Inicia un clúster nuevo que apunte a la réplica.
- Dirige el servidor proxy o el balanceador de cargas a los nodos nuevos. Luego, puedes detener los nodos anteriores.