De forma predeterminada, Looker usa una base de datos HyperSQL en memoria para almacenar la configuración, los usuarios y otros datos. En una instancia ocupada, el tamaño de esta base de datos puede llegar a ser de gigabytes, lo que puede generar problemas de rendimiento, presión de la memoria Java y largos tiempos de inicio.
En una instancia alojada por el cliente, recomendamos que reemplaces la base de datos HyperSQL por un backend completo de la base de datos de MySQL cuando la base de datos interna de HyperSQL supere los 600 MB. Para verificar el tamaño de la base de datos HyperSQL, consulta el tamaño del archivo looker.script
:
cd looker
cd .db
ls -lah
Si el archivo looker.script
supera el tamaño de 600 MB, sigue estos procedimientos para migrar a una base de datos de MySQL externa.
Aprovisiona una instancia de MySQL
Aprovisionar una instancia de MySQL 8.0.x para usarla como backend Las versiones de MySQL anteriores a la 8.0 no son compatibles.
En AWS RDS, es probable que una instancia de la clase db.m5.large
sea suficiente como backend para una sola instancia de Looker. Aunque es probable que el uso real de la base de datos esté en el rango de 5 a 10 GB, se recomienda aprovisionar de 100 a 150 GB de almacenamiento SSD, ya que las IOPS aprovisionadas se basan en la cantidad de almacenamiento solicitada.
MySQL 8.0.X: Cómo cambiar el complemento de autenticación predeterminado
En MySQL 8.0.X, el complemento de autenticación predeterminado es caching_sha2_password
. Looker usa el complemento mysql_native_password
para intentar autenticar en las bases de datos de MySQL a través del controlador de JDBC. Para que esta versión de MySQL funcione de forma correcta, debes realizar los siguientes pasos adicionales:
Configura la base de datos de MySQL para usar el complemento
mysql_native_password
. Esto se puede hacer de varias maneras, y dependerá de cómo se implemente tu base de datos de MySQL 8 y del tipo de acceso que tengas a la configuración:Comienza el proceso con la marca
--default-auth=mysql_native_password
.Establece la propiedad en el archivo de configuración
my.cnf
:[mysqld] default-authentication-plugin=mysql_native_password
Si tu instancia de base de datos está alojada a través de AWS RDS, establece el parámetro
default_authentication_plugin
a través de un grupo de parámetros de RDS que se aplique a esta instancia de base de datos.
Ejecuta las siguientes instrucciones y reemplaza
some_password_here
por una contraseña única y segura:CREATE USER looker IDENTIFIED WITH mysql_native_password BY 'some_password_here'; GRANT SELECT ON database_name.* TO 'looker'@'%';
Ajusta MySQL
Establece la siguiente configuración en tu instancia de MySQL.
Aumenta el tamaño máximo del paquete
El tamaño predeterminado de max_allowed_packet
de MySQL es demasiado pequeño para la migración de la base de datos y puede provocar que la migración falle con un error PACKET_TOO_LARGE
. Establece max_allowed_packet
en el valor máximo permitido de 1073741824
:
max_allowed_packet = 1073741824
Configurar el algoritmo de la tabla temporal
MySQL 8 maneja las tablas temporales internas de manera diferente a las versiones anteriores. La configuración predeterminada puede causar problemas para ejecutar algunas de las consultas necesarias para que se ejecute Looker, especialmente en las instancias de Looker con muchos usuarios y proyectos. La práctica recomendada es establecer la siguiente configuración global del servidor:
internal_tmp_mem_storage_engine = MEMORY
Cómo configurar grupos de caracteres
Configura los siguientes parámetros predeterminados para usar UTF8mb4, que admite grupos de caracteres UTF8. Consulta el artículo En MySQL, nunca uses “utf8”. Usa "utf8mb4". para saber por qué recomendamos usar UTF8mb4 (no UTF8) con MySQL.
character_set_client = utf8mb4
character_set_results = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_server = utf8mb4
collation_connection = utf8mb4_general_ci
collation_server = utf8mb4_general_ci
Para aplicar esta configuración en las instancias de Amazon RDS, debes crear o modificar un grupo de parámetros y editar la configuración correspondiente. Te recomendamos que copies el grupo de parámetros actual y realices los cambios en la copia, especialmente si compartes grupos de parámetros en varias instancias de RDS. Después de guardar el grupo de parámetros, aplícalo a la instancia de RDS. Es posible que debas reiniciar el dispositivo.
Configura tu esquema de réplica
Looker se basa en la funcionalidad que requiere un binlog de mixed
o row
. Si alojas tu propia instancia de MySQL, configura binlog_format
como mixed
o row
mediante uno de los siguientes comandos:
SET GLOBAL binlog_format = 'MIXED';
o
SET GLOBAL binlog_format = 'ROW';
Crea una base de datos y un usuario
Crea un usuario y una base de datos en la instancia de base de datos. Para ello, reemplaza <DB_username>
, <DB_name>
y <DB_password>
por los valores reales del usuario y la base de datos. También reemplaza <DB_charset>
y <DB_collation>
por el grupo de caracteres y la intercalación elegidos que coincidan con la configuración del grupo de parámetros de instancias de RDS (para una verdadera compatibilidad con UTF8, recomendamos utf8mb4
y utf8mb4_general_ci
).
create user <DB_username>;
set password for <DB_username> = password ('<DB_password>');
create database <DB_name> default character set <DB_charset> default collate <DB_collation>;
grant all on <DB_name>.* to <DB_username>@'%';
grant all on looker_tmp.* to '<DB_username>'@'%';
No es necesario que exista la base de datos looker_tmp
de la última línea, pero se necesita la sentencia grant
para los informes internos.
Crea un archivo de credenciales de la base de datos
Looker necesita saber con qué base de datos de MySQL hablar y qué credenciales usar. En el directorio de Looker, crea un archivo llamado looker-db.yml
con el siguiente contenido y reemplaza <DB_hostname>
, <DB_username>
, <DB_password>
y <DB_name>
por los valores de tu base de datos:
dialect: mysql
host: <DB_hostname>
username: <DB_username>
password: <DB_password>
database: <DB_name>
port: 3306
Si tu base de datos MySQL requiere una conexión SSL, agrega la siguiente línea a looker-db.yml
:
ssl: true
Si también deseas habilitar la verificación del certificado SSL, agrega la siguiente línea a looker-db.yml
:
verify_ssl: true
De manera opcional, también puedes especificar otros parámetros de JDBC adicionales compatibles con el controlador de JDBC de MariaDB. Para ello, agrega jdbc_additional_params
. Por ejemplo, si necesitas usar un archivo específico de almacén de confianza, puedes agregar el siguiente parámetro a la string de conexión de JDBC de MySQL:
jdbc_additional_params: trustStore=/path/to/my/truststore.jks&keyStore=/path/to/my/keystore.jks
Para las instalaciones alojadas por el cliente, tienes la opción de especificar la cantidad máxima de conexiones que Looker puede establecer con tu base de datos agregando max_connections
. Por ejemplo, para limitar la cantidad de conexiones simultáneas a tu base de datos a 10, agrega lo siguiente:
max_connections: 10
En el esquema de encriptación de Looker, todos los datos sensibles de la base de datos se encriptan en reposo. Incluso si alguien accediera a las credenciales de la base de datos en texto simple y a la base de datos, Looker encripta los datos sensibles o genera un hash para ellos antes de su almacenamiento. Esto se aplica a contraseñas, credenciales de bases de datos de Analytics, caché de consultas, etcétera. Sin embargo, si no quieres almacenar la contraseña de texto simple para esta configuración en el archivo looker-db.yml
del disco, puedes configurar la variable de entorno LOOKER_DB
a fin de que contenga una lista de claves o valores para cada línea en el archivo looker-db.yml
. Por ejemplo:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Crea una copia de seguridad del directorio .db
Crea una copia de seguridad del directorio .db
, que contiene los archivos necesarios para compilar la base de datos HyperSQL en la memoria, en caso de que necesites restablecer HyperSQL:
cp -r .db .db-backup
tar -zcvf db-backup.tar.gz ./.db-backup
Migra la base de datos
La migración de la base de datos a MySQL puede tardar horas en una instancia mediana o grande, en especial si la base de datos HyperSQL es de 1 GB o más. Te recomendamos que actualices temporalmente la instancia EC2 a m5.2xlarge
(con 32 GB de RAM para permitir el montón de 26 GB especificado en los pasos) durante la migración, lo que reduce el tiempo necesario a aproximadamente 10 minutos.
En el host de Looker, haz lo siguiente:
cd looker ./looker stop vi looker
En la secuencia de comandos de inicio de Looker, crea una nueva segunda línea en el archivo:
exit
Detén la instancia en la consola de AWS. Una vez que se detenga, cambia el tamaño de la instancia de EC2 a
m5.2xlarge
. Luego, vuelve a iniciar la instancia.Establece una conexión SSH al host como usuario de Looker. Primero, asegúrate de que Java no se esté ejecutando. Luego, ejecuta el siguiente comando:
cd looker java -Xms26000m -Xmx26000m -jar looker.jar migrate_internal_data looker-db.yml
Cuando ejecutes el paso
migrate_internal_data
, es posible que no se encuentrelibcrypt
y que aparezca un seguimiento de pila que comienza con lo siguiente:NotImplementedError: getppid unsupported or native support failed to load ppid at org/jruby/RubyProcess.java:752 ppid at org/jruby/RubyProcess.java:749
Si esto sucede, configura
LD_LIBRARY_PATH
de forma manual antes de ejecutar el comando de Java:export LD_LIBRARY_PATH=$HOME/looker/.tmp/:$LD_LIBRARY_PATH
Una vez que se complete con éxito, detén la instancia desde la consola de AWS.
Ahora puedes restablecer la instancia a su tamaño original.
Vuelve a iniciar la instancia.
Iniciar Looker
Edita la secuencia de comandos de inicio de Looker y borra la línea
exit
que agregaste antes.Asegúrate de que no haya argumentos definidos en
LOOKERARGS
en la secuencia de comandos de inicio. En cambio, cualquier argumento debe trasladarse al archivolookerstart.cfg
para que no se reemplacen por versiones nuevas de la secuencia de comandos de inicio. Guarda y sal de la secuencia de comandos de inicio.Editar
lookerstart.cfg
. El resultado debería ser similar al siguiente:LOOKERARGS="-d looker-db.yml"
Si hubo otros argumentos en la secuencia de comandos de inicio de Looker, agrégalos al archivo
lookerstart.cfg
.Archiva el directorio
.db
si aún no está archivado.mv .db .db-backup tar -zcvf db-backup.tar.gz ./.db-backup rm -rf ./.db-backup/
Inicia Looker:
./looker start
Verifica que Looker esté usando la base de datos nueva
Si Looker usa correctamente el backend de MySQL, deberías ver conexiones de red entre la instancia de Looker y la instancia de base de datos nueva. Para verificar esto, ejecuta el siguiente comando en la instancia de Looker:
netstat -na | grep 3306
Deberías ver algunas conexiones a la instancia de la base de datos. A continuación, se muestra un resultado de muestra que muestra una instancia de base de datos en la dirección IP 10.0.3.155
:
looker@instance1:~$ netstat -na | grep 3306
tcp6 0 0 10.0.5.131:56583 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56506 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56582 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56508 10.0.3.155:3306 ESTABLISHED
Creando una copia de seguridad de Looker
Después de migrar a un backend de MySQL, las copias de seguridad automatizadas de S3 de Looker dejarán de funcionar. Recomendamos al menos copias de seguridad nocturnas de la base de datos de MySQL junto con copias de seguridad nocturnas del sistema de archivos del directorio de trabajo de Looker. Es posible que el directorio looker/log/
se excluya de las copias de seguridad del sistema de archivos. Consulta la página de documentación Crea copias de seguridad para obtener más información.