De forma predeterminada, Looker usa una base de datos en memoria HyperSQL para almacenar su configuración, sus usuarios y otros datos. En una instancia con mucha actividad, esta base de datos puede alcanzar un tamaño de varios gigabytes, lo que puede provocar problemas de rendimiento, presión de memoria de Java y tiempos de inicio prolongados.
En una instancia alojada por el cliente, te recomendamos que sustituyas la base de datos HyperSQL por un backend de base de datos MySQL completo cuando la base de datos HyperSQL interna supere los 600 MB. Para comprobar 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 tamaño del archivo looker.script
supera los 600 MB, sigue estos procedimientos para migrar a una base de datos MySQL externa.
Aprovisionar una instancia de MySQL
Aprovisiona una instancia de MySQL 8.0.x para usarla como backend. No se admiten las versiones de MySQL anteriores a la 8.0.
En AWS RDS, una instancia de la clase db.m5.large
probablemente sea suficiente como backend para una sola instancia de Looker. Aunque el uso real de la base de datos probablemente esté entre 5 y 10 GB, es recomendable aprovisionar entre 100 y 150 GB de almacenamiento SSD, ya que las IOPS aprovisionadas se basan en la cantidad de almacenamiento solicitada.
MySQL 8.0.X: 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 autenticarse en bases de datos MySQL a través del controlador JDBC. Para que esta versión de MySQL funcione correctamente, debes seguir estos pasos adicionales:
Configura la base de datos MySQL para que use el complemento
mysql_native_password
. Esto se puede hacer de varias formas, en función de cómo se haya implementado tu base de datos MySQL 8 y del tipo de acceso que tengas a la configuración:Inicia el proceso con la marca
--default-auth=mysql_native_password
Define 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 en AWS RDS, define el parámetro
default_authentication_plugin
mediante un grupo de parámetros de RDS que se aplique a esta instancia de base de datos.
Ejecuta las siguientes instrucciones y sustituye
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'@'%';
Ajustar MySQL
Ajusta la siguiente configuración en tu instancia de MySQL.
Aumentar el tamaño máximo de los paquetes
El tamaño predeterminado de max_allowed_packet
de MySQL es demasiado pequeño para la migración de bases de datos y puede provocar que la migración falle con un error PACKET_TOO_LARGE
. Asigna a max_allowed_packet
el valor máximo permitido de 1073741824
:
max_allowed_packet = 1073741824
Definir el algoritmo de la tabla temporal
MySQL 8 gestiona las tablas temporales internas de forma diferente a las versiones anteriores. La configuración predeterminada puede provocar problemas al ejecutar algunas de las consultas necesarias para que Looker funcione, especialmente en las instancias de Looker con muchos usuarios y proyectos. Lo más recomendable es definir el siguiente ajuste global del servidor:
internal_tmp_mem_storage_engine = MEMORY
Configurar conjuntos de caracteres
Define los siguientes parámetros predeterminados para usar UTF8mb4, que admite conjuntos de caracteres UTF8. Consulta el artículo En MySQL, nunca uses "utf8". Consulta "utf8mb4" para obtener información sobre por qué recomendamos usar UTF8mb4 (y 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
En las instancias de Amazon RDS, puedes aplicar este ajuste creando o modificando un grupo de parámetros y editando los ajustes correspondientes. Te recomendamos que copies el grupo de parámetros actual y hagas los cambios en la copia, sobre todo 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. Puede que tengas que reiniciar el dispositivo.
Definir el esquema de réplica
Looker se basa en funciones que requieren un archivo de registro binario mixed
o row
. Si alojas tu propia instancia de MySQL, define binlog_format
como mixed
o row
con uno de los siguientes comandos:
SET GLOBAL binlog_format = 'MIXED';
o
SET GLOBAL binlog_format = 'ROW';
Crear una base de datos y un usuario
Crea un usuario y una base de datos en la instancia de base de datos. Para ello, sustituye <DB_username>
, <DB_name>
y <DB_password>
por los valores reales del usuario y la base de datos. También debes sustituir <DB_charset>
y <DB_collation>
por el conjunto de caracteres y la recopilación de datos que coincidan con los ajustes del grupo de parámetros de la instancia de RDS (para que se admita UTF8, te recomendamos que uses 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>'@'%';
La base de datos looker_tmp
de la última línea no tiene por qué existir, pero la instrucción grant
es necesaria para generar informes internos.
Crear un archivo de credenciales de base de datos
Looker necesita saber con qué base de datos de MySQL debe comunicarse y qué credenciales debe usar. En el directorio de Looker, crea un archivo llamado looker-db.yml
con el siguiente contenido. Sustituye <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, añade la siguiente línea a looker-db.yml
:
ssl: true
Si también quieres habilitar la verificación del certificado SSL, añade la siguiente línea a looker-db.yml
:
verify_ssl: true
También puedes especificar otros parámetros JDBC adicionales que admita el controlador JDBC de MariaDB añadiendo jdbc_additional_params
. Por ejemplo, si necesitas usar un archivo de almacén de confianza específico, puedes añadir el siguiente parámetro a la cadena de conexión JDBC de MySQL:
jdbc_additional_params: trustStore=/path/to/my/truststore.jks&keyStore=/path/to/my/keystore.jks
En las instalaciones alojadas por el cliente, puedes especificar el número máximo de conexiones que Looker puede establecer con tu base de datos añadiendo max_connections
. Por ejemplo, para limitar el número de conexiones simultáneas a tu base de datos a 10, añade lo siguiente:
max_connections: 10
Según el esquema de cifrado de Looker, todos los datos sensibles de la base de datos se cifran en reposo. Aunque alguien obtuviera acceso a las credenciales de la base de datos en texto sin cifrar y accediera a la base de datos, Looker cifra o aplica un hash a los datos sensibles antes de almacenarlos. Esto se aplica a contraseñas, credenciales de bases de datos de analíticas, caché de consultas, etc. Sin embargo, si no quieres almacenar la contraseña de texto sin cifrar de esta 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 de cada línea del archivo looker-db.yml
. Por ejemplo:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Crear una copia de seguridad del directorio .db
Crea una copia de seguridad del directorio .db
, que contiene los archivos necesarios para crear la base de datos HyperSQL en memoria, por si necesitas restaurar HyperSQL:
cp -r .db .db-backup
tar -zcvf db-backup.tar.gz ./.db-backup
Migrar la base de datos
Migrar la base de datos a MySQL puede llevar horas en una instancia mediana o grande, sobre todo si la base de datos HyperSQL tiene 1 GB o más. Te recomendamos que actualices temporalmente la instancia de EC2 a una m5.2xlarge
(con 32 GB de RAM para permitir los 26 GB de montículo especificados en los pasos) durante la migración, lo que reduce el tiempo necesario a unos 10 minutos.
En el host de Looker:
cd looker ./looker stop vi looker
En la secuencia de comandos de inicio de Looker, añade una segunda línea al archivo:
exit
Detén la instancia en la consola de AWS. Cuando se detenga, cambia el tamaño de la instancia de EC2 a
m5.2xlarge
. A continuación, vuelve a iniciar la instancia.Conéctate al host mediante SSH como usuario de Looker. Primero, asegúrate de que Java no se esté ejecutando y, a continuación, ejecuta el siguiente comando:
cd looker java -Xms26000m -Xmx26000m -jar looker.jar migrate_internal_data looker-db.yml
Al ejecutar el paso
migrate_internal_data
, es posible que no se encuentrelibcrypt
y que aparezca un rastreo de pila que empiece por 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 ocurre, defina el
LD_LIBRARY_PATH
manualmente antes de ejecutar el comando de Java:export LD_LIBRARY_PATH=$HOME/looker/.tmp/:$LD_LIBRARY_PATH
Una vez que se haya completado correctamente, detén la instancia desde la consola de AWS.
Ahora puedes restaurar la instancia a su tamaño original.
Vuelve a iniciar la instancia.
Iniciar Looker
Edita el script de inicio de Looker y elimina la línea
exit
que has añadido antes.Asegúrate de que no haya argumentos definidos en
LOOKERARGS
en la secuencia de comandos de inicio. En su lugar, los argumentos deben moverse al archivolookerstart.cfg
para que no se sobrescriban con las nuevas versiones de la secuencia de comandos de inicio. Guarda la secuencia de comandos de inicio y sal.Editar
lookerstart.cfg
. Debería tener un aspecto similar al siguiente:LOOKERARGS="-d looker-db.yml"
Si había otros argumentos en la secuencia de comandos de inicio de Looker, añádelos al archivo
lookerstart.cfg
.Archiva el directorio
.db
si aún no lo has hecho.mv .db .db-backup tar -zcvf db-backup.tar.gz ./.db-backup rm -rf ./.db-backup/
Iniciar Looker:
./looker start
Comprobar que Looker esté usando la nueva base de datos
Si Looker usa correctamente el backend de MySQL, deberías ver conexiones de red entre la instancia de Looker y la nueva instancia de base de datos. Para comprobarlo, ejecuta el siguiente comando en la instancia de Looker:
netstat -na | grep 3306
Deberías ver algunas conexiones a la instancia de base de datos. A continuación, se muestra un ejemplo de resultado 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
Crear copias de seguridad de Looker
Después de migrar a un backend de MySQL, las copias de seguridad automáticas de S3 de Looker dejarán de funcionar. Recomendamos que se hagan copias de seguridad de la base de datos MySQL al menos una vez al día, así como copias de seguridad del sistema de archivos del directorio de trabajo de Looker. El directorio looker/log/
se puede excluir de las copias de seguridad del sistema de archivos. Para obtener más información, consulta la página de documentación sobre creación de copias de seguridad.